簡體   English   中英

Java - 從文本文件中讀取數字,並對它們進行排序使負數變為零

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

所以正在發生的是:

  1. 您將文件中的 4 個數字讀入數組。 這給你:

     [5.0, -3.0, 1.0, -4.0, 0.0, 0.0, ..... 0.0]
  2. 您以相反的順序對數組進行排序:

     [5.0, 1.0, 0.0, 0.0, ..... 0.0, -1.0, -3.0]
  3. 打印出數組的前 4 個元素。

     [5.0, 1.0, 0.0, 0.0]

有多種方法可以解決這個問題,包括:

  • 使用ArrayList<Double>而不是double[]
  • 使用(例如) Double.POSITIVE_INFINITY預初始化所有數組元素
  • 在排序之前使用Arrays.copy復制您需要的子Arrays.copy
  • 重寫流代碼,在排序前選擇0size - 1元素; 例如

     numbers = Arrays.stream(numbers).limit(size). ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM