[英]Parsing a string array in java
sNums = scanString.nextLine();
String[] num = sNums.split(" ");
for (int i = 0; i < num.length; ++i)
{
numbers = new double[i+1];
numbers[i] = Double.valueOf(num[i]);
}
for(double item: numbers)
out.print(item + " ");
我正在尝试将我拥有的数字字符串(在这种情况下为“ num”)更改为双精度数组。 我很确定这应该可行,但是由于某种原因,它会将“ 0.0”存储到每个输入的元素(最后一个元素除外)中。 例如,如果我输入“ 1 5 7 90 52 [enter]”,则输出应为“ 1.0 5.0 7.0 ... etc”,但我得到的却是“ 0.0 0.0 0.0 0.0 52.0”
您遇到的问题是您在循环中创建了一个新数组。 您应该将其取出并进行初始化。
String[] num = sNums.split(" ");
double[] numbers = new double[num.length]; // The valid place for loop
for (int i = 0; i < num.length; ++i)
{
numbers[i] = Double.valueOf(num[i]);
}
for(double item: numbers) {
out.print(item + " ");
}
每次在for循环中都要重新创建数组。 另外,您在第二个中for each
都使用a而不是使用它,而是使用i
。 因为i
从未在该范围内声明过,所以无法编译。无论如何,我建议您忘记Java中的数组并使用List,它们更加方便。
sNums = scanString.nextLine();
final String[] num = sNums.split(" ");
final List<Double> numbers = new ArrayList<Double>();
for (final String cur: num) {
numbers.add(Double.valueOf(cur));
}
for(final Double item: numbers) {
out.print(item + " ");
}
您很容易创建一个新数组,每次迭代循环中的大小都会增加。 您只需要创建一个新数组,然后在循环中填充其中的值。
numbers = new double[num.length];
for (int i = 0; i < num.length; ++i) {
// numbers = new double[i+1]; // Not needed
numbers[i] = Double.valueOf(num[i]);
}
您在num
和number
之间混淆。
每次第一个for
循环体都在创建一个新数组。 而是将其从循环主体中删除,然后像您所做的那样将其放置在loop
语句之前。
String[] number = sNums.split(" "); for (int i = 0; i < number.length; ++i) { // numbers = new double[i+1]; <-- commented out numbers[i] = Double.valueOf(num[i]); }
您使用enhanced-for
循环打印错误:
for(double item: numbers) out.print(numbers[i] + " "); // <-- i may already have the value of number.length
而是直接使用item
打印:
for(double item: numbers) out.print(item + " ");
从命令行参数使用'args'可以使用:
List<Double> numbers = new ArrayList<Double>();
for(String a:args){
numbers.add(Double.valueOf(a));
}
System.out.println(numbers);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.