2016-08-05 5 views
-3

exceptionの後にフローが続行する理由は?私がボタンをクリックすると、トーストは私にメッセージを表示しますが、流れの後に続きます....例外キャッチ後にフローが続行する

私はあなたに私のコードを示します!別のクラスでは

 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; 
     } 

私はMETHODを思い出す:

ThreeFragment tf = new ThreeFragment(); 

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

ループを壊さないためです。 catchに 'break;'を追加します。ループの周りに 'try/catch'を置いてください。 –

+0

私は休憩を使いました。キャッチフレーズしてもトーストしても動作しません。 – user6612196

+1

なぜ私はビールの量が最初の文字列になるのか混乱しています(あなたがそれを素晴らしい夜のために十分に保存しない限り) )。 'Birra.getQuantità()'の型を 'int'に変更するだけではどうですか? –

答えて

0

あなたは例外をキャッチしましたので、Javaは、あなたが十分にそれに対処しようとしていることを前提としています。

メッセージが印刷された後に、例外が(throw exc;)いつも却下される可能性があります。つまり、コールスタックの上位のものがループを早く終了させるには、break;ステートメントを使用します。

+0

私はブレークを使用しました。トーストの後でキャッチするが、動作しません – user6612196

+2

ああそうです! * exact *コードを見る必要があります。そうでなければ、どこに問題があるのか​​わかりません。 – Bathsheba

0

以下のような例外的な用途でループを中断したい場合。

あなたは休憩を追加する必要があります。キャッチで

休憩; while、do-whileのようなループステートメントから抜け出すために必要なものです。

まだこの方法が何度も繰り返されていないことを確認してください。

他の方法で同じforループ条件を使用していることをJavaクラスでチェックします。

フラグメントクラスを呼び出すべきではありません。メソッドを呼び出すのは間違った方法です。

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

これは、静的メソッドは、(v)は、このshowResultをチェック

ThreeFragment.showResult2(v); 

この方法であなたのメソッドを呼び出します。ループの場合と同じです

+0

私の質問が表示されたら、私は休憩を追加しました。しかし動作しません... – user6612196

+0

あなたは完全にあなたのクラスファイルをチェックする必要があります。 break文もcatchブロックで動作するためです。このメソッドを何回呼び出しているかを確認してください。このメソッドを頻繁に呼び出さない場合は、このメソッドのためこの問題に直面していません@ user6612196 – MathaN

+0

クリックすると別のクラスのこのメソッドが呼び出されます – user6612196

0

以下のコードは、提示したものと似ています。他人が指摘しているように、最も近いループを終了する。

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"); 

ブレークを使用することは、プログラミングの面で悪いことです。あなたはコードの流れをこのようなものに変更することができます。

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"); 

回答があれば、あなたの質問に答えを記入してください。

0

例外であなたの代わりに、内部のループの周りtry/catchブロックなので、ループ終了を入れて:

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(); 
} 

また、あなたがa)は、例外を再スローすることができますcatchブロック内、b)に抜け出しますc)メソッドからの戻り。

関連する問題