【问题标题】:Java function to get input from scanner until int? [duplicate]Java函数从扫描仪获取输入直到int? [复制]
【发布时间】:2015-03-25 10:23:46
【问题描述】:

我正在尝试创建一个 java 函数,该函数返回用户输入的 int,但在用户输入有效数字之前不会返回。这是我最初的函数模型:

    public int getChoice(){
        try{
            return scan.nextInt();
        }catch(Exception e){
            return getChoice();
        }
    }

scanScanner scan = new Scanner(System.in); 声明

这个函数产生了一个Java.lang.stackOverflowError(嗯......这似乎是一个合适的网站......)。我认为这是因为该函数不断被调用。

我考虑过以某种方式使用Integer.valueOf(scan.nextLine())',但我没有真正用它做任何事情的原因是因为在某些时候,我无法弄清楚是什么决定了这是否会发生,但按下“Enter” ' 当程序调用nextLine() 时,将跳过下一个nextLine()。我实在想不出办法。

所以,如果有人可以提供一个 Java 函数,它将循环直到用户输入一个有效的整数,然后返回该整数,请这样做,谢谢。

【问题讨论】:

  • 你可以在不递归的情况下重写你的代码来看看会发生什么:把它放在一个while(true)循环中并删除对getChoice()的调用——返回将打破循环,如果有异常它只会重复。

标签: java input io int java.util.scanner


【解决方案1】:

由于在 catch 块中调用 getChoice,你得到了一个错误的递归。要无限地重复代码,直到用户给您一个有效的数字,请使用while(true) 无限循环。您必须阅读该行并将其转换为 Integer 的代码就可以了。

public int getChoice() {       
    while (true) {
        try {                                
            return Integer.valueOf(scan.nextLine());
        } catch (Exception e) {
            System.out.println("Enter a valid number");
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 2016-06-12
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多