2016-11-11 3 views
1

trat ich mit einem meiner Methoden ein Problem habe:Lesebenutzereingabe: Kein Wert eingegeben v ein Wert

public static int readIntoArray(Scanner input, int[] nums) { 
    int i = 0; 
    int count = 0; //Will hold the number of values in array 

    if (input.hasNextInt() == false) { 
     count = 0; 
    } 

    else{ 
     int num = input.nextInt(); 

     do { 
      nums[i] = num; 
      i++; 
      count++; 
      num = input.nextInt(); 
      if (input.hasNextInt() == false) { 
       nums[i] = num; 
       count++; 
      } 
      else { 

      } 
     } while(input.hasNextInt() && i < 100); 
    } 

    return count; 
} 

Dies ist eine Methode in meinem Programm. Mein Problem vorher war, dass ich einen Fehler erhalten würde, wenn der Benutzer Enter drückt, ohne irgendwelche Werte einzugeben. Ich habe das behoben, indem ich die if-else-Anweisung oben in meinem Code erstellt habe.

Aber da das der Anfangsteil der Methode ist, erhalte ich einen Fehler, wenn der Benutzer nur einen Wert eingibt. Ich bin mir nicht sicher, wie das zu beheben ist, denn wenn ich die erste if-Anweisung verschiebe, erhalte ich einen Fehler, wenn der Benutzer keine Werte eingibt. Ich bin verwirrt darüber, wie man das mit den zwei verschiedenen Szenarien zum Spielen bringt.

Grundsätzlich funktioniert die Methode wie oben beschrieben nicht, wenn der Benutzer einen Wert eingibt.

+0

* psst *, https://youtu.be/0Brn4YF_LY4 – Arvind

Antwort

0

Versuchen Sie dies stattdessen; es ist viel einfacher:

public static int readIntoArray(Scanner input, int[] nums) { 

    int count = 0; // Will hold the number of values in array 

    while(input.hasNextInt() && count < 100) { 
     nums[count] = input.NextInt(); 
     count++; 
    } 

    return count; 
} 

Angenommen, Sie haben nur einen Wert in der Eingabe. Ihr Code, weil direkt nach count erhöhen, setzen Sie num auf die nächste int (was nicht existiert):

num = input.nextInt(); // there isn't a next int! 

Außerdem glaube ich, die Logik ausgeschaltet ist in der if Schleife im do while. So tun, als ob Sie eine Eingabe 3 haben, und wir haben den Einzeleingabe-Fehler behoben. Kurz vor der zweiten if Aussage:

  • i 1. ist
  • count ist 1.
  • nums[0] ist 3.

    Als nächstes if (input.hasNextInt() == false) wird wahr ausgewertet, weil 3 unser einziger Eingang war. Dann:

  • i ist noch 1.

  • count ist jetzt 2.
  • nums[1] ist 3.

ich fast sicher bin, das ist nicht das, was Sie wollen passieren.

+1

Oh ich sehe was ich getan habe. Dies ist das erste Mal, dass ich die Methode input.hasNextInt() verwendet habe, so dass ich nicht ganz sicher war, wie ich sie implementieren soll. Und nun macht es Sinn, den Code zu vergleichen. Vielen Dank! – Jay58t