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

时间:2015-11-08 04:02:14

标签: java java.util.scanner user-input

我试图通过Scanner(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();
}

非常感谢任何帮助 - 迈克

1 个答案:

答案 0 :(得分:0)

你写了一个无限递归。这条线

return userInput(NutWidth, LastFretWidth, ScaleLength, NumFrets);
完成上一个方法后,

将再次调用相同的方法。它看起来像你想要将值存储在数据结构中并返回它,这需要调用这样的构造函数:

return new UserInput(NutWidth, LastFretWidth, ScaleLength, NumFrets);

您必须自己编写数据结构UserInput。如果您还没有编写类和数据结构,您可能希望变量是静态字段。如果您这样做,请将返回类型更改为void并完全删除return语句。

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