我有一个中等程度的简单程序,我遇到了问题。它应该接受用户输入,将行分隔为空格并将单个单词作为字符串转储到String []数组中。这一切都很好。但是,我需要获取数字值(我们知道哪些单词可以已经输入,无需检查),将它们转换为双精度数,将双精度数添加到数组中,然后返回它。我不能让它从用户输入返回值,但如果我将getValues()方法(将String转换为double,然后添加到数组)直接赋值(例如{“1”,“2”, “3”,“4”})它工作正常。用户输入的String数组不起作用。
double data[] = {3.0, 15.0, 7.0, 27.0};
HashMap<String,double[]> dataMap = new HashMap();
public String[] getOption(){
Scanner input = new Scanner(System.in);
System.out.println("\nInput string\n");
String line = input.nextLine();
return split(line);
}
public String[] split(String line){
String[] optionLine = line.split(" ");
return optionLine;
}
public double[] getValues(String[] inputs){
double values[] = new double[inputs.length - 2];
for (int i = 2; i < inputs.length; i++){
double valueDouble;
valueDouble = Double.parseDouble(inputs[i]);
values[i-2] = valueDouble;
}
return values;
}
public void driver(){
String option = getOption()[0];
while (!"quit".equals(option)){
switch (option) {
case "add": if (options.length < 2){
break;
}
else{
dataMap.put(options[1], getValues(options));
}
//System.out.println(dataMap.isEmpty());
//System.out.println(Arrays.toString(getValues()));
break;
case "quit": return;
}
option = getOption()[0];
}
}
public static void main(String[] args) {
StatsAgain sa = new StatsAgain();
sa.driver();
}
}
让我知道你能做些什么。基本上,用户输入一个字符串,该字符串被分解为一个单词数组。将单词数组传递给switch语句,该语句检查数组的第一个单词以确定用户想要做什么。如果他们写“add”,它应该运行getValues()方法并使用return作为添加到地图的值。 getValues()方法肯定是个问题,当它使用getOption()方法中的字符串数组时,它不会返回任何内容。我希望这是有道理的......
编辑:忘了提!当我注释掉地图添加“添加”案例的一部分,而只是打印getValues()返回(应该是双数组),它工作如果我调用添加案例两次即可。例如,如果我“添加abc 1 2 3 4”,则没有任何反应,但再次运行完全相同的行将正确返回[1.0,2.0,3.0,4.0]。答案 0 :(得分:0)
根据提供的描述,我认为出现意外行为的原因是多次调用getOption()
方法。让我们分析driver()
方法:
String option = getOption()[0];
将用户输入的第一个单词分配给选项字符串。dataMap.put(getOption()[1], getValues());
操作。在上面的两个步骤中,getOption()
方法被调用两次。由于每次都读取用户的输入,用户为第一次调用提供的输入字符串会丢失(第一个令牌除外)。我们应该编写两个方法,一个用于读取用户的输入,另一个用于对其进行标记,然后,我们可以使用switch
中的tokenizer方法返回的数组。
答案 1 :(得分:0)
所以你应该做的是读取(System.in)输入一次并将String数组转换为其他方法。
public String[] getOption(){
String line = new Scanner(System.in).nextLine();
return line.split(" ");
}
...
String[] inputs = getOption();
...
case "add": dataMap.put(inputs[1], getValues(inputs));
....