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以内的数,不允许有重复的数据,存放到数组中,最后输出 代码

多次重复打印独特元素

Java 正则表达式捕获组

我在Scanner.nextInt()之后输入一个Scanner.nextLine()来使用新行,但它不能正常工作[重复]

以最佳方式从 system() 命令捕获标准输出 [重复]

visual studio typescript“未捕获的ReferenceError:未在...定义导出” [重复]