2014-04-23 191 views
-1

所以我有一個項目,我必須從一個.txt文件讀取書籍參考號碼和書名到一個數組中,然後用戶輸入一個參考號碼,搜索該圖書與參考號,所以這裏是我,請記住,我不是很有經驗的Java將文件讀入一個數組Java

public class Book { 


ArrayList<String> books = new ArrayList<String>(); 
BufferedReader br = null; 

{ 
    try { 
     br = new BufferedReader(new FileReader("BookList.txt")); 
     String book; 
      while ((book = br.readLine()) != null) { 
       books.add(book); 
      } 
    } catch (IOException e){ 
    } finally { 
     try { 
      br.close(); 
     } catch (IOException ex) { 
     } 
    } 


    String [] bookList = new String[books.size()]; 
    books.toArray(bookList); 


    } 
} 

那就是文件讀入到一個數組列表,然後轉換陣列列表到一個數組 我不是100%確定如果這是正確的,所以如果有問題,我會很樂意採取你的解決方案。

我遇到的問題是,當我試圖建立一個方法,它允許用戶搜索

private void FindItActionPerformed(java.awt.event.ActionEvent evt) {          
    String input; 
    input = Input.getText(); 

    for(int i=0; i<bookList.length; i++){ 

    } 


    }  

我得到,說找不到符號書目一個錯誤,但林不知道爲什麼

感謝您的任何幫助或建議,您可能會提供

+0

變量的名稱是'books',而不是'bookList' – Raffaele

+1

他想使用'bookList'(字符串數組),而不是'books'(字符串列表)。他說得對,但他的問題是'bookList'超出了範圍。 – DRAX

回答

0

您的init代碼是在範圍內的括號內,您錯過了方法聲明的方式。

你不能到達bookList,因爲它不是類參數,而是在範圍內聲明。

將方法聲明(高於try)並在BufferedReader變量下添加bookList聲明,而不是在範圍中聲明它。

+1

該語法有效。這只是一個由每個構造函數執行的代碼塊。它仍然遵循通常的範圍規則,雖然... – vanza

+0

這是無效的,他指的是非靜態字段 - 「書」 – DRAX

+1

它不是一個靜態的初始化塊(請參閱前面的括號之前沒有「靜態」?)。這是完全有效的。試試看吧。 – vanza

0

你需要有書目提供給所有的你的方法

public class Book { 
    ArrayList<String> books = new ArrayList<String>(); 
    String[] bookList; 
    BufferedReader br = null; 
    // ... 

然後,你需要將其設置的東西。您當前的行books.toArray(bookList);使用bookList作爲toArray的參數來知道它正在生成什麼樣的數組,那麼它將返回該類型的數組。所以,你需要做的

this.bookList = books.toArray(bookList); 
0

您的代碼應該是這樣的:

public class Book { 

ArrayList<String> books = new ArrayList<String>(); 
BufferedReader br = null; 
String[] bookList; //difference (bookList is now visible to all methods in class) 
{ 
    try { 
     br = new BufferedReader(new FileReader("BookList.txt")); 
     String book; 
      while ((book = br.readLine()) != null) { 
       books.add(book); 
      } 
    } catch (IOException e){ 
    } finally { 
     try { 
      br.close(); 
     } catch (IOException ex) { 
     } 
    } 
    bookList = new String[books.size()]; //difference 
    books.toArray(bookList); 
    } 
} 

private void FindItActionPerformed(java.awt.event.ActionEvent evt){ 
    String input; 
    input = Input.getText(); 

    for(int i=0; i<bookList.length; i++){ 
     //do something... 
    } 
}  

問題在你的代碼是你試圖用變量bookList這是在定義的不同範圍。

+1

他是*不*使用靜態初始化;它就在那裏,在[教程](http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html),「初始化實例成員」開頭。 – vanza

+0

謝謝,我已更正。我監督代碼。 – DRAX