2016-08-05 26 views
-3

warum fließen weiter nach exception fangen? wenn ich auf taste, toast zeige mir message aber nach dem fluss weiter ....Fluss weiter nach Ausnahme fangen

Ich zeige Ihnen meinen Code!

 public static int showResult2(View v) { 
      int totalAmount = 0; 


      for (Birra b : biAdapter.getBox()) { 
       if (b.selected) { 
        try { 
         int quantitaInt = Integer.parseInt(b.getQuantità()); 
         totalAmount += b.distance * quantitaInt; 

        }catch(NumberFormatException exc){ 
         System.out.println(exc); 
         Toast.makeText(context, "inserisci una quantita' a \""+b.name, Toast.LENGTH_LONG).show(); 
break; 

        } 
       } 
      } 
      return totalAmount; 
     } 

in einer anderen Klasse RECALL ich die Methode:

ThreeFragment tf = new ThreeFragment(); 

        string4 = tf.showResult(v); 
        try { 
        totalebibite = tf.showResult2(v); 
       } catch (NumberFormatException exc) { 
        exc.printStackTrace(); 
       } 
+2

Weil Sie nicht die Schleife brechen. Füge 'break;' in den Fang ein; oder setzen Sie den "Versuch/Fang" um die Schleife. –

+0

ich habe Pause gebraucht; in den Fang nach Toast aber funktioniert nicht – user6612196

+1

Ich bin ein wenig verwirrt, warum eine Menge Bier wäre eine Schnur an erster Stelle (es sei denn, Sie speichern es als '' genug für eine tolle Nacht heraus '', natürlich). Warum ändere nicht einfach den Typ von 'Birra.getQuantità()' in 'int'? –

Antwort

0

Sie haben die Ausnahme gefangen, so Java geht davon aus, dass Sie mit ihm angemessen befassen werden.

Wenn Sie dieses Verhalten nicht möchten, abgesehen von nicht catch es überhaupt, können Sie die Ausnahme (throw exc;) immer erneut auslösen, nachdem Sie Ihre Nachricht gedruckt haben, was bedeutet, dass etwas höher auf dem Call-Stack sollte beschäftigen Sie sich damit, oder verwenden Sie eine break; Anweisung, um die Schleife früh zu beenden.

+0

Ich habe Pause; in den Fang nach Toast aber funktioniert nicht – user6612196

+2

Oh ja, es wird! Wir müssen den * genauen * Code sehen, sonst wissen wir nicht, wo das Problem liegt. – Bathsheba

0

Wenn Sie Ihre Schleife im Ausnahmefall brechen wollen, wie unten.

Sie sollten Ihre Pause hinzufügen; im Fang

Pause; ist, was Sie brauchen, um aus irgendwelchen Looping-Anweisungen wie for, while oder do-while auszubrechen.

Immer noch, wenn es kommt bedeutet, stellen Sie sicher, dass Sie diese Methode nicht immer wieder aufrufen.

Überprüfen Sie auch in Ihrer Java-Klasse, dass Sie eine andere Methode verwenden, die dieselbe Bedingung für die Schleife verwendet.

Sie sollten Ihre Fragmentklassen nicht aufrufen. Es ist falsch, eine Methode aufzurufen.

ThreeFragment tf = new ThreeFragment(); 
         string4 = tf.showResult(v);    
         totalebibite = tf.showResult2(v); 

Es ist eine statische Methode aufrufen, Ihre Methode auf diese Weise

ThreeFragment.showResult2(v); 

prüfen diese showResult (v); hat das gleiche für Schleife

+0

Wenn Sie meine Frage sehen, habe ich Pause hinzugefügt; aber funktioniert nicht ... – user6612196

+0

dann solltest du deine klasse-datei komplett überprüfen. Weil break-Anweisung auch im catch-Block funktioniert. Stellen Sie sicher, wie oft Sie diese Methode aufrufen. Wenn Sie diese Methode nicht häufig aufrufen, werden Sie wegen dieser Methode nicht mit diesem Problem konfrontiert. @ User6612196 – MathaN

+0

Ich rufe diese Methode in einer anderen Klasse auf Klick-Taste – user6612196

0

Das folgende Stück Code ist ähnlich, was Sie vorgestellt haben. Wie von anderen hingewiesen, brechen; beendet die nächste Schleife.

for(int i=0; i<10; i++) { 
     if(true) {  
      try{ 
       //Your logic here, which could throw exception 
       System.out.println("throwing"); 
       if(true) { 
        throw new Exception("This is it"); 
       } 
      }catch(Exception e){ 
       System.out.println("catching"); 
       break; 
      } 

      System.out.println("inside if"); 
     } 
     System.out.println("inside for"); 
    } 
    System.out.println("outside for"); 

Die Verwendung von Pause ist eine schlechte Programmierpraxis. Sie könnten den Codefluss so ändern.

try{ 
     System.out.println("inside try"); 
     for(int i=0; i<10; i++) { 
      if(true) { 
       if(true) { 
        throw new Exception("This is it"); 
       } 
       System.out.println("inside if"); 
      } 
      System.out.println("inside for"); 
     } 
    } 
    catch(Exception e){ 
     System.out.println("catching"); 
    } 
    System.out.println("after catch"); 

Bitte markieren Sie Ihre Frage als beantwortet, wenn Sie sehen, es beantwortet wird.

0

Setzen Sie Ihre try/catch-Block um die Schleife anstelle von innen, also die Schleife beendet auf eine Ausnahme:

try { 
    for (Birra b : biAdapter.getBox()) { 
     if (b.selected) { 
      int quantitaInt = Integer.parseInt(b.getQuantità()); 
      totalAmount += b.distance * quantitaInt; 
     } 
    } 
} catch (NumberFormatException exc) { 
    System.out.println(exc); 
    Toast.makeText(context, "inserisci una quantita' a \""+b.name, Toast.LENGTH_LONG).show(); 
} 

Alternativ innerhalb des Blocks fangen Sie können die Ausnahme a) erneut auslösen, b) auszubrechen der Schleife oder c) Rückkehr von der Methode.