2017-05-29 131 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); 
}