我正在编写一个程序,使用nextInt();
在程序中接受两个整数,并将其包含在try catch
块中以阻止诸如双打或字符之类的错误输入。
当输入多个错误输入时,循环重复相同的次数。我假设这是因为我的scan.next()
必须循环足够的时间以捕获错误的输入错误。有没有办法在第一次运行时知道这个数字,以便多次循环运行下一个?
在输出中
if(cont == 'N') System.out.print("\nPlease re-enter\n\t:");
将输出并反映输入不匹配输入的次数。也就是说,如果我输入3 3.3它将重复一个额外的时间,如果输入s 3.3 2.5它将重复三次额外的时间。
我尝试在scan.next()
周围放置一个循环来默认它十次,但是太过分了,我必须在再次开始阅读之前输入额外的8个字符。可能是一个循环,但它的条件是什么,我试过while(scan.next() != null){}
,但这种情况从未停止过。
//input error checking
char cont = 'Y';
do{
if(cont == 'N')
System.out.print("\nPlease re-enter\n\t:");
cont = 'Y';
/* to stop the accidential typing of things other
* than integers from being accepted
*/
try{
n1 = scan.nextInt();
n2 = scan.nextInt();
}catch(Exception e){
cont = 'N'; //bad input repeat loop
scan.next();//stops infinite loop by requesting Scanner try again
}
} while(cont == 'N');//do loop while told N for continue
答案 0 :(得分:1)
不确定您希望代码执行什么操作。通过阅读您发布的内容,我假设您希望用户输入2个整数,如果他/她不是,则您希望提示他/她重新输入内容,直到他/她输入2个整数。 如果是这种情况,我只想添加
scan = new Scanner(br.readLine());
在此if语句之后:
if(cont == 'N')
{System.out.print("\nPlease re-enter\n\t:");}
这将解决您的循环问题
答案 1 :(得分:0)
首先尝试:
更改异常捕获中的行
scan.next();
到
while(scan.hasNext()){
scan.next();
}
答案 2 :(得分:0)
您可以尝试在catch块中执行以下操作:
while(scan.hasNext())
scan.next();
答案 3 :(得分:0)
使它成为一种方法,并使用该方法 ......这样:
// do it until getting two Integers
boolean isItInteger = false;
while (isItInteger == false) {
isItInteger = getInt();
}
.
.
.
// your method for getting two Integers
public static boolean getInt() {
try {
Scanner sc = new Scanner(System.in);
n1 = sc.nextInt();
n2 = sc.nextInt();
} catch (Exception e) {
System.out.println("Please re-enter");
return false;
}
return true;
}