簡體   English   中英

Java冒泡排序ArrayList練習問題

[英]Java Bubble Sort ArrayList Exercise Issue

我有一個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());
    }
}

我一直在尋找不同的氣泡排序算法,但似乎沒有任何效果。 我認為我的問題一直與類名和冒泡排序算法有關。 我真的在敲我的頭。 如果有人能幫助我,我將不勝感激。

這只是毫無原因的復雜代碼。

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. 您似乎在某個時候將Books類從Video更改為Books ,但並未在所有地方進行更新。 注意舊的Video構造函數。 我在LibrarySort類中也看到對bookListvideoList混合引用。

  2. Library.main()的最后一行中,使用不帶參數的videoList.get() ,該參數無效。

  3. 您嘗試創建一個new SortAlgorithm()但是該類名為Sort

就算法而言:

您正在使用get()add()但從未將其從bookList中刪除。 最終列表中的項目比開始時要多。 您可能要使用remove()而不是get() remove()

另外,我還要避免for循環復雜化,並堅持使用標准int i = 0; i < bookList.size(); i++ int i = 0; i < bookList.size(); i++ 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
    }
}

您離解決方案不太遠,並且希望這看起來像是一項家庭作業,足以讓您到達那里。

這是我的操作方式:

書本類:

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算法起作用,我只是用谷歌搜索並從字面上復制了某人的實現,只更改了必須更改的位:它們的位用於對一個int數組進行排序。

這是指向該實現的頁面的鏈接:

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

不必擔心頁面頂部可能出現或可能不會出現的所有警告:我改編了下面的代碼,它工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM