求助Scanner的输入问题

yudun1989 2011-03-03 06:21:09
代码如下,我的目的是输入一个int,考虑到用户可能会输入错误,所以我在外面加了try catch,结果如果输入非int就发生了死循环一直输出错误,我想知道:
1.为什么会出现这个问题
2.如何解决类似的输入可能错误的问题?实际工作中也会try catch么

package day03;

import java.util.Scanner;

public class ErrorDemo {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while(true){
try {
int a = sc.nextInt();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
// sc.nextLine();

}
}
}



}

...全文
103 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yudun1989 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 followme_1987 的回复:]

一旦产生异常,sc就不会继续监听下去,只会停在出错的地方,也就是说int i = sc.nextInt();这个地方,所以每次循环都会产生异常,sc不往下走,用户就即便输入正确数字也没有用,而只会停留在上次输入错误的地方不断验证,下面给上我的代码,做的不好,但基本上也能符合楼主的要求吧。
Java code
import java.util.Scanner;

public class Er……
[/Quote]
谢谢10楼
cheng87716 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 followme_1987 的回复:]
一旦产生异常,sc就不会继续监听下去,只会停在出错的地方,也就是说int i = sc.nextInt();这个地方,所以每次循环都会产生异常,sc不往下走,用户就即便输入正确数字也没有用,而只会停留在上次输入错误的地方不断验证,下面给上我的代码,做的不好,但基本上也能符合楼主的要求吧。

Java code
import java.util.Scanner;

public class……
[/Quote]实用
Ganymede 2011-03-03
  • 打赏
  • 举报
回复
一旦产生异常,sc就不会继续监听下去,只会停在出错的地方,也就是说int i = sc.nextInt();这个地方,所以每次循环都会产生异常,sc不往下走,用户就即便输入正确数字也没有用,而只会停留在上次输入错误的地方不断验证,下面给上我的代码,做的不好,但基本上也能符合楼主的要求吧。
import java.util.Scanner;

public class ErrorDemo
{
public static void main(String[] args)
{
m();
}

public static void m()
{
System.out.println("请输入:");
Scanner sc = new Scanner(System.in);
while (sc.hasNext())
{
try
{
int a = sc.nextInt();
System.out.println(a);
}
catch (Exception e)
{

System.out.println("输入不合法");
m();
}
}
}
}
yudun1989 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhouyunan2010 的回复:]

int i = sc.nextInt();
被不断的验证,所以不断的报错
[/Quote]
兄弟,能告诉我,我第一次try catch了,按说第二次就可以正常输入int 值了。它为什么就不断验证了呢?谢谢。
yudun1989 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 beijing_l 的回复:]

while(true){}出现死循环
[/Quote]
兄弟你看清我的问题。为什么会一直输出错误?我try catch 掉,理当第二次的时候还会让我重新输入的。但是它会一直报错下去。
=PNZ=BeijingL 2011-03-03
  • 打赏
  • 举报
回复
while(true){}出现死循环
zhouYunan2010 2011-03-03
  • 打赏
  • 举报
回复
int i = sc.nextInt();
被不断的验证,所以不断的报错
yudun1989 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouyunan2010 的回复:]

Java code

import java.util.*;

public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
try{
……
[/Quote]
你能告诉我的程序错在哪里了么。为什么会一直输出错误?按说我try catch 一次下次输入正确就可以了把?
yudun1989 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ilrxx 的回复:]

加个不正常退出,不过一般情况都是正则是匹配看是否符合输入要求,符合才往下执行。
[/Quote]
我不想让它退出呢?其实我本来就是一个死循环不断输入,然后做计算的。你能告诉我以下为什么会出现这种问题吗?
zhouYunan2010 2011-03-03
  • 打赏
  • 举报
回复

import java.util.*;

public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
try{
int i = sc.nextInt();
System.out.println(i);
}catch(InputMismatchException e){
System.out.println("请输入一个数字");
sc.next();
}
}
}
}
ilrxx 2011-03-03
  • 打赏
  • 举报
回复
加个不正常退出,不过一般情况都是正则是匹配看是否符合输入要求,符合才往下执行。
ilrxx 2011-03-03
  • 打赏
  • 举报
回复
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
try {
int a = sc.nextInt();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
// sc.nextLine();
System.exit(1);
}
}
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