注意:我编辑了我的代码,我认为人们试图告诉我,但它仍然没有给我我想要的输出。现在我的输出是“examples.search.Person@55acc1c2”,但很多时候我输入新的名字和姓氏。至少它正在通过代码完成崩溃lol
我正在学习如何使用ArrayLists并需要加载一个包含我创建的Object实例的Array列表。我知道如何使用数组执行此操作但是对于此赋值我需要使用ArrayList执行此操作。这是我需要做的一个例子。
// my "main" class
package examples.search;
import java.util.ArrayList;
import dmit104.Util;
public class MyPeople {
public static void main(String[] args) {
ArrayList<Person> people = new ArrayList<Person>();
Person tempPerson = new Person();
String firstName;
String lastName;
char choice = 'y';
int count = 1;
// fill my ArrayList
do {
people.add(tempPerson);
// I have a Util class that has a prompt method in it
firstName = Util.prompt("Enter First Name: ");
lastName = Util.prompt("Enter Last Name: ");
tempPerson.setFirstName(firstName);
tempPerson.setLastName(lastName);
count++;
choice = Util.prompt(
"Enter another person? [y or n]: ")
.toLowerCase().charAt(0);
} while (choice == 'y');
// display my list of people
for(int i = 0; i < people.size(); i += 1) {
System.out.print(people.get(i));
}
}
}
// my Person class which I am trying to build from
public class Person {
// instance variables
private String firstName;
private String lastName;
// default constructor
public Person() {
}
public String getFirstName(){
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
我已经尝试了很多方法,但无论我的ArrayList没有填满。就像我提到的,我可以做到没有数组的问题,或者即使我有一个加载的构造函数方法,但我没有。在我的实际作业中,我应该用set方法来做。
我到处寻找,找不到我的问题的解决方案,周五我的导师不在。
非常感谢你提前
利奥
答案 0 :(得分:2)
您必须创建Person
,然后add
创建ArrayList
。
for (int i = 0; i < count; i++) {
Person person = new Person();
person.setFirstName("Foo");
person.setLastName("Bar");
people.add(person);
}
答案 1 :(得分:1)
它崩溃了,因为你的行people.get(i).setFirstName(firstName);
首先尝试的是索引i,但你还没有设置任何东西。
首先将people [i]设置为空Person,或者使用firstName和lastName创建一个人,然后将其添加到使用people.add(person);
的人
答案 2 :(得分:0)
您有ArrayList<Person>
,但仅此一项仅定义了潜在Person
个实例的列表。但到目前为止,每个列表条目都是null
。 get(i)
返回null
,以下null.setFirstName(..)
会导致NullPointerException。
因此,您需要创建应该进入列表的Person
实例:
firstName = Util.prompt("Enter First Name: ");
Person p = new Person(); //create the instance
people.add(p); //add the instance to the list
p.setFirstName("..."); //set any values
答案 3 :(得分:0)
现在您将Person对象存储到ArrayList中并打印该Object。 要在打印Person对象时打印firstname和lastName,您必须覆盖toString方法。 在Person类
中添加以下代码public String toString(){
return String.format("[Personn: firstName:%s ,lastName: %s]", firstName,lastName);
}
答案 4 :(得分:0)
至于您遇到的第二个问题,您必须覆盖toString()
类中的Person
方法。您获得的输出(例如examples.search.Person@55acc1c2
)是toString()
类中的默认Object
方法,其定义为class@hashCode