繁体   English   中英

For循环仅执行一次?

[英]For-loop is executed only once?

我正在为大学实施Insertionsort。 我的代码在理论上是有效的,但是我的for循环仅执行一次,而不是books.size()(我已经测试了5)。 我使用数字5进行了尝试,但它无法正常工作,我有点拼命,因为我似乎找不到错误。

这是我的代码:

    static void sort(LinkedList<Book> books)
    {
        int i;
        for ( i = 0; i < books.size(); i++)
        {
            Book temp = books.get(i);
            books.remove(i);
            for (int j = 0; j < books.size(); j++) {
                if (books.get(j).compareTo(temp) > 0) {
                    books.add(j, temp);
                    return;
                }
            }
            books.add(temp);
        }
    }

Book-Class的compareTo函数如下所示:

public int compareTo(Book other)
{
    int iAutor = autor.compareTo(other.getAutor());

    if (iAutor != 0)
        return iAutor;
    else
    {
        int iTitel = titel.compareTo(other.getTitel());

        if (iTitel != 0)
            return iTitel;
        else
        {
            if (this.auflage < other.getAuflage())
                return -1;
            else if (this.auflage > other.getAuflage())
                return 1;
            else
                return 0;
        }
    }
}

我只是瞎了吗?

您需要将return换成break并修正逻辑以避免两次添加该书。 可能有比这更优雅的方法,但是它应该可以工作:

    int i;
    for ( i = 0; i < books.size(); i++)
    {
        Book temp = books.get(i);
        books.remove(i);
        bool added = false;
        for (int j = 0; j < books.size(); j++) {
            if (books.get(j).compareTo(temp) > 0) {
                books.add(j, temp);
                added = true;
                break;
            }
        }
        if (!added) {
            books.add(temp);
        }
    }

好吧,我发现了解决问题的方法,即使有人遇到同样的问题(不要以为会发生,但我希望这是一个好习惯)。

正如@Klitos Kyriacou正确指出的那样,我对插入排序过程的想法有所不同。

解决方案是更改以下循环:

     static void sort(LinkedList<Book> books) {

    Book temp;
    for (int counter = 0; counter < books.size(); counter++) {
        temp = books.get(counter);

        for (int position = 0; position < counter; position++)
        {
            if (temp.compareTo(books.get(position)) < 0)
            {
                books.remove(counter);
                books.add(position, temp);
                break;
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM