2014-07-25 69 views
-2

我開發了一個程序,它可以創建一個書本對象數組並根據用戶輸入進行排序。排序選項是author-title-pages-price,所有的工作只是價格排序。請幫我找到我的地方應用程序掛起......(我點擊按價格排序按鈕,然後什麼也不顯示...)使用比較程序排序雙打

我SchoolTextBook類:

import java.util.Comparator; 


public class SchoolTextBook { 

private String author; 
private String title; 
private int pageCount; 
private String ISBN; 
private double price; 

public String getAuthor() { 
    return author; 
    } 
public void setAuthor(String author) { 
    this.author = author; 
    } 

public String getTitle() { 
    return title; 
    } 
public void setTitle(String title) { 
    this.title = title; 
    } 

public int getPageCount() { 
    return pageCount; 
} 
public void setPageCount(int pageCount) { 
    this.pageCount = pageCount; 
} 

public String getISBN() { 
    return ISBN; 
} 
public void setISBN(String iSBN) { 
    ISBN = iSBN; 
} 

public double getPrice() { 
    return price; 
} 
public void setPrice(double price) { 
    this.price = price; 
} 


public static Comparator<SchoolTextBook> BookPriceComparator 
        = new Comparator<SchoolTextBook>() { 

    public int compare(SchoolTextBook book1, SchoolTextBook book2) { 

     double price1 = book1.getPrice(); 
     double price2 = book2.getPrice(); 
     //ascending order 
     return Double.compare(price1, price2); 

    } 

}; 
} 

而且我SchoolTextBookSort類:

import java.util.Arrays; 
import java.util.*; 

import javax.swing.*; 

public class SchoolTextBookSort { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    String[] choices = {"Author", "Title", "Page Count", "Price"}; 

    SchoolTextBook[] theBooks = new SchoolTextBook[5]; 

    theBooks[0] = new SchoolTextBook(); 
    theBooks[1] = new SchoolTextBook(); 
    theBooks[2] = new SchoolTextBook(); 
    theBooks[3] = new SchoolTextBook(); 
    theBooks[4] = new SchoolTextBook(); 

    theBooks[0].setAuthor("Ernest Hemingway"); 
    theBooks[1].setAuthor("Mark Twain"); 
    theBooks[2].setAuthor("William Shakespeare"); 
    theBooks[3].setAuthor("Stephen King"); 
    theBooks[4].setAuthor("William Faulkner"); 

    theBooks[0].setTitle("A Farewell to Arms"); 
    theBooks[1].setTitle("The Adventures of Huckleberry Finn"); 
    theBooks[2].setTitle("Hamlet"); 
    theBooks[3].setTitle("Salem's Lot"); 
    theBooks[4].setTitle("The Sound and the Fury"); 

    theBooks[0].setPageCount(332); 
    theBooks[1].setPageCount(320); 
    theBooks[2].setPageCount(196); 
    theBooks[3].setPageCount(439); 
    theBooks[4].setPageCount(326); 

    theBooks[0].setISBN("0099910101"); 
    theBooks[1].setISBN("0142437174"); 
    theBooks[2].setISBN("0521618746"); 
    theBooks[3].setISBN("0450031063"); 
    theBooks[4].setISBN("0679732241"); 

    theBooks[0].setPrice(5.99); 
    theBooks[1].setPrice(7.60); 
    theBooks[2].setPrice(9.41); 
    theBooks[3].setPrice(16.56); 
    theBooks[4].setPrice(9.60); 


    int response = JOptionPane.showOptionDialog(
      null          // Center in window. 
      , "Please select a method to sort the books." // Message 
      , "Sort Text Books"       // Title in titlebar 
      , JOptionPane.YES_NO_OPTION     // Option type 
      , JOptionPane.PLAIN_MESSAGE     // messageType 
      , null          // Icon (none) 
      , choices          // Button text as above. 
      , null          // Default button's label 
     ); 

    //... Use a switch statement to check which button was clicked. 
    switch (response) { 
    case 0: 
     Arrays.sort(theBooks, SchoolTextBook.BookAuthorComparator); 
     break; 
    case 1: 
     Arrays.sort(theBooks, SchoolTextBook.BookTitleComparator); 
     break; 
    case 2: 
     Arrays.sort(theBooks, SchoolTextBook.BookPagesComparator); 
     break; 
    case 3: 
     Arrays.sort(theBooks, SchoolTextBook.BookPriceComparator); 
    case -1: 
     //... Both the quit button (3) and the close box(-1) handled here. 
     System.exit(0);  // It would be better to exit loop, but... 
    default: 
     //... If we get here, something is wrong. Defensive programming. 
     JOptionPane.showMessageDialog(null, "Unexpected response " + response); 
    } 

