Java - Arrays.sort返回0

时间:2016-03-25 22:12:29

标签: java arrays sorting

import java.io.*;
import java.util.*;
import java.text.*;

public class aaa {

    public static void main(String args[]) throws IOException {

        Scanner sf = new Scanner(new File("C:\\temp_Name\\DataGym.in.txt"));
        int maxIndx = -1;
        String text[] = new String[1000];
        while (sf.hasNext()) {
            maxIndx++;
            text[maxIndx] = sf.nextLine();
        }

        sf.close();

        double average[] = new double[100];

        for (int j = 0; j <= maxIndx; j++) {
            Scanner sc = new Scanner(text[j]);
            int k = 0;
            while (sc.hasNext()) {
                average[k] = Double.parseDouble(sc.next());
                Arrays.sort(average); //returns 0
                System.out.println(average[k]);
                k++;
            }
        }

    }
}

如果没有Arrays.sort(平均值),程序会正常打印出所有数组值。但是,如果我在值中添加它,则全部返回为零。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

这比它需要的要复杂得多,特别是每次在其中设置一个值时,您都在对数组进行排序。这意味着您填充数组时可以覆盖先前添加的值。

我建议你在添加完所有元素后对数组进行排序。

你也知道数组应该是

的大小
double average[] = new double[maxIndx+1];

较短的版本可能看起来像

Path path = Paths.get("C:\\temp_Name\\DataGym.in.txt");
double[] nums = Files.lines(path)
                    .mapToDouble(Double.parseDouble)
                    .sorted()
                    .toArray();

答案 1 :(得分:0)

你所写的内容似乎不太可能是你真正想要的。特别是,保留包含text的数组null的第0个元素,并在每次设置任何元素时对数组average进行排序。这确实会给您带来麻烦,因为average有100个元素,并且在实例化数组时它们都被初始化为0。如果将任何一个元素设置为非零然后对数组进行排序,则非零元素将移动到最后,在其位置留下零。

很难说出你真正想要的是什么,但一般来说,在对数组进行排序之前,会在数组中填入所有需要的值,并且如果一个数据库保留的空间超过了数组中需要的空间,那么就只能对元素进行排序正在使用中。