2017-04-20 4 views
-3

Ich mache ein Programm für meine Aufgabe. Dies ist nicht das ganze Programm, aber es ist nur ein Teil davon.Ending-Schleife in Java

Ich möchte vom Benutzer einige Integer-Werte eingeben, um in Arrays "Elemente" gespeichert werden. Wenn der Benutzer "Stop" eingibt, sollte die Schleife schließen und hier ist das Problem .. wenn ich schreibe, stoppe das Programm und gibt mir einige Fehler.

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int i=0, lines=1; 
    int[] items = new int[100]; 
    int total = 0; 
    System.out.println("Enter the items with its price"); 

    while(true){ 
      i=i+1; 
      if ("stop".equals(scan.nextLine())) 
       break; 
      else 
       items[i] = scan.nextInt(); 
    } 

} 
+3

Was sind die Fehler? Das ist ziemlich wichtig – Carcigenicate

+0

"einige Fehler" - Es lohnt sich, diese Fehler in Ihre Frage aufzunehmen. – px06

+0

Dort gehen Sie: Exception in thread "main" java.util.InputMismatchException \t bei java.util.Scanner.throwFor (Scanner.java:864) \t bei java.util.Scanner.next (Scanner.java:1485) \t bei java.util.Scanner.nextInt (Scanner.java:2117) \t bei java.util.Scanner.nextInt (Scanner.java:2076) \t bei mohammedkabbani_301502670.MohammedKabbani_301502670.main (MohammedKabbani_301502670.java:34) C: \ Benutzer \ Mohammed \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor-snippets \ run.xml: 53: Java zurückgegeben: 1 BUILD FAILED (Gesamtzeit: 8 Sekunden) – Mick2160

Antwort

1

es gibt bestimmte Fehler in Ihrem Kabeljau e. Es ist besser, wenn Sie einfach den Fehler hinzufügen.

Versuchen Sie diesen Code.

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int i = 0, lines = 1; 
    int[] items = new int[100]; 
    int total = 0; 
    System.out.println("Enter the items with its price"); 

    while(true){ 
      String InputTxt = scan.nextLine(); 
      if (InputTxt.equals("stop")) 
       break; 
      else{   
       try{ 
       items[i] = Integer.parseInt(InputTxt); 
       i++; 
       }catch(Exception e){ 
       System.out.println("Please enter a number"); 
       } 
      } 

    } 

} 
-1

Ihr Problem ist diese Zeile: items[i] = scan.nextInt(); weil Sie versuchen, integer zu erhalten, während die Eingabezeichenfolge ist stop

EDIT eine mögliche Lösung besteht darin, dass Sie Ihre Daten als String zu erhalten und prüfen, ob es ist stop oder nicht, und wenn nicht, dann versuchen sie es wie Code unten nach integer zu analysieren:

public static void main(String[] args) { 

Scanner scan = new Scanner(System.in); 
int i=0, lines=1; 
int[] items = new int[100]; 
int total = 0; 
System.out.println("Enter the items with its price"); 
while(true) 
    { 
    i=i+1; 
    String str = scan.nextLine() 
    if ("stop".equals(str)) 
     break; 
    else 
     { 
     items[i] = Integer.parseInt(str) 
     } 
    } 
} 
+0

Ok, so was soll ich jetzt tun? Ich möchte vom Benutzer Ganzzahlen eingeben, und wenn er fertig ist, die Ganzzahlen zu schreiben, sollte er schreiben, um das Programm zu beenden. – Mick2160

+0

Ich glaube nicht, dass dies das Problem ist, da 'scan.nextLine()' zu diesem Zeitpunkt alles lesen wird. Dies ist keine 'NumberFormatException', bei der Probleme mit der Konvertierung auftreten. – px06

+0

@ px06 Sie haben Recht mit 'scan.nextLine()', aber bedenken Sie, dass es im Code eine andere Zeile gibt, die 'items [i] = scan.nextInt();' ist, also versucht, eine Eingabe als Ganzzahl zu erhalten. – pooyan

0

auf andere Antworten, würde Ich mag Ihnen raten die Schleife von

while(true) 

zu

//first you need to remove the local variable i 
for(int i = 0; i < items.length; ++i) 

Mit diesem Ansatz Sie IndexOutOfBoundsException zu vermeiden, wird dazu beitragen, ändern wenn Benutzer mehr als 100 ganzzahlige Werte eingeben.