【发布时间】:2016-03-06 01:27:10
【问题描述】:
我在 while 循环中有一个开关,有很多情况可以对一组数字运行基本的统计分析。我们正在努力将简单的值数组替换为用户可以添加到的多个数据集的双精度数组映射。我添加了一个“添加”案例,它可以成功地添加到地图中……在每次 other 运行时。因此,当我将“添加数据集 1 2 3 4 5”写入扫描仪时,没有任何反应,但如果我再次将其写入扫描仪,它将成功添加。这是重要的代码,让我知道你能用它做什么。 getOption() 是一种通过扫描仪获取字符串、将其拆分为单个单词并将这些单词输入字符串数组的方法。输入的格式是“case keyForMap valuesForMap”。我知道我们不应该假设用户会遵循这种格式,但我们会让它在这个任务中滑动。 getValues() 获取数组中的数字,将它们解析为 double,然后将它们添加到新的 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();
}
}
【问题讨论】:
-
if 语句的 then 部分中的 break 是否会脱离 switch?即使是这样,
if (!...) {...} break;会不会更干净一点? -
在交换机中处理“退出”有什么意义?您已经在检查“退出”作为循环终止条件。
-
所有优点,我刚才添加了退出案例并忘记了它。此外,if/else 位似乎有效,因为没有它,用户只运行“添加”而没有其他值会得到负数组大小错误,因为 getValues() 创建一个具有用户输入数组长度的数组 - 2。
-
你提到它第二次工作。如果您第二次键入不同的内容,实际执行的是哪一个?第一个还是第二个?
-
@JoshuaTaylor 它确实打破了开关。
标签: java arrays switch-statement