我有两种方法,getOption()
和driver()
。
getOption()
从扫描程序中获取一个字符串,将其分解为单个单词,并返回一个字符串数组。
driver()
然后获取该数组的第一个值getOption()[0],并基于该第一个String开始一个while循环。虽然String不等于“退出”,但检查该值是否与任何开关案例匹配。但是,当我运行它时,它可以执行任何切换情况,但是quit语句永远不会起作用。任何人都可以帮我一把吗?
public String[] getOption(){
String optionLine[];
Scanner input = new Scanner(System.in);
System.out.println("Input string\n");
String line = input.nextLine();
optionLine = line.split(" ");
return optionLine;
}
public void driver(){
String option = getOption()[0];
Stats s = new Stats(data);
while (!"quit".equals(option)){
switch (option) {
case "add": //data.put(getOption()[1], getValues());
System.out.println("add");
break;
case "set": System.out.println("set");
break;
case "print": System.out.println(Arrays.toString(data));
break;
case "sum": System.out.println(s.sum());
break;
case "mean": System.out.println(s.mean());
break;
case "stdev": System.out.println(s.standardDeviation());
break;
case "median": System.out.println(s.median());
break;
case "primes": System.out.println(s.primes());
break;
case "summary": System.out.println("summary");
break;
//case "test": System.out.println(Arrays.toString(getValues()));
}
driver();
}
}
答案 0 :(得分:4)
您在while循环结束时以方法driver();
无论你是否阅读getOption
,你仍然会回到方法中......
这就是显然不能正常工作的原因......
一个非常不寻常的陷阱。
答案 1 :(得分:1)
进入While
循环后,永远不会更改选项的值。你可以改变你的时间
while (true){
option = getOption()[0];
Stats s = new Stats(data);
switch (option) {
case "add": //data.put(getOption()[1], getValues());
System.out.println("add");
break;
case "set": System.out.println("set");
break;
case "print": System.out.println(Arrays.toString(data));
break;
case "sum": System.out.println(s.sum());
break;
case "mean": System.out.println(s.mean());
break;
case "stdev": System.out.println(s.standardDeviation());
break;
case "median": System.out.println(s.median());
break;
case "primes": System.out.println(s.primes());
break;
case "summary": System.out.println("summary");
break;
//case "test": System.out.println(Arrays.toString(getValues()));
case "quit": break;
}
}
注意,如果您使用我的答案,则无需再递归调用driver()
。
答案 2 :(得分:0)
您似乎无法在任何地方更改option
的值。您以递归方式调用driver()
,但这不会影响当前正在执行的方法中保持不变的局部变量。
因此,一个driver()
方法调用另一个,它创建自己的option
变量,与调用者的option
变量无关。基本上,只有对driver()
的最内部调用才会返回,并且您将被卡在其调用者的while
循环中。
摆脱那次递归,这是不必要的。在switch
下方,只需致电getOption()
并更新option
的价值。
while (!"quit".equals(option)){
// switch statement
option = getOption()[0];
}