    show(theBooks); 


} 

public static String show(SchoolTextBook[] theBooks) { 
    StringBuilder sb = new StringBuilder(64); 
    sb.append("<html><table><tr><td>Author</td><td>Title</td><td>ISBN</td><td>Pages</td><td>Price</td></tr>"); 
    sb.append("<tr>"); 
    sb.append("<td>").append(theBooks[0].getAuthor()).append("</td>"); 
    sb.append("<td>").append(theBooks[0].getTitle()).append("</td>"); 
    sb.append("<td>").append(theBooks[0].getISBN()).append("</td>"); 
    sb.append("<td>").append(theBooks[0].getPageCount()).append("</td>"); 
    sb.append("<td>").append("$" + theBooks[0].getPrice()).append("</td></tr>"); 
    sb.append("<tr>"); 
    sb.append("<td>").append(theBooks[1].getAuthor()).append("</td>"); 
    sb.append("<td>").append(theBooks[1].getTitle()).append("</td>"); 
    sb.append("<td>").append(theBooks[1].getISBN()).append("</td>"); 
    sb.append("<td>").append(theBooks[1].getPageCount()).append("</td>"); 
    sb.append("<td>").append("$" + theBooks[1].getPrice()).append("</td></tr>"); 
    sb.append("<tr>"); 
    sb.append("<td>").append(theBooks[2].getAuthor()).append("</td>"); 
    sb.append("<td>").append(theBooks[2].getTitle()).append("</td>"); 
    sb.append("<td>").append(theBooks[2].getISBN()).append("</td>"); 
    sb.append("<td>").append(theBooks[2].getPageCount()).append("</td>"); 
    sb.append("<td>").append("$" + theBooks[2].getPrice()).append("</td></tr>"); 
    sb.append("<tr>"); 
    sb.append("<td>").append(theBooks[3].getAuthor()).append("</td>"); 
    sb.append("<td>").append(theBooks[3].getTitle()).append("</td>"); 
    sb.append("<td>").append(theBooks[3].getISBN()).append("</td>"); 
    sb.append("<td>").append(theBooks[3].getPageCount()).append("</td>"); 
    sb.append("<td>").append("$" + theBooks[3].getPrice()).append("</td></tr>"); 
    sb.append("<tr>"); 
    sb.append("<td>").append(theBooks[4].getAuthor()).append("</td>"); 
    sb.append("<td>").append(theBooks[4].getTitle()).append("</td>"); 
    sb.append("<td>").append(theBooks[4].getISBN()).append("</td>"); 
    sb.append("<td>").append(theBooks[4].getPageCount()).append("</td>"); 
    sb.append("<td>").append("$" + theBooks[4].getPrice()).append("</td>"); 
    sb.append("</tr></table></html>"); 
    JOptionPane.showMessageDialog(null, sb); 
    return sb.toString(); 
} 

} 
+0

我認爲這個問題可能存在於我的switch語句處理程序中 – midrigs

+0

case 3沒有'break':'。 – rgettman

+1

重複的http://stackoverflow.com/questions/24959250/comparator-double-does-not-work – resueman

回答

0

我發現,問題在於這個代碼在這裏:

case -1: 
    //... Both the quit button (3) and the close box(-1) handled here. 
    System.exit(0);  // It would be better to exit loop, but... 
default: 
    //... If we get here, something is wrong. Defensive programming. 
    JOptionPane.showMessageDialog(null, "Unexpected response " + response); 
} 

不知道究竟是什麼,但這是懸掛應用程序的東西。

1

您需要break語句添加到您的一些case條件:

switch (response) { 
case 0: 
    Arrays.sort(theBooks, SchoolTextBook.BookAuthorComparator); 
    break; 
case 1: 
    Arrays.sort(theBooks, SchoolTextBook.BookTitleComparator); 
    break; 
case 2: 
    Arrays.sort(theBooks, SchoolTextBook.BookPagesComparator); 
    break; 
case 3: 
    Arrays.sort(theBooks, SchoolTextBook.BookPriceComparator); 
    break; // <---- Add this 
case -1: 
    //... Both the quit button (3) and the close box(-1) handled here. 
    System.exit(0);  // It would be better to exit loop, but... 
    break; // <---- Add this 
default: 
    //... If we get here, something is wrong. Defensive programming. 
    JOptionPane.showMessageDialog(null, "Unexpected response " + response); 
    break; // <---- Add this 
} 

如果沒有break語句的程序將繼續,並評估,如果他們真的比它低的所有情況。換句話說,如果情況3是真的,它會做這種事情,然後它會轉向情況-1中發生的事情,並且看起來是真的,這會導致系統退出。

+0

+1用於說明休息是如何工作的。 –