2011-12-08 12 views
0

私は例外を処理するはずのJavaプログラムを持っていますが、最終結果は私が意図したものとはかなり異なります。ここに私のプログラムの全体的なアイデアがあります:それはゼロの入力を受け入れ、プログラムを終了すると思われます。入力ダイアログは、捕捉されるべきExceptionを引き起こし、メッセージ「bad number」を出力するはずです。Java試してキャッチ

私の脳は、キャッチブロックに1行のコードがないと言っています。

は、ここに私のコードです:文の場合は、ここで例外をキャッチされていません

import javax.swing.JOptionPane; 


public class exceptTest { 

    public static void main(String[] args){ 
     try { 
      String line = JOptionPane.showInputDialog(null, "enter number"); 
     if(line.equals ("0")); 
     System.exit(0); 
     }catch(Exception e){ 

      JOptionPane.showMessageDialog(null, "bad number"); 
     } 
    } 
} 

答えて

1

、あなたは、単に作っている、あなただけの/他の場合に使用することができます。

try{ 
    String line = JOptionPane.showInputDialog(null, "enter number"); 
    if(line.equals ("0")){ 
      System.exit(0); 
    }else{ 
     JOptionPane.showMessageDialog(null, "bad number"); 
    } 
}catch (Exception ex){ 
    ex.printStackTrace(); 
} 

キャッチはあなたが唯一の例外については、使用showInputDialog()がスローだろうが、あなたの番号は、あなたが何かをキャッチされていないチェックのために、それは単に0

+0

こんにちはBVSmallman、私はそうすることができ、それはずっと簡単です。しかし、私のプログラムの考え方は、tryとcatchの例外を利用して、それを行うことをより困難にすることです。返信いただきありがとうございます! –

+0

問題を引き起こすif文の後にセミコロンが残っています。 –

+0

あなたの目標が例外をキャッチすることであるなら、0でないときに手作業で投げる必要がありますが、何の数字を入力しても現在何を投げても何も投げたりキャッチしたりすることはありません。 – BVSmallman

0

ではありませんあなたは後にセミコロンを持っていますあなたのif文は、行を終了し、コンパイラはifの残りの部分を探しません。あなたのセミコロンを削除し、それは正常に動作します。

import javax.swing.JOptionPane; 

public class exceptTest 
{ 

    public static void main(String[] args){ 
     try 
     { 
      String line = JOptionPane.showInputDialog(null, "enter number"); 
      if(line.equals ("0")) //semi-colon removed here 
      { 
       System.exit(0); 
      } 
      throw new IllegalArgumentException("Input was not 0"); 
     } 
     catch(Exception e) 
     { 
      JOptionPane.showMessageDialog(null, "bad number"); 
     } 
    } 
} 
+0

セミコロンを取り除いても問題はありませんが、それだけでは問題は解決しません(@ BVSmallmanの答えを参照)。 – Mac

+0

この種の「働く」が、私はOPの目標に合うとは思わない。 –

+0

@Mac私は上記のことを見ていますが、elseブロックの場合でも、セミコロンのために決して届かないでしょう。 –

0

入力が0でない場合、コードは例外をスローしません。したがって、何も捕捉しないため、画面にエラーメッセージが表示されません。
を、その後(エラー・メッセージが表示され、あなたのifelseを使用できます - - 入力が0でない場合
または
は (そして、あなたがキャッチを入力します)例外をスロー:

あなたは二つのことを行うことができます

編集:もちろん、Hunter McMillenが気づいたように、if文の後にセミコロンを削除する必要があります。

+0

ああ、私は間違ったことを見て、追加する必要があった。私の仲間のプログラマーに感謝します! –

1

例外を発生させないため、例外処理コードは実行しません。コードは入力を実行し、入力が「0」に等しくなるようにテストし、それに基づいてダイアログを表示しないで実行します。

例外がスローされるのは、コードで処理される条件の外で何かが発生したか、明示的にスローするためです。

"条件外"などとは、0で割るようなものを意味します.Java(他の言語も)がそれを処理し、例外がスローされます。手続き処理の通常のステップは停止し、実行ハンドラが呼び出されます。

たとえば、入力を解析して数字にしようとしたが、入力が数字でない場合、例外が発生します。これは、あなたが望むとは異なる機能ですが、例外が何であるかをよりよく説明しています。何かのように

try 
{ 
int numberEntered = Integer.parse(line); 
JOptionPane.showMessageDialog(null, "Entered a number, parsed to " + numberEntered); 
} 
catch (NumberFormatException nfe) 
{ 
JOptionPane.showMessageDialog(null, "Did not enter a number, but <" + line + ">"); 
} 

のようなものは、通常は例外であることを示しています。

もしあなたがしたいのであれば、例外を定義し、BadNumberExceptionと呼んで、あなたが持っているコードにスローすることができます。if文のelse節に入れます。しかし、あなたのルーチンは例外を投げているだろうし、それを捕まえるために例外をスローするルーチンにとっては珍しいと思う。

希望に役立ちます。 rc

関連する問題