Java 尝试读取值并从最大值到最小值

Java 尝试读取值并从最大值到最小值,java,arrays,sorting,file-io,Java,Arrays,Sorting,File Io,我有一个具有以下值的文件: 2. 4. 8. 十, 我试图把它们从大到小进行分类,但我有问题,因为它不能正常工作,给我一个类似8,2,4的列表。 这是我的密码: public void highScore () { int highScore = 0; String line = ""; int x = 0; try { BufferedReader reader = new BufferedReader (new FileReader (

我有一个具有以下值的文件: 2. 4. 8. 十,

我试图把它们从大到小进行分类,但我有问题,因为它不能正常工作,给我一个类似8,2,4的列表。 这是我的密码:

public void highScore ()
{
    int highScore = 0;
    String line = "";
    int x = 0;
    try
    {
        BufferedReader reader = new BufferedReader (new FileReader ("highScores.txt"));
        while ((line = reader.readLine ()) != null)                 // read the score file line by line
        {
            x++;

        }
        reader.close ();
    }
    catch (IOException ex)
    {
        System.err.println ("ERROR reading scores from file");
    }
    int[] y = new int [x];
    int b = 0;
    try
    {
        BufferedReader reader = new BufferedReader (new FileReader ("highScores.txt"));
        while ((line = reader.readLine ()) != null)                 // read the score file line by line
        {
            int d = Integer.parseInt (line);
            y [b] = d;
            b++;
        }
        reader.close ();
    }
    catch (IOException ex)
    {
        System.err.println ("ERROR reading scores from file");
    }
    int tempVar;
    for (int i = 0 ; i < y.length - 1 ; i++)
    {
        for (int j = 0 ; j < y.length - 1 ; j++)
        {
            if (y [i] < y [j])
            {
                tempVar = y [j + 1];
                y [j + 1] = y [i];
                y [i] = tempVar;
            }
        }
    }
    for (int i = 0 ; i < y.length - 1 ; i++)
    {
        c.println (y [i]);
    }
}
public void高分()
{
int高分=0;
字符串行=”;
int x=0;
尝试
{
BufferedReader=newBufferedReader(newFileReader(“highScores.txt”);
while((line=reader.readLine())!=null)//逐行读取分数文件
{
x++;
}
reader.close();
}
捕获(IOEX异常)
{
System.err.println(“从文件读取分数时出错”);
}
int[]y=新的int[x];
int b=0;
尝试
{
BufferedReader=newBufferedReader(newFileReader(“highScores.txt”);
while((line=reader.readLine())!=null)//逐行读取分数文件
{
int d=Integer.parseInt(行);
y[b]=d;
b++;
}
reader.close();
}
捕获(IOEX异常)
{
System.err.println(“从文件读取分数时出错”);
}
int-tempVar;
对于(int i=0;i
您可以在代码中使用类似的内容

Integer[] y = {2,4,6,8};
        Arrays.sort(y,new Comparator<Integer>(){

            @Override
            public int compare(Integer arg0, Integer arg1) {
                // TODO Auto-generated method stub
                if(arg0 == arg1)
                return 0;
                else if(arg0 < arg1)
                    return 1;
                else
                    return -1;
            }

        });
        System.out.println(Arrays.toString(y));
Integer[]y={2,4,6,8};
sort(y,新的比较器(){
@凌驾
公共整数比较(整数arg0、整数arg1){
//TODO自动生成的方法存根
如果(arg0==arg1)
返回0;
else if(arg0
您的冒泡排序实现稍有问题。以下是固定版本:

    int k;
    int tempVar;
    for (int i = y.length; i >= 0; i--) {
        for (int j = 0; j < y.length - 1; j++) {
            k = j + 1;
            if (y[j] < y[k]) {
                tempVar = y[j];
                y[j] = y[k];
                y[k] = tempVar;
            }
        }
    }
// and printing doesn't need length - 1
   for (int i = 0; i < y.length; i++) {...}
intk;
int-tempVar;
对于(int i=y.length;i>=0;i--){
对于(int j=0;j
此外,您还可以使用java的更高级别功能来实现这一点。下面是一个使用java 8 streams和lambdas的更简单版本:

try {
    Stream<String> lineStream = Files.lines(Paths.get("highScores.txt"));
    List<Integer> result = lineStream
            .map(line -> line.trim()) //remove whitespace
            .map(line -> Integer.valueOf(line)) //parse string to integer
            .sorted((o1, o2) -> Integer.compare(o2, o1)) // reverse sort
            .collect(Collectors.toList()); //collect results into list
    result.forEach(score -> System.out.println(score));
} catch (IOException e) {
    e.printStackTrace();
}
试试看{
Stream lineStream=Files.lines(path.get(“highScores.txt”);
列表结果=行流
.map(line->line.trim())//删除空白
.map(line->Integer.valueOf(line))//将字符串解析为整数
.sorted((o1,o2)->Integer.compare(o2,o1))//反向排序
.collect(Collectors.toList());//将结果收集到列表中
result.forEach(score->System.out.println(score));
}捕获(IOE异常){
e、 printStackTrace();
}