2016-07-22 2 views
0

私はswitch文を使用したメソッドを持っていますが、重要ではないので、残りのケースは除外しました。私の主な方法では、オペレータメソッドが呼び出され、 "Q"を選択するまでwhileループでパラメータ "selection"を渡します。プログラムを終了させないIllegalArgumentExceptionをスローするにはどうすればよいですか?

ユーザが負の数を入力すると、例外がスローされ、メッセージが出力され、入力が無視されますが、最初にループバックされます。この例外がスローされると、プログラムは終了します。どんな助けも非常に高く評価されるでしょう。ありがとう!

public static void operator(String selection) throws IllegalArgumentException{ 
    Scanner input = new Scanner(System.in); 
    double price; 
switch(selection){ 
case "A": 
    System.out.println("Enter the price"); 
     if(input.nextDouble()<0){ 
      throw new IllegalArgumentException("Price cannot be a negative value"); 
     } 
     else{ 
      price = input.nextDouble(); 
     } 
break; 

case"Q": 
    System.exit(0); 
} 
} 
+0

呼び出しクラスで例外を処理する必要があります。 –

答えて

1

アンIllegalArgumentExceptionが、それはあなたのプログラムを停止しないためにあなただけのシンプルな試み{}キャッチ{}を使用することができますが、私は、ランタイム例外であることをやってお勧めしません、はRuntimeExceptionを継承しています。その場合、java.lang.Exceptionを継承する独自の例外を作成します。

ここでtry catchを使用できます。

public static void operator(String selection) { 
Scanner input = new Scanner(System.in); 
double price; 
switch(selection){ 

case "A": 
System.out.println("Enter the price"); 
    try { 
     if(input.nextDouble()<0) { 
      throw new NegativePriceException(); 
     } 
    } catch (NegativePriceException e) { 
     System.out.println("The price can't be negative."); 
     e.printStackTrace(); 
    } 

    price = input.nextDouble(); 
    break; 

case"Q": 
    System.exit(0); 
} 
} 

をそして、あなたがしたい場合は、基本的にExceptionから継承(あなたはそれを試してキャッチを使用する場合)またはのRuntimeException(から継承する必要があり、独自の例外クラスを作成する:このような

何かが動作するはずですプログラムの実行を停止する):

public class NegativePriceException extends Exception { 

    public NegativePriceException() { 
    super(); 
    } 
} 
+0

この度はとても早く戻ってくれてありがとうございます。これはうまくいきますが、入力が無効な場合は例外をスローする必要があります。私はカスタム例外を作成することが私の最善の策だと思います。あなたはそれを作ることについて正しい方向に私を操縦できますか? –

+0

自分の例外を作成する方法と、whileの代わりにtry catchを使う編集されたコードを追加しました。 – Julian

+0

あなたは大きな助けになりました!ありがとうございました –

1

Javaでは、すべての例外を処理または宣言する必要があります。 try/catchブロックを使用して例外を処理していない場合は、メソッドのシグネチャで宣言する必要があります。あなたの主な方法で

あなたは例外

public static void main(String args[]) { 
//codes 
try{ 
operator("A"); 
} 
catch(IllegalArgumentException e){ 
e.printStackTrace(); 
} 
} 
+0

ありがとうございました!これはうまく動作します –

+0

あなたは歓迎です:) –

0

を処理する必要がありますあなたは、例外を処理する方法に、すでにいくつかの良い答えを得ています。

あなたのケースについては、例外はまったく適切ではないと私は考えています。例外を取り除き、エラーメッセージを出力して新しい入力を要求するだけで、問題の入力を処理する必要があります。

例外は例外的な状況のため、コードの通常の実行に含めないでください。

関連する問題