2016-10-05 6 views
2

Ich habe versucht, 10 Integer-Eingabe von Benutzern zu bekommen. Außerdem möchte ich die Ausnahme behandeln, wenn Benutzer den falschen Datentyp eingeben (nicht Integer). Allerdings habe ich dieses Problem bei der Verwendung der for-Schleife & versuchen/fangen zusammen. Zum Beispiel, wenn ich String an der 4. Nummer eingeben. Ich würde dies als Ergebnis erhalten:Versuche/Catch Probleme bei der Verwendung For-Schleife in Java

Type 1. integer: 15 
Type 2. integer: 152 
Type 3. integer: 992 
Type 4. integer: jj 
Invalid number 
Type 5. integer: Invalid number 
Type 6. integer: Invalid number 
Type 7. integer: Invalid number 
Type 8. integer: Invalid number 
Type 9. integer: Invalid number 
Type 10. integer: Invalid number 

Integers: [15, 152, 992] 

Ich weiß nicht, wie Sie die Schleife erneut eingeben, nachdem die Ausnahme abgefangen wird.

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner input = new Scanner(System.in); 
    Integer integer; 
    List<Integer> integerList = new ArrayList<Integer>(); 
    for (int i = 1; i < 11; i ++) { 
     System.out.print("Type " + i + ". integer: "); 
     try { 
     integer = input.nextInt(); 
     integerList.add(integer); 
     } 
     catch (InputMismatchException exc) { 
      System.out.println("Invalid number"); 
     } 

    } 
    System.out.println("Integers: " + integerList); 
} 
+0

Was genau ist das Problem mit dem Ausgang Sie auf dem Laufenden? Was ist die Frage? – EJP

+1

Zunächst müssen Sie ein MCVE erstellen: http://StackOverflow.com/Help/Mcve Dann müssen Sie den Scanner-Puffer zurücksetzen: http://StackOverflow.com/Questions/10604125/How-Can-IClear-the -scanner-buffer-in-java Zuletzt müssen Sie 'i' zurücksetzen, damit Sie die gleiche Eingabe wiederholen können. –

Antwort

0

Sie verlassen die for-Schleife bei Ausnahme nicht. anstelle einer for-Schleife würde ich eine while-Schleife empfehlen, z.B.

+1

Es löst immer noch nicht die Probleme für mich. Aus bestimmten Gründen wird die Ausnahmebedingung als Eingabe für die nächste ganze Zahl abgefangen. Mit der While-Schleife wurde hier eine Infinitiv-Schleife erstellt. Gibt es etwas falsches mit meinem Argument für die Ausnahmebehandlung? –

+0

@HieuCao Fügen Sie 'input.nextLine()' zu Ihrem catch-Block vor der Fehlermeldung hinzu (siehe http://stackoverflow.com/a/25277332/584862) – mre

+1

danke, es funktioniert jetzt, sogar mit for-Schleife :) –

-1

Oder verringern Sie den Zähler, wenn eine Ausnahme gezählt wird, damit der Zyklus nicht gezählt wird.

catch (InputMismatchException exc) { 
      System.out.println("Invalid number"); 
      i--;  
} 
-1

Sie haben die Scanner Eingabe löschen:

import java.util.Scanner; 
import java.util.List; 
import java.util.ArrayList; 
import java.util.InputMismatchException; 

class foo { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Scanner input = new Scanner(System.in); 
     Integer integer; 
     List<Integer> integerList = new ArrayList<Integer>(); 
     for (int i = 1; i < 11; i ++) { 
      System.out.print("Type " + i + ". integer: "); 
      try { 
       integer = input.nextInt(); 
       integerList.add(integer); 
      } 
      catch (InputMismatchException exc) { 
       System.out.println("Invalid number"); 
       input.nextLine(); 
       --i; 
      } 
     } 
     System.out.println("Integers: " + integerList); 
    } 
} 
Verwandte Themen