Java中do-while循环的异常处理
该算法应该在一个ArrayList中包含3个整数。如果输入不是整数,则应该有提示。当我执行代码时,执行Java中do-while循环的异常处理,java,loops,arraylist,exception-handling,do-while,Java,Loops,Arraylist,Exception Handling,Do While,该算法应该在一个ArrayList中包含3个整数。如果输入不是整数,则应该有提示。当我执行代码时,执行catch子句,但程序运行在无限循环中。有人能给我指引正确的方向吗?谢谢你的帮助-D package chapter_08; import java.util.Scanner; import java.util.List; import java.util.ArrayList; public class IntegerList { static List<Integer>
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));
}
}
包装第8章;
导入java.util.Scanner;
导入java.util.List;
导入java.util.ArrayList;
公共类整数列表{
静态列表编号=新的ArrayList();
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
int计数器=1;
int-inputNum;
做{
系统输出打印(“类型”+计数器+”整数:);
试一试{
inputNum=input.nextInt();
添加(inputNum);
计数器+=1;
}
捕获(异常exc){
System.out.println(“无效编号”);
}
}而(!(numbers.size()=3));
}
}
您应该使用中断在你的catch(){}
中,像这样:
try {
inputNum = input.nextInt();
numbers.add(inputNum);
counter += 1;
} catch (Exception e) {
System.out.println("invalid number ");
break;
}
因此,如果一个输入不正确,请中断循环。您应该使用中断在你的catch(){}
中,像这样:
try {
inputNum = input.nextInt();
numbers.add(inputNum);
counter += 1;
} catch (Exception e) {
System.out.println("invalid number ");
break;
}
因此,如果一个输入不正确,请中断循环。如果inputNum=input.nextInt()代码>无法装入整数,并且引发了输入不匹配异常
,未使用扫描仪的输入。
因此,在捕获之后,它会循环并再次转到这里:
inputNum = input.nextInt();
输入内容完全相同
因此,您应该执行input.nextLine()在catch语句中编写>以放弃当前输入并允许用户进行新输入。
此外,捕获输入不匹配异常
比捕获异常
更有意义,因为可能会发生与不匹配无关的其他异常,如果不是问题,则向用户显示“无效数字”
将没有用:
catch (InputMismatchException e){
System.out.println("invalid number ");
input.nextLine();
}
如果inputNum=input.nextInt()代码>无法装入整数,并且引发了输入不匹配异常
,未使用扫描仪的输入。
因此,在捕获之后,它会循环并再次转到这里:
inputNum = input.nextInt();
输入内容完全相同
因此,您应该执行input.nextLine()在catch语句中编写>以放弃当前输入并允许用户进行新输入。
此外,捕获输入不匹配异常
比捕获异常
更有意义,因为可能会发生与不匹配无关的其他异常,如果不是问题,则向用户显示“无效数字”
将没有用:
catch (InputMismatchException e){
System.out.println("invalid number ");
input.nextLine();
}
这是因为当使用nextInt()
读取下一个int并且失败时,扫描仪仍然包含键入的内容。然后,当重新进入do while循环时,input.nextInt()
尝试使用相同的内容再次解析它
您需要使用nextLine()
刷新扫描仪的内容:
注意事项:
- 您可以删除
计数器
变量,因为您没有使用它。否则,您可以将计数器+=1
替换为计数器+++
- 您可以将
while(!(numbers.size()=3))
替换为while(numbers.size()!=3)
,或者更好的方法是:while(numbers.size()<3)
- 捕获异常时,应该尽可能具体,除非有很好的理由这样做<在您的情况下,代码>异常
应替换为输入不匹配异常
这是因为当使用nextInt()读取下一个int并且失败时,扫描仪仍然包含键入的内容。然后,当重新进入do while循环时,input.nextInt()
尝试使用相同的内容再次解析它
您需要使用nextLine()
刷新扫描仪的内容:
注意事项:
- 您可以删除
计数器
变量,因为您没有使用它。否则,您可以将计数器+=1
替换为计数器+++
- 您可以将
while(!(numbers.size()=3))
替换为while(numbers.size()!=3)
,或者更好的方法是:while(numbers.size()<3)
- 捕获异常时,应该尽可能具体,除非有很好的理由这样做<在您的情况下,代码>异常
应替换为输入不匹配异常
尝试更改
inputNum = input.nextInt();
到
它工作得非常好。试着改变一下
inputNum = input.nextInt();
到
它工作得非常好。您需要将扫描仪移到下一行。在catch部分的错误消息下面添加这行代码
input.nextLine();
您需要将扫描仪移到下一行。在catch部分的错误消息下面添加这行代码
input.nextLine();