JAVA中Scanner类的nextInt方法在接受异常输入时如何提示重新输入
请问下面代码的问题在哪里,第一个nextInt()在获取到一个字符输入后捕获一个异常之后会不断地打印“请输入一个正整数ID值:”,而不再执行try中的ID=scanner...
请问下面代码的问题在哪里,第一个nextInt()在获取到一个字符输入后捕获一个异常之后会不断地打印“请输入一个正整数ID值:”,而不再执行try中的ID = scanner.nextInt();语句。
System.out.println("请输入第"+index+"名玩家ID:");
while (ID<0) {
try {
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
}
System.out.println("请输入第"+index+"名玩家姓名:");
while (name.length()==0){
try {
name = scanner.nextLine().trim();
} catch (Exception e){
System.out.println("请输入玩家姓名:");
}
}
输出如下:
请输入第1名玩家ID:
a
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值: 展开
System.out.println("请输入第"+index+"名玩家ID:");
while (ID<0) {
try {
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
}
System.out.println("请输入第"+index+"名玩家姓名:");
while (name.length()==0){
try {
name = scanner.nextLine().trim();
} catch (Exception e){
System.out.println("请输入玩家姓名:");
}
}
输出如下:
请输入第1名玩家ID:
a
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值: 展开
4个回答
展开全部
这个问题的原因在于之前建立的Scanner类对象的nextInt()接收的非整型值没有被释放,除了被try catch语句块捕获输入不匹配异常并进行循环外,因在第二次循环时,没有新建新的Scanner类对象,导致原Scanner类对象的nextInt()接收的非整型值被直接赋予给了ID变量,所以导致出现死循环,所以这个问题的主要原因不是出在循环体上,而是出现在新建Scanner类对象上,只要在
try {
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
中的 ID = scanner.nextInt();之前加一个新建Scanner类对象,就能把问题解决:
try {
Scanner scanner = new Scanner();
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
try {
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
中的 ID = scanner.nextInt();之前加一个新建Scanner类对象,就能把问题解决:
try {
Scanner scanner = new Scanner();
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
展开全部
不要用while啊
int index =1;
System.out.println("请输入第"+index+"名玩家ID:");
Scanner sc = new Scanner(System.in);
int Id = sc.nextInt();
while(Id <0){
System.out.println("不要开玩笑了,请输入一个正整数ID值:");
Scanner sc1 = new Scanner(System.in);
Id = sc1.nextInt();
}
//这是一个人的 如果你要输入多个人的 在外面套一层循环
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<几个人?;i++){
System.out.println("请输入第"+index+"名玩家ID:");
Scanner sc = new Scanner(System.in);
int Id = sc.nextInt();
while(Id <0){
System.out.println("不要开玩笑了,请输入一个正整数ID值:")
Scanner sc = new Scanner(System.in);
Id = sc.nextInt();
}
list.add(Id);
}
//输出全部Id
for(Integer id : list){
System.out.println("Id有:"+id);
}
追问
这个不行,你这个如果输入的不是整数,是字符就直接异常退出了
追答
int index =1;
System.out.println("请输入第"+index+"名玩家ID:");
Scanner sc ;
int Id=0;
while(true) {
try {
sc = new Scanner(System.in);
Id = sc.nextInt();
break;
} catch (Exception e) {
System.out.println("不要开玩笑了,请输入一个正整数ID值:");
}
System.out.println("输入的id 是:" + Id);
}
//修改后的 多人的你自己在捉摸下吧
没看了???现在正确
System.out.println("-----------------------多人");
int n =5;//n个人的
for (int i = 1; i <= n; i++) {
System.out.println("请输入第"+i+"名玩家ID:");
Scanner sc1 ;
int Id1=0;
while(true) {
try {
sc1 = new Scanner(System.in);
Id1 = sc1.nextInt();
break;
} catch (Exception e) {
System.out.println("不要开玩笑了,请输入一个正整数ID值:");
}
}
System.out.println("第" + i + "个人的Id是:" + Id1);
}
System.out.println("输入结束");
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
ID = scanner.nextInt();
}
这么写呢
更多追问追答
追问
不行,直接报异常了
请输入第1名玩家ID:
a
请输入一个正整数ID值:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
……
追答
那就只能不用try catch了,这是个死循环,可以用正则去判断输入的是不是合法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在catch里面重置一下sc = new Scanner(System.in),就不会死循环了,刚遇到同样的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询