2017-05-29 163 views
0

我正在創建一個程序,用於對由文件讀入的名稱列表進行排序。我遇到的問題是,教師希望我們打開一個文件並將所有值(每行都是一個值)添加到ArrayList中。將文件中的所有值添加到ArrayList中很容易,但是老師要求它是Name類型,它是包中的一個單獨的類。我需要什麼,有我的名字的類,允許下面的代碼與工作將值添加到ArrayList中

String line = null; 
    ArrayList<Name> nameAL = new ArrayList<>(); 
    try { 
     FileReader fileReader = 
      new FileReader(fileName); 

     BufferedReader bufferedReader = 
      new BufferedReader(fileReader); 

     while((line = bufferedReader.readLine()) != null) { 
      nameAL.add(line); 
     } 
     bufferedReader.close(); 
     if (nameAL.size() <= 0) 
     { 
      JOptionPane.showMessageDialog(null, "File invalid", "Input Error", 
       JOptionPane.ERROR_MESSAGE); 
      System.out.println("File must have at least one element"); 
     }    

    } 
    catch(FileNotFoundException ex) { 
     System.out.println(
      "Unable to open file '" + 
      fileName + "'");     
    } 
    catch(IOException ex) { 
     System.out.println(
      "Error reading file, must have at least one element '" 
      + fileName + "'");     
    } 
    return nameAL; 
} 
+2

你可以在你的問題更具體? –

+0

這聽起來像你需要導入你的'Name'類。 'import package.path.to.Name'在你想要使用它的文件的頂部。 – Chris

+0

導入不是必需的,因爲它在同一個包中,我從線路名AL.add(line)得到的錯誤是字符串「line」無法轉換爲名稱 – pali

回答

0

我不確定是否正確理解您的問題。一個名稱類看起來像

public Class Name{ 
    private String name; 

    public Name(String name){ 
     this.name = name; 
    } 

    ...getters and setters.... 
} 

當添加一個新行(我以爲是出了名)然後

nameAL.add(new Name(line)); 
0

ArrayList<Name>意味着列表應包含名稱的實例。您需要接受名稱類中的字符串參數,並將其實例存儲在ArrayList中。

0

查看Name類的構造函數。然後修復這一行:

nameAL.add(line); 

nameAL.add(new Name(...)); 

您應該添加您的線作爲名稱的實例爲ArrayList<Name> nameAL

0

基本上,當你這樣做: bufferedReader.readLine()你是獲得一個字符串值。

您需要將該String值轉換爲Name類。

所有你需要做的就是創建一個使用名稱構造器將讀取字符串值,這樣一個新的名稱如:

while((line = bufferedReader.readLine()) != null) { 
    nameAL.add(new Name(line)); 
} 
0

在當前包創建名稱類,如下。

class Name{ 
private String name; 

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

public String getName(){ 
    return name; 
} 
} 

,並更改循環

while((line = bufferedReader.readLine()) != null) { 
     Name name = new Name(); 
     name.setName(line); 
     nameAL.add(name); 
    } 
0

假設你有一個類Name像這樣(例如)下面的代碼:

public class Name { 
    String name; // this field to contain the name 

    // the constructor 
    public Name(String name){ 
     this.name = name; 
    } 

    // a getter and a setter 
    public String getName() { 
     return name; 
    } 

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

} 

現在你可以添加行每次通過爲每一行創建一個新的ObjectName讀取,如下所示:

while((line = bufferedReader.readLine()) != null) { 
    nameAL.add(new Name(line)); // this called anonymous Object of class 
} 

然後你就可以讀線從ArrayList回像這樣(例如):

for(Name name : nameAL){ 
    System.out.println(name.getName); 
}