Try-catch提示错误消息

时间:2017-12-21 16:51:53

标签: java try-catch

我正在开发一个程序,要求用户引入两个要添加的整数并将其返回。如果它们中的至少一个不是整数,程序将继续询问两个有效输入,然后添加它们。 这是我的代码

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)之后,程序会向我显示来自catch的消息以及来自try之后的消息。 我不知道我做错了什么,我怎么能避免再次尝试显示消息呢? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

我认为如果将消息放在while循环之外,您将获得预期的结果。以下可能有用,

{{1}}

答案 1 :(得分:0)

如果输入中的下一个令牌无法解释为int,则Scanner.nextInt()会抛出InputMismatchException,您会抓住它。导致此问题的令牌仍然未扫描,因此您的catch块扫描并拒绝一个令牌是合理的,但不是两个。你也会立即丢弃令牌,甚至不检查它。

之后,执行肯定会循环回到循环的顶部,正如您显然想要的那样。它将重新进入try块,因此再次打印提示。如果您想避免再次打印提示,请将其移至循环之前。

但请注意,您的程序需要输入两个连续的数字。如果输入一个数字然后输入一个非数字,则在循环返回时会忘记初始数字。您可能需要考虑执行输入循环,例如您基于每个标记,而不是一次两个。例如,您可以使用单个循环,其退出条件测量已成功输入的数量。使用数组或List来记录数字,而不是单独的变量,这是很好的。