2013-05-21 29 views
0

這最終將允許用戶使用兩位數字來查找書籍。但是,只有輸入正確的號碼才能輸出標題。關於編寫重要信息的代碼的詳細信息...如何在一個類中組織多個數組?

基本上,您輸入一個數字(refNum)的程序總和正確匹配binarySearch數組的預定值...將輸出書名。

class books { 

     String refNum, title; 

     books (String _refNum, String _title) { 
      refNum = _refNum = enterNumberField.getText(); //grab inputted #(continues...) 

(續)與存儲在數組編號,以比較 時,#必須等於在#陣列的binarySearch其中如果相等,將 適當的標題並輸出。又名RENUM = 4(也的binarySearch [0])必須等於標題[0]以輸出「哈利波特」

  int refNum[] = new int[2]; 

      refNum[0] = 4; 
      refNum[1] = 6; 
      refNum[2] = 10; 

      int binarySearch[] = new int[2]; 

      binarySearch[0] = 4; 
      binarySearch[1] = 6; 
      binarySearch[2] = 10; 

      String title[] = new String[2]; 

      title[0] = "Harry Potter"; 
      title[1] = "Chrysalids"; 
      title[2] = "Lord of the Flies"; 
     } 
    } 

這將是二進制搜索,因爲它使用在輸入的號碼找到,如果它與相匹配任何東西,如果它輸出相應的標題。

public static Boolean binarySearch(String [ ] A, int left, int right, String V){ 
     int middle; 
     refNum ++; 
     if (left > right) { 
      return false; 
     } 

     middle = (left + right)/2; 
     int compare = V.compareTo(A[middle]); 
     if (compare == 0) { 
      return true; 
     } 
     if (compare < 0) { 
      return binarySearch(A, left, middle-1, V); 
     } else { 
      return binarySearch(A, middle + 1, right, V); 
     } 
    } 

最終我會添加它輸出該代碼,但首先我需要學習如何組織陣列中的類和實際的搜索,希望我在你明白我的目標的方式解釋這一點。 ..有任何想法?

+3

是否有一個SO類別**不可知問題**? – OldCurmudgeon

+0

您是否試圖搜索''''對象數組中的項目,按'refNum'排序? –

+0

是的,最終目標是搜索圖書的標題(也稱爲項目) – user2407152

回答

1

一般來說,你應該避免在一個類中使用這個相等的索引事物的幾個數組。這真是讓人通過本書的數組來完成:

public class Book { 
    private int refNum; 
    private String name; 

    public Book(int refNum, String name) { 
    this.refNum = refNum; 
    this.name = name; 
    } 

    public int getRefNum() { 
    return refNum; 
    } 

    public void setRefNum(int refNum) { 
    this.refNum = refNum; 
    } 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 
} 

// a comparator allows ordering to an arbitrary row 
public RefNumOrder implements Comparator<Book> { 
    public int compare(Book b1, Book b2) { 
    return b1.getRefNum() - b2.getRefNum(); 
    } 
} 

public class Books { 
    private List<Book> books = new ArrayList<Book>(); 
    public Books() { 
    books.add(new Book(..); 
    .. 
    } 
    public Book getByRefNum(int refNum) { 
    Collections.sort(books, new RefNumOrder()); 
    int index = Collections.binarySearch(book, new RefNumOrder()); 
    if (index >= 0) return books.get(index); 
    return null; 
    } 
} 

這樣,您就可以輕鬆地查找任何行,而不需要處理多個陣列。

+0

這太好了!但是,如果在公共類「Book」之外無法識別任何值(如refNum),我該如何訪問? – user2407152

+0

「Book」類已經實現了getRefNum()和setRefNum(..)方法。所以如果你不理解上面的代碼,那麼你可能需要閱讀更多關於Class和Access修飾符。 – Rupak

0

你知道,你可以使用一個Map並做查找。