[英]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.