我正在开发一个程序,要求用户引入两个要添加的整数并返回它。如果它们中的至少一个不是整数,程序将继续询问两个有效输入,然后添加它们。这是我的代码
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之后的消息。我不知道我做错了什么,我怎么能避免再次尝试显示消息呢?提前致谢。
如果将消息放在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));
}
}
如果输入中可用的下一个标记不能被解释为int
,那么Scanner.nextInt()
会抛出一个InputMismatchException
,你会抓住它。导致此问题的令牌仍然未扫描,因此您的catch块扫描并拒绝一个令牌是合理的,但不是两个。你也会在坏账之后立即丢弃令牌,甚至不检查它。
之后,执行肯定会循环回到循环的顶部,正如您显然想要的那样。它将重新进入try
块,因此再次打印提示。如果要避免再次打印提示,请将其移至循环之前。
但请注意,您的程序需要输入两个连续的数字。如果输入一个数字然后输入一个非数字,则在循环返回时会忘记初始数字。您可能需要考虑执行输入循环,例如您基于每个标记,而不是一次两个。例如,您可以使用单个循环,其退出条件测量已成功输入的数量。使用数组或List来记录数字,而不是单独的变量,这将很好。