Kann mir jemand bei dieser Coding Bat-Frage helfen, ich bin ziemlich nah dran, aber ich verstehe nicht, was ich falsch mache. Ich habe versucht, meinen Code auf verschiedene Weise zu überarbeiten, und mir die Lösung angesehen. Wenn jemand das Problem erklären kann, ist das großartig. Ich bin sehr neu in Codierung und Java, daher tut es mir leid, wenn die Lösung offensichtlich ist. Das ist die Frage.

Geben Sie bei 2 positiven int-Werten den größeren Wert zurück, der im Bereich von 10 bis einschließlich 20 liegt, oder geben Sie 0 zurück, wenn keiner der beiden Werte in diesem Bereich liegt.

max1020(11, 19) → 19

max1020(19, 11) → 19

max1020(11, 9) → 11

Und das ist mein code:

public int max1020(int a, int b) {
    int max = 0;
    if(a>b){
      max = a;
    }else{
      max = b;
    }
   if((a<=20  &&  a>=10)||(b<=20 && b>=10)){
     return max;
   }
   return 0;
}

Das sind die Ergebnisse.

Expected    Run     
max1020(11, 19) → 19    19  OK  
max1020(19, 11) → 19    19  OK  
max1020(11, 9) → 11 11  OK  
max1020(9, 21) → 0  0   OK  
max1020(10, 21) → 10    21  X   
max1020(21, 10) → 10    21  X   
max1020(9, 11) → 11 11  OK  
max1020(23, 10) → 10    23  X   
max1020(20, 10) → 20    20  OK  
max1020(7, 20) → 20 20  OK  
max1020(17, 16) → 17    17  OK  
1
viktor234 8 Feb. 2020 im 08:27

4 Antworten

Beste Antwort

Ich würde damit beginnen, das von Ihnen veröffentlichte Testkabel zu implementieren. Dies ist eine sehr nützliche Funktion zur korrekten Implementierung eines Algorithmus.

public static void main(String[] args) {
    int[][][] testCases = { { { 11, 19 }, { 19 } }, //
            { { 19, 11 }, { 19 } }, //
            { { 11, 9 }, { 11 } }, //
            { { 9, 21 }, { 0 } }, //
            { { 10, 21 }, { 10 } }, //
            { { 21, 10 }, { 10 } }, //
            { { 9, 11 }, { 11 } }, //
            { { 23, 10 }, { 10 } }, //
            { { 20, 10 }, { 20 } }, //
            { { 7, 20 }, { 20 } }, //
            { { 17, 16 }, { 17 } } };
    for (int i = 0; i < testCases.length; i++) {
        int a = testCases[i][0][0], b = testCases[i][0][1], c = testCases[i][1][0];
        int r = max1020(a, b);
        System.out.printf("max1020(%d, %d) -> %d   %d %s%n", a, b, r, c, 
                c == r ? "OK" : "X");
    }
}

Dann würde ich max1020 implementieren, indem ich zuerst überprüfe, ob a und b im erforderlichen Bereich liegen. Und ich würde die Ergebnisse dieser Validierung in lokalen boolean Variablen speichern. Wenn beide in Reichweite sind, möchten Sie das Maximum der beiden. Wenn sich nur einer im Bereich befindet, möchten Sie diesen Wert, und wenn sich keiner im Bereich Null befindet. Mögen,

public static int max1020(int a, int b) {
    boolean aRange = a >= 10 && a <= 20, bRange = b >= 10 && b <= 20;
    if (aRange && bRange) {
        return Math.max(a, b);
    } else if (!aRange && bRange) {
        return b;
    } else if (aRange) { // !bRange implied by last two tests
        return a;
    }
    return 0;
}

Welche Ausgänge (mit dem Testkabelbaum)

max1020(11, 19) -> 19   19 OK
max1020(19, 11) -> 19   19 OK
max1020(11, 9) -> 11   11 OK
max1020(9, 21) -> 0   0 OK
max1020(10, 21) -> 10   10 OK
max1020(21, 10) -> 10   10 OK
max1020(9, 11) -> 11   11 OK
max1020(23, 10) -> 10   10 OK
max1020(20, 10) -> 20   20 OK
max1020(7, 20) -> 20   20 OK
max1020(17, 16) -> 17   17 OK
1
Elliott Frisch 8 Feb. 2020 im 05:46

Das Problem hierbei ist, dass Sie den Maximalwert zurückgeben, wenn einer der beiden Werte im Bereich liegt, und Sie den Maximalwert der Werte im Bereich zurückgeben sollen.

Das heißt, zwischen 10 und 21 wird 10 zurückgegeben, da 21, obwohl sie größer ist, außerhalb des Bereichs liegt.

Sie können Ihre Funktion folgendermaßen ändern:

public int max1020(int a, int b) {
    int max = 0;
    if(a <= 20  &&  a >= 10){
      max = a;
    } 
    if (b > max && (b <= 20 && b >= 10)){
      max = b;
    }
    return max;
}

0
Eduardo Pascual Aseff 8 Feb. 2020 im 06:21

Sie scheinen zuerst das max herauszufinden. Und dann -

 if((a<=20  &&  a>=10)||(b<=20 && b>=10)){
   return max;
 }

Der obige Code gibt max zurück, unabhängig davon, ob sich max tatsächlich im Bereich befindet oder nicht.

0
Swapnil 8 Feb. 2020 im 05:39

Hier ist meine Lösung:

public int max1020(int a, int b) {
  return ((a>=10 && a<=20) && (b>=10 && b<=20))?(b>a?b:a)
  :(a>=10 && a<=20)?a
  :(b>=10 && b<=20)?b
  :0;
}
1
pdrersin 8 Feb. 2020 im 05:50