2017-12-21 6 views
-1

私は、ユーザーに2つの整数を追加して返すように指示するプログラムを作成しています。それらのうちの少なくとも1つが整数でない場合、プログラムは2つの有効な入力を求めてから追加します。 はここ不正なメッセージを表示する試行錯誤

package org.ip.sesion08; 

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class EntradaEnterosConExcepcion { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Scanner entrada = new Scanner(System.in);  
     int number1 = 0; 
     int number2 = 0; 
     boolean error = false; 
     while(!error){ 
      try{ 
     // Introducir dos enteros 
       System.out.print("Introduzca dos valores enteros: "); 
       number1 = entrada.nextInt(); 
       number2 = entrada.nextInt(); 
       error = true;  

      } 
      catch (InputMismatchException ne){ 
       System.out.print("Incorrecto, introduzca dos valores enteros: "); 
       entrada.next(); 
       entrada.next(); 


      } 
     } 
      System.out.println("La suma es " + (number1 + number2)); 
      } 

     } 

私の問題は、私は(2のような)無効な入力何か、プログラムは私にキャッチからのメッセージとinmediatelyを後にしてみてくださいから1を示した後、ということである私のコードです。 私は何が間違っているのか分かりません。どうやってメッセージを試してみるのをやめてもいいですか? ありがとうございます。

+0

なぜキャッチ内で入力を再度取得しようとしていますか? –

+0

"試してみた"というメッセージはあなたのことを指していますか?出力を共有していただけますか? – darkpbj

+0

メッセージを変数として保存し、catchで更新することができます。 – user2478398

答えて

0

whileループの外側にメッセージを置くと期待される結果になると思います。入力から利用できる次のトークンがintとして解釈することができない場合は、次は、

package org.ip.sesion08; 

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class EntradaEnterosConExcepcion { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    Scanner entrada = new Scanner(System.in);  
    int number1 = 0; 
    int number2 = 0; 

    // Introducir dos enteros 
    System.out.print("Introduzca dos valores enteros: "); 
    boolean error = false; 
    while(!error){ 
     try{ 

      number1 = entrada.nextInt(); 
      number2 = entrada.nextInt(); 
      error = true;  

     } 
     catch (InputMismatchException ne){ 
      System.out.print("Incorrecto, introduzca dos valores enteros: "); 

     } 
    } 
     System.out.println("La suma es " + (number1 + number2)); 
     } 

    } 
0

を働くかもしれない、そしてScanner.nextInt()はあなたがキャッチInputMismatchExceptionをスローします。これを引き起こすトークンはスキャンされないままですので、キャッチブロックがの1つのトークンをスキャンして拒否することは合理的ですが、2つではありません。悪いトークンの直後にトークンを破棄しても、それを調べることはありません。

実行した後は、明らかに意図したとおりに実行が確実にループの先頭に戻ります。 tryブロックが再入力され、プロンプトが再度表示されます。再度プロンプトを表示しないようにするには、ループの直前に移動します。

ただし、プログラムでは2つの連続する数字を入力する必要があります。番号を入力してから番号を入力すると、ループバックすると最初の番号が忘れられます。一度に2つではなく、トークン単位で入力ループを実行することを検討することをお勧めします。たとえば、終了条件が入力された数字の数を測定する単一のループを使用できます。これは、別々の変数の代わりに配列やリストを使って数値を記録するのにうまくいくでしょう。

関連する問題