我试图在ArrayList
中使用对象的toString()
方法,它正在打印内存地址而不是预期的值。我把我的课翻译成了英语,如果我忘记了什么,抱歉,如果你不明白就问吧。
调度类(I抑制getter和setter):
static Professor professor;
static Room room;
static Classroom classroom;
public String toString() {
return "Schedule [getProfessor()=" + getProfessor() + ", getRoom()="
+ getRoom() + ", getClassRoom()=" + getClassRoom() + ", getClass()=" + getClass() + ", hashCode()="
+ hashCode() + ", toString()=" + super.toString() + "]";
}
学校ArrayList<Professor> professor = new ArrayList<Professor>();
ArrayList<Room> room = new ArrayList<Room>();
ArrayList<Classroom> classroom = new ArrayList<Classroom>();
public ArrayList<Schedule[][]> sched = new ArrayList<Schedule[][]>();
我正在使用遗传算法(目前我正在学习它,所以,我不知道很多),这是我的"人口生成器":
人口public static void generatePopulation(School school){
// Shuffle the arraylist for generate a random population
Collections.shuffle(school.getProfessor());
Collections.shuffle(school.getClassroom());
Collections.shuffle(school.getRoom());
Schedule[][] sched1 = new Schedule[1][1];
// Generate population (just a little test to see if it works)
sched1[0][0].addEverything(school.getProfessor().get(0), school.getClassroom().get(0), school.getRoom().get(0));
school.sched.add(sched);
主要 (... school and associations created ...)
Population.generatePopulation(school);
System.out.println(school.getSched().isEmpty()); // it returns false, that is, isn't empty
System.out.println(school.getSched().get(0).toString());
// returns "[[Lentidades.Schedule;@40914272" (entidades = name of my package)
那么,为什么我接收内存位置而不是期望值?我想我没有忘记什么,但是如果你在这段代码中看到一些奇怪的东西,只要发送一个问题,我会解释/粘贴剩下的代码。
您收到的是Schedule
s的array
,因此您的toString()
方法从未使用过。
查看[[Lentidades.Schedule;@40914272
输出的[[
部分,这告诉您正在打印二维array
。
正如@JonSkeet和@MarounMaroun指出的那样,打印arrays
的一种简单方法是将Arrays.toString()
用于一维arrays
,或将Arrays.deepToString()
用于多维。