我试图通过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();
}
非常感谢任何帮助 - 迈克
答案 0 :(得分:0)
你写了一个无限递归。这条线
return userInput(NutWidth, LastFretWidth, ScaleLength, NumFrets);
完成上一个方法后,将再次调用相同的方法。它看起来像你想要将值存储在数据结构中并返回它,这需要调用这样的构造函数:
return new UserInput(NutWidth, LastFretWidth, ScaleLength, NumFrets);
您必须自己编写数据结构UserInput。如果您还没有编写类和数据结构,您可能希望变量是静态字段。如果您这样做,请将返回类型更改为void
并完全删除return语句。
与您的问题无关的其他评论。您不需要方法的参数。他们从未使用过。您可能还想将try / catch放在while循环中。这样,无效输入将提示输入新内容,而不是将内容设置为0。