切换案例需要两次调用以实际工作

时间:2016-03-06 01:27:10

标签: java arrays switch-statement

我在while循环中有一个开关,有很多情况可以对一组数字进行基本的统计分析。我们正在努力用一个用户可以添加的多个数据集的双精度数组映射替换简单的值数组。我添加了一个“添加”案例,它可以在每个其他运行时成功添加到地图....因此,当我将“添加数据集1 2 3 4 5”写入扫描仪时,没有任何反应,但如果我再次将其写入扫描仪,它将成功添加。这是重要的代码,让我知道你可以做些什么。 getOption()是一种通过扫描程序获取字符串的方法,将其拆分为单个单词,并将这些单词输入到字符串数组中。输入的格式是“case keyForMap valuesForMap”。我知道我们不应该假设用户会遵循这种格式,但我们会让它滑动进行此分配。 getValues()接受数组中的数字,将它们解析为double,并将它们添加到一个新的双精度数组中,然后返回。

HashMap<String,double[]> dataMap = new HashMap();
...
public void driver(){
    Stats s = new Stats(data);
    String[] options = getOption();
    while (!"quit".equals(options[0])){
    switch (options[0]) {
        case "add": if (getOption().length < 2){
                        break;
                    }
                    else{
                        dataMap.put(options[1], getValues(options));
                    }
                    break;

        case "summary": //Arrays.toString(dataMap.entrySet().toArray());
                        System.out.println(dataMap.containsKey("dsn"));
                        break;
        case "quit": return;
        default: System.out.println(options[0] + " is not a legal option");
    }
    options = getOption();
    }
}

1 个答案:

答案 0 :(得分:2)

if (getOption().length < 2)替换为if (options.length < 2)。在那里调用方法意味着你正在获取一个全新的输入行而不是使用你已经拥有的那一行,然后在检查它的长度之后将其抛弃。