我有一个程序类和一个学生类,学生构造函数创建一个学生并将其存储在数组中,问题是当我尝试打印数组时,我得到以下内容:
metClassTwo.Student@5c74c3aa
如何让程序正确打印阵列详细信息?
打印方法:
public static void listStudent() {
for (int i = 0;i < myClassCount;i++) {
if (myClass[i] != null) {
System.out.println(myClass[i]);
}
}
}
每次添加学生时, myClassCount
都会加1。
阵列:
static final Student[] myClass = new Student[6];
答案 0 :(得分:2)
为Student类实现toString()方法。 例如:
public String toString() {
return this.name+" "+this.surname;
}
答案 1 :(得分:1)
class Student {
String name;
@Override
public String toString(){ return name;}
}
myClassCount
不保证索引边界,使用数组长度来检查数组的边界。
for (int i = 0; i < myClass.length; i++) {
if (myClass[i] != null) {
System.out.println(myClass[i]);
}
}
或更好地使用foreach循环
for (Student s : myClass) {
if (s != null) {
System.out.println(s);
}
}
答案 2 :(得分:1)
您必须覆盖Student类的toString()
方法。当你说“打印学生对象”时,Java不知道你期望的输出,所以它只是继承toString()
类的Object
方法,它只是类的名称和当前实例的哈希码
尝试这样的事情(并使用你想要打印的学生对象上的任何变量。
class Student {
public String toString() {
return String.format("%s, %s\n", this.studentName, this.studentAge);
}
...
}
答案 3 :(得分:0)
您需要覆盖您的Student类toString()方法:
@Override
public String toString() {
return this.getFirstName() + " " + this.getLastName();
}
我不知道你的学生班级是什么样的,但这应该给你一个大致的想法。 如果您无法修改Student类,您可以在println方法中执行相同的操作:
for (int i = 0;i < myClassCount;i++) {
if (myClass[i] != null) {
System.out.println(myClass[i].getFirstName() + " etc...");
}
}
答案 4 :(得分:0)
方法Arrays.toString将很好地打印出Array的所有元素。
您还需要实现学生对象的toString方法,以便学生自己能够很好地显示。
大多数IDE都有自动生成toString方法的实用程序。对于Netbeans,请查看源菜单 - &gt;生成 - &gt;的toString。
答案 5 :(得分:-1)
您必须覆盖Students类中的toString
方法。
e.g:
@Override
public String toString() {
StringBuilder result = new StringBuilder();
result.append(something);
.....
return result.toString();
}