[英]Java Bubble Sort ArrayList Exercise Issue
我有一個Java項目,嘗試使用冒泡排序對圖書的ArrayList
進行排序。
我有三節課。
我無法使氣泡排序正常工作,因為我嘗試過的所有操作均返回錯誤或隨機字符/數字。 如果有人可以幫助我,我將不勝感激。
圖書
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());
}
}
}
}
希望能有所幫助
您在這里遇到幾個問題:
您似乎在某個時候將Books
類從Video
更改為Books
,但並未在所有地方進行更新。 注意舊的Video
構造函數。 我在Library
和Sort
類中也看到對bookList
和videoList
混合引用。
在Library.main()
的最后一行中,使用不帶參數的videoList.get()
,該參數無效。
您嘗試創建一個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.