告诉

时间:2016-03-04 20:13:38

标签: java switch-statement

我有两种方法,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();
    }
}

3 个答案:

答案 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];     
}