我正在實現一個簡單的排序類,並想知道如何使用while循環而不是do-while循環來實現此操作。Java使用while循環轉換do-while循環
外部循環對「名稱」列表中的每個項目執行一次。但是,它是一個do-while循環,它總是至少執行一次。如果「名稱」是空列表,這將導致錯誤的結果。它應該被替換爲一個while循環。
Sort類
public class Sort {
public static ArrayList<Name> sort1(ArrayList<Name> names) {
ArrayList<Name> results;
results = new ArrayList<Name>();
int count = names.size();
do {
Name firstName = new Name("zzz", "zzz");
for (Name name : names) {
if (name.getFirstName().compareTo(firstName.getFirstName()) < 0
|| name.getFirstName().equals(firstName.getFirstName())
&& name.getSurName().compareTo(firstName.getSurName()) < 0) {
firstName = new Name(name.getFirstName(), name.getSurName());
}
}
results.add(firstName);
names.remove(firstName);
count--;
} while (count > 0);
return results;
}}}
名稱類
class Name {
String firstName;
String surName;
public Name() {
}
public Name(String firstName, String surName) {
this.firstName = firstName;
this.surName = surName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getSurName() {
return surName;
}
public void setSurName(String surName) {
this.surName = surName;
}
public String toString() {
return firstName + " " + surName;
}
public boolean equals(Object other) {
String fname = ((Name) other).firstName;
String sname = ((Name) other).surName;
if (firstName.equals(fname) && surName.equals(sname)) {
return true;
} else {
return false;
}
}
嗯?只需使用'while(count> 0)'?或者我誤解了你? – Ctx
for循環如何?對於(int count = names.size(); count> 0; count--){...} – Andreas
正如其他人所說的,只需用while循環(或for循環)替換do-while循環即可。另外,你應該閱讀你的Name類的[如何編寫正確的equals方法](http://www.javaranch.com/journal/2002/10/equalhash.html)。最後,爲你的Name類編寫一個'compareTo'方法是有意義的,這會讓你的排序方法中的for-loop變得更簡單。 –