我正在实现一个简单的排序类,并且想知道如何使用while循环而不是do-while循环来实现它。
外部循环对“名称”列表中的每个项目执行一次。但是,它是一个do-while循环,总是至少执行一次。如果'names'是空列表,这将导致不正确的结果。它应该用while循环替换。
排序
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;
}}}
NAME CLASS
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;
}
}
答案 0 :(得分:2)
只需将do
替换为您的while (count > 0)
即可。
答案 1 :(得分:0)
由于while循环总是执行一次,我会在循环之前进行检查,看看名称中是否有值。如果是,则执行do / while循环。否则,跳过它。
答案 2 :(得分:0)
public class Sort {
private static void doIterate(List<Name> names, List<Name> results) {
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);
}
public static ArrayList<Name> sort1(ArrayList<Name> names) {
ArrayList<Name> results;
results = new ArrayList<Name>();
int count = names.size();
doIterate(names, results);
count--;
while (count > 0) {
doIterate(names, results);
count--;
}
return results;
}}}