次のコードがあります。その意図は、配列の最小のアルファベット順のメンバーを返すことです。
public String smallest() {
String smallest = "";
int i = 0;
while(log[i] != null) {
int nextIndex = i+1;
if(log[nextIndex] == null) {
break;
}
if(log[i].compareToIgnoreCase(log[nextIndex]) >0) {
smallest = log[nextIndex];
}
else {
smallest = log[i];
}
i++;
}
if(log[i].compareToIgnoreCase(smallest) <0) {
smallest = log[i];
}
return smallest;
}
テスターを実行すると、2 つのテストが失敗し、他の 2 つのテストは正常に進行します。前者は成功したテストの例で、後者は失敗したテストの例です。
public void test_3Elements_smallest_in_middle() {
strLog.insert("string 2"); strLog.insert("string 1");
strLog.insert("string 3");
assertEquals(strLog.smallest(), "string 1");
}
public void test_3Elements_smallest_at_beginning() {
strLog.insert("string 1"); strLog.insert("string 2");
strLog.insert("string 3");
assertEquals(strLog.smallest(), "string 1");
}
これを修正するために一体何ができるでしょうか?より具体的には、後者の失敗したものについては、string[2] を期待していたが string[1] であったというエラーが表示されます。これは私を混乱させます。配列の中央で最小のものを選択できる場合、最初に最小のものを選択できないのはなぜですか?