【问题标题】:Integer Array Sorting整数数组排序
【发布时间】:2014-02-23 21:57:13
【问题描述】:

所以我在这里有这段代码,它获取一个文件并将其放入一个数组中。我现在需要做的是将第二列中的整数从大到小排序。这是我的代码,底部有一个指向数据文件的链接。我知道有排序算法,但我不知道如何实现它们。

import java.util.*;
import java.io.*;
public class sorter{
public static int id = 0;
public static int score = 0;
public static void main(String args[]){
Scanner inFile = null;
          try {
  inFile = new Scanner (new File ("sorter.txt"));
 } catch (FileNotFoundException e) {
  System.out.println("File not found!");
  System.exit(0); 
    } 
 while (inFile.hasNextLine()){
    String str = inFile.nextLine();
    String [] parts = str.split(" ");
    String part1 = parts[0];
    String part2 = parts[1];
    id = Integer.parseInt(part1);
    score = Integer.parseInt(part2);
    System.out.println(part1 + "  " +part2);
}
 }
  }

输出应该是这样的:

 /*
ID​  Score
305​ 265
306​ 262
115 ​257
311 ​256
123 ​253
116​ 246
325 ​246
321 ​245
323 ​245
113 ​243
218 ​243
208 ​242
302 ​242
112 ​239
104 ​239
110 ​238
223 ​230
213​ 229
207 ​228
203 ​224
222 ​223
    */

Link to data file

【问题讨论】:

  • 通常情况下,您不必实现它们。我会看一下Java Arrays API。我相信你可以想出一种对数组进行排序的方法。试着在纸上画出你将如何对一个小数组进行排序
  • @user3259415 你是按ID还是Score排序?
  • 嗯,你应该先保存每个分数/id,排序然后打印
  • 我认为更大的问题是保持 id 与适当的分数相匹配。

标签: java arrays file sorting integer


【解决方案1】:

我会创建一个类来处理这个问题。

class Data {
    private int id;
    private int score;

    //constructor and other stuff
}

现在你有了这个,创建一个List 来保存你的所有数据

List<Data> list = new ArrayList<>();
while (inFile.hasNextLine()){
    String str = inFile.nextLine();
    String [] parts = str.split(" ");
    list.add(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]));
}

现在您有了这个列表,您可以对其进行排序。但是怎么做呢?

这里是救援 API! Collections 类中有一个方法(称为sort),它允许您使用自定义Comparator 对列表进行排序。

所以你需要创建一个比较器,它会根据你的对象的分数来比较它们:

static class DataComparator implements Comparator<Data> {
     @Override
     public int compare(Data d1, Data d2){
         return Integer.compare(d1.getScore(), d2.getScore());
     }
 }

现在你有了这些,只需致电Collections.sort

Collections.sort(list, new DataComparator());

【讨论】:

  • 那么一个类创建列表,另一个类保存 dataComparator 和 Data 类?我对此很陌生,所以仍然有点混乱。
  • @user3259415 一个名为 Data 的类将保存文件中每个条目的 id 和分数,用于创建比较器(您可以让您的类实现可比较的接口,但我认为它是最好创建一个自定义比较器,因为它更灵活且不明显(您可能希望将来更改!)您的数据按分数而不是 id 排序。列表(ArrayList 类)已经存在于 JDK 中.
猜你喜欢
  • 2011-07-09
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多