使用while循环

时间:2016-02-07 23:57:04

标签: java

我正在实现一个简单的排序类,并且想知道如何使用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;
    }
}

3 个答案:

答案 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;
}}}