好的,基本上我必须用这段代码完成两件事。 1.将文件中的两列排序为数组,然后根据第二列按从大到小的顺序排列。
在开始排序算法之前,我需要让数组正确排序。任何帮助都会很棒。谢谢。 我已经列出了下面文件内容的超链接。
import java.util.*;
import java.io.*;
import java.text.*;
public class sorter{
public static int id = 0;
public static int score = 0;
public static void main(String args[]){
Scanner inFile = null;
int ROWS = 21;
int COLS = 2;
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);
int[ ][ ] array1 = new int[id][score];
for (int i =0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
System.out.print(" " + array1[21][2]);
}
System.out.println("");
}
}
}
}
答案 0 :(得分:0)
您需要创建一个Map(最好是Treemap),其中键是第1列(学生ID),值是第2列(测试分数)。然后您可以按值对其进行排序。按值排序需要小心,因为如果两个学生具有相同的测试分数,那么通常的方法就不会起作用。一种方法如下:
<K,V extends Comparable<? super V>> SortedSet<Map.Entry<K,V>> entriesSortedByValues(Map<K,V> map, final int order) {
SortedSet<Map.Entry<K,V>> sortedEntries = new TreeSet<>(
new Comparator<Map.Entry<K,V>>() {
public int compare(Map.Entry<K,V> e1, Map.Entry<K,V> e2) {
return (order > 0) ? compareToRetainDuplicates(e1.getValue(), e2.getValue()) : compareToRetainDuplicates(e2.getValue(), e1.getValue());
}
}
);
sortedEntries.addAll(map.entrySet());
return sortedEntries;
}
,其中
private static <V extends Comparable<? super V>> int compareToRetainDuplicates(V v1, V v2) {
return (v1.compareTo(v2) == -1) ? -1 : 1;
}
答案 1 :(得分:0)
我建议您创建一个类来保存每对数据并实现Comparable接口以定义顺序标准,然后您可以使用Arrays.sort()
方法。这是一个可能的解决方案:
public void solve()
{
try {
Scanner inFile = new Scanner(new File("input.dat"));
int ROWS = 21;
int COLS = 2;
Score[] scores = new Score[ROWS];
int i = 0;
while (inFile.hasNextLine()) {
String line = inFile.nextLine();
System.out.println(line);
String[] tokens = line.split(" ");
int id = Integer.parseInt(tokens[0]);
int score = Integer.parseInt(tokens[1]);
scores[i] = new Score(id, score);
i++;
}
Arrays.sort(scores);
for (i = 0; i < scores.length; i++)
System.out.println(scores[i].getId() + "-> " + scores[i].getScore());
} catch (IOException ioe) {
}
}
class Score implements Comparable<Score> {
private int id;
private int score;
Score(int i, int s)
{
id = i;
score = s;
}
public int getId() { return id; }
public int getScore() { return score; }
@Override
public int compareTo(Score other)
{
if (getScore() > other.getScore())
return -1;
else if (getScore() < other.getScore())
return 1;
else
return 0;
}
}