取り組んでいる課題に少し問題があります。基本的に、学生IDとその名が次の形式のファイルがあります。
17987ベス
17950 クラーク
17936 アーロン
ファイルの内容を配列に入れ、ID ではなく名前でソートする必要があります。使用Arrays.sort(myArray)
すると、ID で自動的に並べ替えられます。コンパレーターがよくわからないので、順を追って説明していただけるとわかりやすいと思います。ありがとうございました!
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]);
}
}
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);
}
実行できるのは、配列のすべての内容を最終的な配列に再配置するforループを実行することです。2つのforループが必要になります。最初のforループは配列を通過し、最初のループ内のforループは最初の文字を探し、それを最後のArray/Arraylistに追加します。
オブジェクト指向のアプローチでは、ファイルを新しいクラス に解析し、Student
それらを Array(List) に保存します。クラスは拡張できます。とComparable<Student>
を分離しint ID
、メソッドを returnにすることができます。次に、sort メソッドを呼び出すと、必要に応じて並べ替えられます。String name
compareTo(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);
}
}