Try-catch提示错误消息

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

java try-catch
2个回答
0
投票

如果将消息放在while循环之外,我想你会得到预期的结果。以下可能有效,

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
投票

如果输入中可用的下一个标记不能被解释为int,那么Scanner.nextInt()会抛出一个InputMismatchException,你会抓住它。导致此问题的令牌仍然未扫描,因此您的catch块扫描并拒绝一个令牌是合理的,但不是两个。你也会在坏账之后立即丢弃令牌,甚至不检查它。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.