我正在创建一个小的算法,这是它的一部分。
如果用户输入非整数值,我想输出一条消息,然后让用户再次输入数字:
boolean wenttocatch;
do
{
try
{
wenttocatch = false;
number_of_rigons = sc.nextInt(); // sc is an object of scanner class
}
catch (Exception e)
{
wenttocatch=true;
System.out.println("xx");
}
} while (wenttocatch==true);
我的循环永无止境,我不知道为什么。
如何识别用户是否输入了一些非整数?如果用户输入非整数,如何要求用户再次输入?
更新当我打印异常时,出现“ InputMismatchException”,该怎么办?
您不必试一试。这段代码将为您解决问题:
public static void main(String[] args) {
boolean wenttocatch = false;
Scanner scan = new Scanner(System.in);
int number_of_rigons = 0;
do{
System.out.print("Enter a number : ");
if(scan.hasNextInt()){
number_of_rigons = scan.nextInt();
wenttocatch = true;
}else{
scan.nextLine();
System.out.println("Enter a valid Integer value");
}
}while(!wenttocatch);
}
Scanner
在读取项目之前不会前进。这在Scanner JavaDoc中提到。因此,您可以仅使用.next()
方法读取该值,或者在读取hasInt()
值之前检查int
是否为该值。
boolean wenttocatch;
int number_of_rigons = 0;
Scanner sc = new Scanner(System.in);
do {
try {
wenttocatch = false;
number_of_rigons = sc.nextInt(); // sc is an object of scanner class
} catch (InputMismatchException e) {
sc.next();
wenttocatch = true;
System.out.println("xx");
}
} while (wenttocatch == true);
[每次获得异常时,wenttocatch
都将设置为true
,程序将陷入无限循环。只要没有异常,就不会无限循环。
导致sc.nextInt()的逻辑错误是这个
1)将gotocatch设置为false
2)sc.nextInt()引发错误
3)将gotocatch设置为true
4)重复[因为gotocatch为真]
为了解决catch语句中的这个问题gotocatch = false
catch (Exception e) {
wenttocatch=false;
System.out.println("xx");
}
[如果您的工作超出此处显示的范围,请使用计数器[如果您的计数或布尔值,否则使用布尔值],但是除非您要做的更多,否则请执行上面的第一件事
boolean wenttocatch;
int count = 0;
do{
try {
wenttocatch=false;
number_of_rigons=sc.nextInt(); // sc is an object of scanner class
} catch (Exception e) {
count++;
wenttocatch=true;
System.out.println("xx");
}
}while(wenttocatch==true && count < 1);
答案评论:
我认为您希望在用户不再输入之前获取整数。根据您的输入,一种方法是[]
int number_of_rigons;
while((number_of_rigons = sc.nextInt()) != null){
//do something
}
....
try {
....
} catch (Exception e) {
sc.next();
wenttocatch=true;
System.out.println("xx");
}