java nextInt() 尝试多次捕获重复输出
Posted
技术标签:
【中文标题】java nextInt() 尝试多次捕获重复输出【英文标题】:java nextInt() try catch repeating output more than once 【发布时间】:2012-08-23 09:02:36 【问题描述】:我正在编写一个程序,它使用 nextInt();
在程序中接受两个整数,并将其包装在 try catch
块中以阻止错误输入,例如双精度或字符。
当输入多个错误输入时,循环会重复相同的次数。我认为这是因为我的scan.next()
必须循环足够多的时间才能捕获没有错误的错误输入。有没有办法在第一次运行时知道这个数字,以便循环运行多次?
在输出中
if(cont == 'N') System.out.print("\nPlease re-enter\n\t:");
将输出并镜像写入不匹配输入的次数。也就是说,如果我输入 3 3.3 它将重复一次,如果输入 s 3.3 2.5 它将重复三次。
我尝试在scan.next()
周围放置一个循环以将其默认为十次,但太过分了,我不得不输入额外的 8 个字符才能再次开始读取。也许是一个while循环,但它的条件是什么,我试过while(scan.next() != null)
,但那个条件从未停止过。
//input error checking
char cont = 'Y';
do
if(cont == 'N')
System.out.print("\nPlease re-enter\n\t:");
cont = 'Y';
/* to stop the accidential typing of things other
* than integers from being accepted
*/
try
n1 = scan.nextInt();
n2 = scan.nextInt();
catch(Exception e)
cont = 'N'; //bad input repeat loop
scan.next();//stops infinite loop by requesting Scanner try again
while(cont == 'N');//do loop while told N for continue
【问题讨论】:
你能举一个你输入错误的例子吗? 【参考方案1】:不确定您希望代码做什么。通过阅读您发布的内容,我假设您希望用户输入 2 个整数,如果他/她不想提示他/她重新输入某些内容,直到他/她输入 2 个整数。 如果是这种情况,我会添加
scan = new Scanner(br.readLine());
在 if 语句之后:
if(cont == 'N')
System.out.print("\nPlease re-enter\n\t:");
这将解决您的循环问题
【讨论】:
其中 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 哇!!谢谢rz!所以它基本上只是读取扫描的其余部分?那么当它返回输入时,它已准备好接受用户输入而不是剩余的输入字符? 常规扫描仪 scan.nextLine() 不起作用的任何原因? mm 所以 scan.next() 只是读取下一个单词,然后您将 scan 设置为包含其他内容(无论用户输入什么)。您实际上应该将 scan.next() 取出,这样如果用户没有输入任何内容,它就不会出错。你想在哪里使用 scan.nextLine?【参考方案2】:第一次尝试:
从
更改异常捕获中的行scan.next();
到
while(scan.hasNext())
scan.next();
【讨论】:
没有工作=(我猜卡在while循环中,因为提示永远不会重复【参考方案3】:您可以尝试在 catch 块中执行以下操作:
while(scan.hasNext())
scan.next();
【讨论】:
【参考方案4】:把它变成一个方法,然后用那个方法来做。 像这样:
// do it until getting two Integers
boolean isItInteger = false;
while (isItInteger == false)
isItInteger = getInt();
.
.
.
// your method for getting two Integers
public static boolean getInt()
try
Scanner sc = new Scanner(System.in);
n1 = sc.nextInt();
n2 = sc.nextInt();
catch (Exception e)
System.out.println("Please re-enter");
return false;
return true;
【讨论】:
我认为这解决不了任何问题。即使每次使用不同的扫描仪,底层输入流也不会改变。以上是关于java nextInt() 尝试多次捕获重复输出的主要内容,如果未能解决你的问题,请参考以下文章
java 编程随机生成20个80以内的数,不允许有重复的数据,存放到数组中,最后输出 代码
我在Scanner.nextInt()之后输入一个Scanner.nextLine()来使用新行,但它不能正常工作[重复]