Java Bubble Sort ArrayList练习题

时间:2014-06-18 20:32:34

标签: java arraylist bubble-sort

我有一个java项目,我尝试使用冒泡排序按评级对ArrayList本书进行排序。

我有三节课。

  1. 图书
  2. 排序
  3. 我无法让冒泡排序起作用,因为我尝试的所有内容都会返回错误或随机字符/数字。如果有人能帮助我,我会非常感激。

    图书

    public class Books {
    
        String title;
        int rating;
    
        public Video(String pTitle, int pRating) {
            title = pTitle;
            rating = pRating;
        }
    
        public String getTitle() {
            return title;
        }
    
        public int getRating() {
            return rating;
        }
    }
    

    import java.util.ArrayList;
    public class Library {
        public static void main (String [] args) {
    
            ArrayList<Book> bookList = new ArrayList<Books>();
    
            Book book1 = new Book ("ThisBook 5", 5);
            Book book2 = new Book ("ThisBook 2", 2);
            Book book3 = new Book ("ThisBook 3", 3);
            Book book4 = new Book ("ThisBook 4", 4);
            Book book5 = new Book ("ThisBook 1", 1);
    
            bookList.add(book1);
            bookList.add(book2);
            bookList.add(book3);
            bookList.add(book4);
            bookList.add(book5);
    
            System.out.println("Original sequence");
    
            for (int cnt = 0; cnt < bookList.size(); cnt++)
            {
                System.out.println(bookList.get(cnt).getTitle() + "   " + bookList.get(cnt).getRating());
            }
    
            System.out.println( "\r" + "Sorted By Rating");
    
            SortAlgorithm sortObject = new SortAlgorithm();
            sortObject.calc(bookList);
    
            System.out.println(bookList.get().getTitle() + "   " + bookList.get().getRating());
        }
    }
    

    我一直在寻找不同的冒泡排序算法,但似乎没有任何效果。我认为我的问题一直是类名和冒泡排序算法。我真的在这里敲我的头。如果有人能帮助我,我真的很感激。

3 个答案:

答案 0 :(得分:0)

这只是无缘无故的复杂代码..

public class Sort {
public static void calc(ArrayList<Book> bookList) {
    for (i = 0 ; i < bookList.size() ; i++) {
        for (j = i+1; j < bookList.size() ; j++) {
            if (bookList.get(i).getRating() > bookList.get(j).getRating()) {
                Collections.swap(bookList, i, j);
            }
            System.out.println(bookList.get(out).getTitle() + "   " + bookList.get(out).getRating());
        }
    }
}
}

希望有所帮助

答案 1 :(得分:0)

这里有几个问题:

  1. 您似乎已经将Books课程从Video更改为Books,但您并未在任何地方对其进行更新。注意旧的Video构造函数。我在bookListvideoList类中看到LibrarySort的混合引用。

  2. Library.main()的最后一行,您使用videoList.get()而没有参数,该参数无效。

  3. 您尝试创建new SortAlgorithm(),但该类名为Sort

  4. 算法如下:

    您正在使用get()add(),但您永远不会从bookList中删除。在最终列表中,您最终会得到比您开始时更多的项目。您可以使用get()而不是remove()

    另外,我避免使for循环复杂化并坚持使用标准int i = 0; i < bookList.size(); i++设置。

    for (int i = 0; i < bookList.size(); i++) {
        for (int j = 0; j < bookList.size() - 1; j++) {
    
            // get the books you want to compare (remove them from the list)
    
            // insert them back into the list in the correct order
        }
    }
    

    你离解决方案并不太远,并且看到这似乎是家庭作业,希望能够让你到达那里。

答案 2 :(得分:0)

我是这样做的:

图书课程:

package bubbleSorter;

public class Book {

    String title;
    int rating;

    public Book(String pTitle, int pRating) {
        title = pTitle;
        rating = pRating;
    }

    public String getTitle() {
        return title;
    }

    public int getRating() {
        return rating;
    }

}

图书馆班:

package bubbleSorter;

import java.util.ArrayList;

public class Library {

    public static void main (String [] args) {

        ArrayList<Book> bookList = new ArrayList<Book>();

        Book book1 = new Book ("ThisBook 5", 5);
        Book book2 = new Book ("ThisBook 2", 2);
        Book book3 = new Book ("ThisBook 3", 3);
        Book book4 = new Book ("ThisBook 4", 4);
        Book book5 = new Book ("ThisBook 1", 1);

        bookList.add(book1);
        bookList.add(book2);
        bookList.add(book3);
        bookList.add(book4);
        bookList.add(book5);

        System.out.println("Original sequence");
        System.out.println();

        for (int cnt = 0; cnt < bookList.size(); cnt++)
        {
            System.out.println(bookList.get(cnt).getTitle() + "   " + bookList.get(cnt).getRating());
        }

        System.out.println( "\r" + "Sorted By Rating");
        System.out.println();

        LibraryHandler libraryHandler = new LibraryHandler();
        libraryHandler.bubbleSort(bookList);

        for (int cnt = 0; cnt < bookList.size(); cnt++)
        {
            System.out.println(bookList.get(cnt).getTitle() + "   " + bookList.get(cnt).getRating());
        }

    }

}

LibraryHandler类:

package bubbleSorter;

import java.util.ArrayList;

public class LibraryHandler {

    public void bubbleSort(ArrayList<Book> bookList) {

        Book temp = new Book("ThisBook 0", 0);
        int n = bookList.size();

        for (int i =0;i<n;i++) {
            for (int j = 1; j < n-i; j++) {
                if (bookList.get(j-1).getRating() > bookList.get(j).getRating()) {
                    // swap them
                    temp = bookList.get(j-1);
                    bookList.set(j-1, bookList.get(j));
                    bookList.set(j, temp);
                }

            }
        }
    }
}

非常有趣!

这里可以改进类的名称。库是主类,因此您可能只想将其称为Main。正如我在评论中所说,我认为惯例是使用名词作为类名和动词作为方法名称,所以我建议你坚持这一点。

为了让bubbleSort算法正常工作,我只是用Google搜索并直接复制某人的实现,只更改了必须更改的位:他们用于排序一组int。

以下是指向该实施页面的链接:

http://www.java-examples.com/java-bubble-sort-example

不要担心该页面顶部可能出现或未出现的所有警告:下面的代码是我改编的,它运行良好。