2016-07-07 26 views
0

Ich möchte, dass der Vorgang von vorne beginnt, wenn der Versuch fehlschlägt. Ich habe viele Antworten auf vage ähnliche Situationen gefunden, aber nicht auf die for-Schleife und meine Struktur. Dies ist nicht erforderlich und wird meiner Aufgabe nicht nutzen, aber ich möchte es einfach tun. Das Programm funktioniert wie es erforderlich ist und darüber hinaus (ja das ist sehr Anfänger Sachen). Ich habe probiert und versucht mit do ... while und for loops, und ich bekomme entweder endlose Loops, kann kein Symbol finden usw. Ich weiß, wenn ich es versuche, werde ich es bekommen, und ich habe auch eine Ahnung von einigen von meinen Fehlern, aber ich möchte wirklich jemanden erfahren, um das zu betrachten und einen Vorschlag zu machen.Java für Anfänger: Zurück zum Start nach fehlgeschlagenem Versuch (try enthält for-Schleife)

try{        

    System.out.print("Please enter an integer: "); 
    int original = sc.nextInt(); 

    int entry = Math.abs(original); 

    String str = new Integer(entry).toString(); 

    int len = str.length();   

    System.out.println(); 
    System.out.println("The entry is " + len + " digits long."); 
    System.out.println(); 
    System.out.print("The digits entered are: "); 

    int runningTotal; 
    int ttl = 0;  

for (int i=1; i<=len; i++){ 
    System.out.print(str.charAt(i-1) + " "); 
    char num1 = str.charAt(i-1);    
    String num2 = Character.toString(num1); 
    runningTotal = Integer.parseInt(num2); 
    ttl = ttl + runningTotal; 
} 
System.out.println("\n"); 
System.out.println("The sum of the digits entered is: " + ttl + "\n"); 
} 
catch (InputMismatchException imeRef){ 
System.out.println("Data type error: " + imeRef.toString() +"\n" 
        + "No letters or special characters allowed."); 
} 
+0

können Sie 'while' Schleife verwenden. ... bis zum Erfolg, dann brechen Sie – CSK

+0

Warum möchten Sie es noch einmal versuchen? Was würden Sie erwartet haben, damit es keine Ausnahme gibt? – ifly6

+0

Man würde erwarten, dass nach Eingabe von "Keine Buchstaben oder Sonderzeichen erlaubt" der Benutzer eine gültige Eingabe (int) eingeben würde. Wenn nur die notwendigen Anweisungen in den try-Block geschrieben werden, würde dies die Situation auf jeden Fall verbessern. – Doug

Antwort

2

Haben Sie wirklich die ganze Sache in einem try..catch Block setzen müssen? Wickeln Sie nur das Bit, das fehleranfällig ist.

In jedem Fall ist dieser Code in einer Funktion - das ist, wenn Sie wirklich auf Fehler von vorne beginnen wollen, versuchen Sie:

void foo() { 
    try { 
     doSomeDangerousThing(); 
    catch(Exception e) { 
     foo() 
    } 
} 

Natürlich, das ist ein gefährliches Spiel zu spielen - wenn es sich um eine erhöhte Fehler beim letzten Anruf, warum wird es bei diesem Anruf nicht, wenn sich nichts geändert hat? Sie erstellen möglicherweise eine tödliche Endlosschleife. Wenn sich die Parameter nicht ändern, wird der Fehler höchstwahrscheinlich erneut auftreten.

Wenn Sie nur Code immer und immer wieder ausführen möchten, verwenden Sie eine while Schleife.

0

mit while-Schleife

versuchen diese

while(true){ 
     try{        
      Scanner sc = new Scanner(System.in); 
      System.out.print("Please enter an integer: "); 
      int original = sc.nextInt(); 
      int entry = Math.abs(original); 

      String str = new Integer(entry).toString(); 

      int len = str.length();   

      System.out.println(); 
      System.out.println("The entry is " + len + " digits long."); 
      System.out.println(); 
      System.out.print("The digits entered are: "); 

      int runningTotal; 
      int ttl = 0;  

      for (int i=1; i<=len; i++){ 
        System.out.print(str.charAt(i-1) + " "); 
        char num1 = str.charAt(i-1);    
        String num2 = Character.toString(num1); 
        runningTotal = Integer.parseInt(num2); 
        ttl = ttl + runningTotal; 
      } 
      System.out.println("\n"); 
      System.out.println("The sum of the digits entered is: " + ttl + "\n"); 
      break; 
     } 
     catch (InputMismatchException imeRef){ 
      System.out.println("Data type error: " + imeRef.toString() +"\n" 
          + "No letters or special characters allowed."); 
     } 
    } 
+0

Danke, dass man bei ungültigem Datentyp eine Endlosschleife verursacht. – gravityclown

+0

, weil Sie nur 'InputMismatchException' behandeln – CSK

0

Versuchen Sie, eine Methode zu machen:

public int askForInt() { 
    int input; 
    try { 
     input = sc.nextInt(); 
    } 
    catch(InputMismatchException imeRef) { 
     System.out.println(" Try again, etc..."); 
     askForInt(); 
    } 
    return input; 
} 

und dann, nachdem Sie den Benutzer für die ganze Zahl stellen das erste Mal, rufen Sie einfach die Methode:

System.out.print("Please enter an integer: "); 
int original = askForInt(); 
// proceed