我有一个中等简单的程序,我遇到了问题。它应该接受用户输入,按空格拆分该行并将单个字作为字符串转储为String []数组。这一切都很好。但是,我需要将数值(我们知道哪些单词可以被铸造,无需检查),将它们转换为双精度,将双精度数组添加到数组并将其返回。我无法让它从用户输入中返回值,但是如果我直接给出getValues()方法(将String转换为double然后添加到数组)的值(例如{“1”,“2”,“ “3”,“4”})它工作正常。用户输入的字符串数组不起作用。用户输入 - >字符串数组 - >铸造双打不起作用
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()方法并使用返回值作为添加到地图的值。 getValues()方法绝对是问题,当它使用getOption()方法中的字符串数组时,它不会返回任何内容。我希望这是有道理的...
编辑:忘了提及!当我注释掉添加部分“添加”情况的地图,而只是打印getValues()返回(应该是双重数组)时,它可以工作如果我称为add case 两次。例如,如果我做“添加abc 1 2 3 4”,没有任何反应,但再次运行完全相同的行将正确返回[1.0,2.0,3.0,4.0]。
对不起,如果这不清楚!用户输入“add”,所以我从2开始。编辑主帖澄清。 –
Qdhcjv
我编辑了我的答案。希望能帮助到你。 –
谨慎阐述标记化?恐怕我不明白那是什么。 – Qdhcjv