“退出困难”;“用户输入”;在主Java中调用的方法

“退出困难”;“用户输入”;在主Java中调用的方法,java,java.util.scanner,user-input,Java,Java.util.scanner,User Input,我试图通过扫描仪(System.in)输入一些数值。我正在用我的方法从main调用一个类,并且很难退出该方法,我的问题正在循环 我相信这是一个简单的问题,但我花了很长时间寻找解决方案 方法如下: public static Object userInput(double nutWidth, double lastFretWidth, double scaleLength, int numFrets) { boolean dataCheck = true; try {

我试图通过扫描仪(System.in)输入一些数值。我正在用我的方法从main调用一个类,并且很难退出该方法,我的问题正在循环

我相信这是一个简单的问题,但我花了很长时间寻找解决方案

方法如下:

public static Object userInput(double nutWidth, double lastFretWidth, double scaleLength, int numFrets) {

    boolean dataCheck = true;
    try {
        while (dataCheck == true) {
            System.out.println("What is the width at the nut?");
            NutWidth = key.nextDouble();

            System.out.println("What is the width at the last fret?");
            LastFretWidth = key.nextDouble();

            System.out.println("What is the scale length?");
            ScaleLength = key.nextDouble();

            System.out.println("How many frets will your guitar have?");
            NumFrets = key.nextInt();
            dataCheck = false;
        }
    } catch (InputMismatchException e) {
        System.out.println("Enter a integer.");
        key.nextInt();
    }

    return userInput(NutWidth, LastFretWidth, ScaleLength, NumFrets);
}
以下是我的主要观点:

public static void main(String[] args) {
    FingerBoard.userInput(0, 0, 0, 0);
    FingerBoard.UserData();
}

非常感谢您的帮助,Mike

您已经编写了一个无限递归。线路

return userInput(NutWidth, LastFretWidth, ScaleLength, NumFrets);
将在完成前一个方法后再次调用同一个方法。在我看来,您希望将值存储在数据结构中并返回该值,这需要调用构造函数,如下所示:

return new UserInput(NutWidth, LastFretWidth, ScaleLength, NumFrets);
您必须自己编写数据结构UserInput。如果您还没有开始编写类和数据结构,那么您可能希望变量是静态字段。如果要执行此操作,请将返回类型更改为
void
,并完全删除return语句


与您的问题无关的其他注释。方法不需要参数。它们从未被使用过。您可能还希望将try/catch放在while循环中。这样,无效的输入将提示输入新的输入,而不是将其设置为0。

您的返回语句一直在调用
userInput
,并且没有基本情况谢谢。所以我认为while语句毫无意义,问题是值需要作为数组传递。非常感谢您花时间解释。非常感谢,这非常有效。我去掉了while循环,使方法无效,并添加了一个enum类来返回信息。