Java 向ArrayList中添加值
我正在创建一个程序,用于对文件读入的名称列表进行排序。我遇到的问题是,老师希望我们打开一个文件并将所有值(每行都是一个值)添加到ArrayList中。将文件中的所有值添加到ArrayList中是很容易的,但是教师要求它的类型为Name,这是包中的一个单独的类。我需要在我的名字类中包含什么才能使以下代码正常工作-Java 向ArrayList中添加值,java,Java,我正在创建一个程序,用于对文件读入的名称列表进行排序。我遇到的问题是,老师希望我们打开一个文件并将所有值(每行都是一个值)添加到ArrayList中。将文件中的所有值添加到ArrayList中是很容易的,但是教师要求它的类型为Name,这是包中的一个单独的类。我需要在我的名字类中包含什么才能使以下代码正常工作- String line = null; ArrayList<Name> nameAL = new ArrayList<>(); try {
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;
}
字符串行=null;
ArrayList name=新的ArrayList();
试一试{
文件读取器文件读取器=
新文件阅读器(文件名);
BufferedReader BufferedReader=
新的BufferedReader(文件阅读器);
而((line=bufferedReader.readLine())!=null){
名称.添加(行);
}
bufferedReader.close();
如果(nameAL.size()ArrayList
表示列表应包含Name的实例。您需要在Name类中接受一个字符串参数,并将其实例化存储在ArrayList中。查看Name类的构造函数。然后修复此行:
nameAL.add(line);
进入
您应该将您的行作为名称实例添加到ArrayList nameAL
我不确定是否正确理解了您的问题。名称类类似于
public Class Name{
private String name;
public Name(String name){
this.name = name;
}
...getters and setters....
}
当添加新行(我假设是一个名称)时
基本上,当您这样做时:
readLine()您将获得一个字符串值
您需要将该字符串值转换为名称类
您只需使用名称构造函数创建一个新的名称实例,该构造函数将读取字符串值,如下所示:
while((line = bufferedReader.readLine()) != null) {
nameAL.add(new Name(line));
}
while((line = bufferedReader.readLine()) != null) {
nameAL.add(new Name(line)); // this called anonymous Object of class
}
在当前包中创建名称类,如下所示
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);
}
假设您有这样一个类名称(例如):
现在,您可以通过为每一行创建一个新的Name
的对象来添加每次读取的行,如下所示:
while((line = bufferedReader.readLine()) != null) {
nameAL.add(new Name(line));
}
while((line = bufferedReader.readLine()) != null) {
nameAL.add(new Name(line)); // this called anonymous Object of class
}
然后您可以像这样从ArrayList
读回这些行(例如):
你能更具体地回答你的问题吗?听起来你需要导入你的Name
类。import package.path.to.Name
位于你想要使用它的文件顶部。导入是不必要的,因为它在同一个包中,我从Name.add(line)行中得到的错误是字符串“line”无法转换为名称您无法将行添加到名称
类型的数组列表
,而是需要在读取文件时为每行动态创建一个名称
对象,并使用setter方法(应在Name类中)将行添加到名称
类中的字符串字段(假设您已经有了它)您需要调用类的构造函数Name
…示例:nameAll(新名称(行));
…这里,我假设您的Name类有一个签名如下的构造函数:public Name(字符串值)
while((line = bufferedReader.readLine()) != null) {
nameAL.add(new Name(line)); // this called anonymous Object of class
}
for(Name name : nameAL){
System.out.println(name.getName);
}