1

取り組んでいる課題に少し問題があります。基本的に、学生IDとその名が次の形式のファイルがあります。

17987ベス

17950 クラーク

17936 アーロン

ファイルの内容を配列に入れ、ID ではなく名前でソートする必要があります。使用Arrays.sort(myArray)すると、ID で自動的に並べ替えられます。コンパレーターがよくわからないので、順を追って説明していただけるとわかりやすいと思います。ありがとうございました!

4

4 に答える 4

6

Comparator渡された を参照する を提供する必要がありString、彼らは探しているものを理解している必要があります。これはいくつかの方法で行うことができますが、文字列の内容について確実にわかっている場合は、スペースに基づいて s をsplit実行し、2 番目の値を比較できます。Stringまたは、正規表現を使用してそれらの詳細を抽出することもできます。

class SecondWordComparator implements Comparator<String>
{
    @Override
    public int compare(String s1, String s2)
    {
        String[] a1 = s1.split(" ");
        String[] a2 = s2.split(" ");

        // you should ensure that there are actually two elements here
        return a1[1].compareTo(a2[1]);
    }
}
于 2013-03-04T20:49:24.040 に答える
2

TreeMapを使用すると、エントリはキーでソートされます。

例えば:

SortedMap<String, Integer> srtdMap  = new TreeMap<String, Integer>();

srtdMap.put("Beth", 17987);
srtdMap.put("Aaron", 17936 );
srtdMap.put("Clark", 17950);

//key set always returns the same order by name
for(String name : srtdMap.keySet())
{
    int id = srtdMap.get(name);
    System.out.println("name = " + name + ", ID is " + id);
}
于 2013-03-04T20:54:52.937 に答える
1

実行できるのは、配列のすべての内容を最終的な配列に再配置するforループを実行することです。2つのforループが必要になります。最初のforループは配列を通過し、最初のループ内のforループは最初の文字を探し、それを最後のArray/Arraylistに追加します。

于 2013-03-04T20:51:25.760 に答える
1

オブジェクト指向のアプローチでは、ファイルを新しいクラス に解析し、Studentそれらを Array(List) に保存します。クラスは拡張できます。とComparable<Student>を分離しint ID、メソッドを returnにすることができます。次に、sort メソッドを呼び出すと、必要に応じて並べ替えられます。String namecompareTo(Student student)name.compareTo(otherStudent.name)

そのような:

public class Student implements Comparable<Student> {
    private int id;
    private String name;
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
    @Override
    public int compareTo(Student student) {
        return name.compareTo(student.name);
    }

}
于 2013-03-04T20:53:48.933 に答える