[英]Java - Reading numbers from text file, and sorting them makes negative numbers turn to zero
我有一個雙數組
double[] numbers = new double[1000];
int size = 0;
然后我從文本文件numbers.txt
讀取數字
input = new Scanner(new FileReader("numbers.txt"));
output= new PrintWriter(new FileWriter("sorted.txt"));
while (input.hasNext()) {
numbers[size] = input.nextDouble();
size = size + 1;
if (size == 1000) break;
然后使用以下方法對它們進行排序:
numbers = Arrays.stream(numbers)
.boxed()
.sorted(Comparator.reverseOrder())
.mapToDouble(Double::doubleValue)
.toArray();
並將它們寫入文件sorted.txt
for (int i = 0; i < size; i++)
output.println(numbers[i]);
當我嘗試對包含負數的數組進行排序時,例如,如果numbers.txt
包含5 -3 1 -4
,則sorted.txt
將包含5 1 0 0
。
我相對來說是 Java 的初學者,我不確定為什么會發生這種情況。 當我使用Array.sort(numbers,0,size)
它運行良好,但我試圖按降序對它們進行排序,因為此方法按升序對它們進行排序。
問題是Arrays.stream(numbers)
流整個數組......包括你沒有放入值的數組部分。 這些部分將包含0.0
。
所以正在發生的是:
您將文件中的 4 個數字讀入數組。 這給你:
[5.0, -3.0, 1.0, -4.0, 0.0, 0.0, ..... 0.0]
您以相反的順序對數組進行排序:
[5.0, 1.0, 0.0, 0.0, ..... 0.0, -1.0, -3.0]
打印出數組的前 4 個元素。
[5.0, 1.0, 0.0, 0.0]
有多種方法可以解決這個問題,包括:
ArrayList<Double>
而不是double[]
。Double.POSITIVE_INFINITY
預初始化所有數組元素Arrays.copy
復制您需要的子Arrays.copy
。 重寫流代碼,在排序前選擇0
到size - 1
元素; 例如
numbers = Arrays.stream(numbers).limit(size). ....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.