【问题标题】:How to loop through until user inputs a valid integer?如何循环直到用户输入一个有效的整数?
【发布时间】:2018-07-15 05:21:34
【问题描述】:

我是 java 新手,正在尝试验证输入到控制台的数字。我想要一个整数,但我知道如果输入一个字母,例如会发生错误,所以我想我会使用 try & catch。如果第一次尝试这样做,这会起作用,但我想循环直到用户输入一个有效的整数。得到了这个工作,但是当我得到一个有效的号码并打印出这个号码时,我会得到一个所有尝试的列表......希望这是有道理的

import java.util.Scanner;
public class ConvertStringInt {

    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int i = 0;
    System.out.print("Enter a whole number: ");
    try {
      i = sc.nextInt();
    } catch (Exception e){
      System.out.println("Error");
      main(args);
    }
    
    System.out.println(i);
    
  }
}

这是控制台的输出......

输入一个整数:a

错误

输入一个整数:d

错误

输入一个整数:2.0

错误输入一个整数:1

1

0

0

0

有人能解释一下吗?

提前致谢

尼尔

【问题讨论】:

    标签: java int java.util.scanner


    【解决方案1】:

    您会看到每个输入的输出,因为您递归地调用 main。如果你立即输入正确的int,流程是这样的:

    main
      ask for input -> int
      print i (1)
    

    但在您的情况下,输入不是int。这就是发生的情况:您键入第一个输入,它失败了。您打印,因为您首先再次调用main,要求下一个输入。只有当您获得正确的int 时,您才能打印,然后完成并允许之前的main-execution 通过打印完成,然后允许之前的......等等:

    main(args)
        ask for input -> a !int
        main(args)
            ask for input -> d !int
            main(args)
                ask for input -> 2.0 !int
                main(args)
                    ask for input -> 1 int
                    print 1 (1)
                print 0 (2.0)
            print 0 (d)
        print 0 (a)
    

    查看 Ravi 的答案,了解在不使用 try/catch (which is discouraged) 的情况下重复请求输入的正确方法。

    【讨论】:

    • 干杯,这有帮助!
    【解决方案2】:

    您可以在循环中检查整数标记

    while (!sc.hasNextInt()) // loop until next token is integer
    {
        // do something or print error
         System.out.println(sc.next() +"is not number");
    }
    
    i = sc.nextInt();
    

    【讨论】:

    • 那太好了,必须查看扫描仪才能尝试了解它的工作原理。
    • 下期,我想检查一下数字是否在一个范围内。此刻我的头撞在砖墙上!
    • @NeilWhite 这将是不同的问题,我无法在此处更新。您需要发布新问题。
    • 谢谢,我正在尝试解决自己,但是当我尝试了所有选项时会问!
    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2021-09-09
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多