我正在实现一个简单的排序类,并想知道如何使用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变得更简单。 –