私は割り当て作業中で、バイナリ検索を実行する必要があります。しかし、どういうわけか、自分の選択に問題があると思います。ここで私はレコードと呼ばれるユーザー定義のクラスがあります。それは次のプロパティを持っています:Javaで選択ソートを使用してユーザー定義の配列を文字列でソート
class Record{
String studentId;
int assignment;
int exam;
int total;
String grade;
}
私はこれらのプロパティのゲッターを持っています。 グレードブックという名前の別のクラスがあり、その中にタイプのレコードの配列があります。次のように私は手動でloadFromTablesと呼ばれる方法を経由して、レコードの配列をロード:
private void loadFromTables(){
String[] students = {
"S10","S20","S30","S40","S50", "S60",
"S08","S18","S28","S38","S48", "S58",
"S06","S16","S26","S36","S46", "S56",
};
int[] assignment = {
0, 10, 20, 30, 30, 40,
0, 10, 20, 30, 30, 40,
0, 10, 20, 30, 30, 40,
};
int[] exam = {
0, 39, 44, 44, 54, 59,
1, 40, 45, 45, 55, 60,
2, 41, 46, 46, 56, 58,
};
nrecords = students.length;
gradeBook = new Record[nrecords];
for (int i = 0; i < nrecords; i++) {
int t = assignment[i] + exam[i];
String g = calculateGrade(t);
Record r = new Record(students[i], assignment[i], exam[i], t, g);
gradeBook[i] = r;
}
}
は今、私はプロパティstudentIdでレコードを検索するバイナリ検索をしたいです。しかし、まず、レコード配列をソートする必要があります。私はの選択ソートを使用するように言われています。だから、私はこれを行うと、私は問題はをどこにあるか、これはですが、私はどこを見つけ出すように見えることはできません...と思う:
private void sortById(){
//Selection Sort
for(int i=0; i<nrecords-1; i++){
int index = i;
for(int j=i+1; j<nrecords; j++){
if((gradeBook[index].studentId).compareTo(gradeBook[j].studentId) > 0){
index = j;
}
Record temp = gradeBook[i];
gradeBook[i] = gradeBook[index];
gradeBook[index] = temp;
}
}
}
そして、ここでは私が考えるが、私が使用されるバイナリサーチのコードですバイナリ検索が正しく実装されています。私はバブルソートでそれをやろうとしていたので、それが私の望むものでした。
public Record find(String id){
//Binary Search
int low = 0;
int high = nrecords - 1;
Record record = null;
while(low <= high){
int mid = (high + low)/2;
if(id.compareTo(gradeBook[mid].studentId) == 0){
record = new Record(id, gradeBook[mid].assignment, gradeBook[mid].exam, gradeBook[mid].total, gradeBook[mid].grade);
return record;
}
else if(id.compareTo(gradeBook[mid].studentId) > 0){
low = mid + 1;
}
else if(id.compareTo(gradeBook[mid].studentId) < 0){
high = mid - 1;
}
}
return record;
}
ありがとうございます。私は問題が選択ソートにあり、それが私の頭を食べていることを知っています。あなたの提案を感謝します! :)
あなたの修正されたコードは、私が書いたとまったく同じものが含まれていますが、説明は素晴らしかったです。回答ありがとうございました!それが私の問題を解決しました! – Arefin