算法应该将3个整数带入ArrayList。如果输入不是整数,那么应该有一个提示。当我执行我的代码时,执行catch
子句,但程序运行到无限循环。有人可以引导我走向正确的方向,我很感激帮助。 :-D
package chapter_08;
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class IntegerList {
static List<Integer> numbers = new ArrayList<Integer>();
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int counter = 1;
int inputNum;
do {
System.out.print("Type " + counter + " integer: " );
try {
inputNum = input.nextInt();
numbers.add(inputNum);
counter += 1;
}
catch (Exception exc) {
System.out.println("invalid number");
}
} while (!(numbers.size() == 3));
}
}
答案 0 :(得分:3)
这是因为当使用nextInt()
读取下一个int并且它失败时,Scanner
仍然包含键入的内容。然后,当重新进入do-while循环时,input.nextInt()
会尝试使用相同的内容再次解析它。
您需要使用Scanner
nextLine()
内容
catch (Exception exc) {
input.nextLine();
System.out.println("invalid number");
}
备注:强>
counter
变量,因为您没有使用它。否则,您可以将counter += 1
替换为counter++
。while (!(numbers.size() == 3))
替换为while (numbers.size() != 3)
,甚至更好:while (numbers.size() < 3)
。Exception
应替换为InputMismatchException
。答案 1 :(得分:1)
如果inputNum = input.nextInt();
无法适合int并且引发InputMismatchException
,则不会消耗Scanner
的输入。
所以在捕获之后,它会循环并再次出现在这里:
inputNum = input.nextInt();
在输入中具有完全相同的内容。
因此,您应该在catch语句中执行input.nextLine();
以丢弃当前输入并允许来自用户的新输入。
此外,捕捉InputMismatchException
而不是Exception
更有意义,因为其他异常可能与不匹配无关,如果不是,则向用户"invalid number "
显示没有用处问题:
catch (InputMismatchException e){
System.out.println("invalid number ");
input.nextLine();
}
答案 2 :(得分:0)
您应该在break;
中使用catch(){}
,如此:
try {
inputNum = input.nextInt();
numbers.add(inputNum);
counter += 1;
} catch (Exception e) {
System.out.println("invalid number ");
break;
}
因此,如果一个输入不正确,请断开循环。
答案 3 :(得分:0)
尝试更改
inputNum = input.nextInt();
到
String inputText=input.next();
inputNum = Integer.valueOf(inputText);
效果非常好。
答案 4 :(得分:0)
您需要将扫描仪移动到下一行。在catch部分的错误消息下面添加这行代码。
input.nextLine();