Java气泡排序ArrayList练习问题

Java气泡排序ArrayList练习问题,java,arraylist,bubble-sort,Java,Arraylist,Bubble Sort,我有一个java项目,我正在尝试使用bubble sort对书籍的ArrayList进行分级排序 我有三节课 书 图书馆 分类 我很难让冒泡排序正常工作,因为我尝试过的任何东西要么返回错误,要么返回随机字符/数字。如果有人能在这方面帮助我,我将不胜感激 书 图书馆 import java.util.ArrayList; public class Library { public static void main (String [] args) { ArrayList&

我有一个java项目,我正在尝试使用bubble sort对书籍的
ArrayList
进行分级排序

我有三节课

  • 图书馆
  • 分类
  • 我很难让冒泡排序正常工作,因为我尝试过的任何东西要么返回错误,要么返回随机字符/数字。如果有人能在这方面帮助我,我将不胜感激

    图书馆

    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());
        }
    }
    
    import java.util.ArrayList;
    公共班级图书馆{
    公共静态void main(字符串[]args){
    ArrayList bookList=新建ArrayList();
    Book book1=新书(“本书5”,5);
    Book book2=新书(“本书2”,2);
    Book book3=新书(“本书3”,3);
    第四册=新书(“第四册”,第四册);
    Book Book 5=新书(“本书1”,1);
    图书目录。添加(第1册);
    增加(第2册);
    增加(第3册);
    增加(第4册);
    增加(第5册);
    System.out.println(“原始序列”);
    对于(int cnt=0;cnt

    我一直在寻找不同的冒泡排序算法,但似乎没有任何效果。我想我的问题是类名和冒泡排序算法。我在这儿真是头痛。如果有人能帮助我,我将非常感激。

    这只是一个复杂的代码,没有任何理由

    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());
            }
        }
    }
    }
    
    公共类排序{
    公共静态无效计算(ArrayList书目){
    对于(i=0;ibookList.get(j).getRating()){
    集合交换(图书清单,i,j);
    }
    System.out.println(bookList.get(out.getTitle()+“”+bookList.get(out.getRating());
    }
    }
    }
    }
    

    希望这有帮助

    您在这里遇到了几个问题:

  • 您似乎在某个时候将
    Books
    类从
    Video
    更改为
    Books
    ,但并没有在任何地方进行更新。请注意旧的
    Video
    构造函数。我在
    排序
    类中看到对
    图书列表
    视频列表
    的混合引用

  • Library.main()
    的最后一行中,您使用的
    videoList.get()
    没有参数,这是无效的

  • 您试图创建一个
    新的SortAlgorithm()
    ,但该类名为
    Sort

  • 就算法而言:

    您使用的是
    get()
    add()
    ,但从未从图书列表中删除。最终列表中的项目将比开始时多。您可能希望使用
    remove()
    ,而不是
    get()

    此外,我会避免使for循环复杂化,并坚持使用标准的
    inti=0;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
        }
    }
    
    for(int i=0;i
    您离解决方案不远,看到这似乎是一个家庭作业,希望这足以让您达到目的。

    以下是我的做法:

    图书类别:

    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());
            }
    
        }
    
    }
    
    packagebubblesorter;
    导入java.util.ArrayList;
    公共班级图书馆{
    公共静态void main(字符串[]args){
    ArrayList bookList=新建ArrayList();
    Book book1=新书(“本书5”,5);
    Book book2=新书(“本书2”,2);
    Book book3=新书(“本书3”,3);
    第四册=新书(“第四册”,第四册);
    Book Book 5=新书(“本书1”,1);
    图书目录。添加(第1册);
    增加(第2册);
    增加(第3册);
    增加(第4册);
    增加(第5册);
    System.out.println(“原始序列”);
    System.out.println();
    对于(int cnt=0;cnt
    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);
                    }
    
                }
            }
        }
    }
    
    packagebubblesorter;
    导入java.util.ArrayList;
    公共类LibraryHandler{
    public void bubbleSort(ArrayList书目){
    书本温度=新书(“本书0”,0);
    int n=bookList.size();
    对于(int i=0;i bookList.get(j).getRating()){
    //交换
    temp=图书列表。get(j-1);
    bookList.set(j-1,bookList.get(j));
    书单。设置(j,temp);
    }
    }
    }
    }
    }
    
    那太有趣了

    这里可以改进类的名称。Library是主类,所以您可能只想将其称为main。正如我在评论中所说的,我认为惯例是使用名词作为类名,使用动词作为方法名,所以我建议您坚持这样做

    为了让bubbleSort算法工作起来,我只是在谷歌上搜索了一下,然后从字面上复制了某人的实现,只改变了需要改变的部分:即
    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);
                    }
    
                }
            }
        }
    }