我目前正在努力修正代码的结果。
我应该从菜单中添加一个列表,然后显示该列表。但是,我无法检索其内容,而是收到了它的内存值(我猜是吗?)。
学生班
private int number;
private String author;
private String title;
public Student() {
}
public Student(int number, String title, String author) {
this.number = number;
this.title = title;
this.author = author;
}
public int getNumber() {
return number;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
public void setNumber(int number) {
this.number = number;
}
public void setTitle(String title) {
this.title = title;
}
public void setAuthor(String author) {
this.author = author;
}
public String ToString() {
return "Number: " + number + "\tTitle: " + title + "\tAuthor: " + author;
}
主类
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<Student> newStudents = new ArrayList<Student>();
System.out.println("Please select a number from the options below \n");
while (true) {
// Give the user a list of their options
System.out.println("1: Add a student to the list.");
System.out.println("2: Remove a student from the list.");
System.out.println("3: Display all students in the list.");
// Get the user input
int userChoice = input.nextInt();
switch (userChoice) {
case 1:
addStudents(newStudents);
break;
case 2:
//removeStudent(newStudents);
break;
case 3:
displayStudent(newStudents);
break;
}
}
}
public static void addStudents(ArrayList<Student> newStudents) {
Scanner input = new Scanner(System.in);
Student newStudent = new Student();
System.out.print("Please enter number: ");
newStudent.setNumber(input.nextInt());
System.out.print("Please enter title: ");
newStudent.setTitle(input.next());
System.out.print("Please enter author: ");
newStudent.setAuthor(input.next());
if (newStudents.size() <= 100) {
newStudents.add(newStudent);
System.out.println("Student added\n");
} else {
System.out.println("\n Student interface is full!");
}
}
}
private static void displayStudent(ArrayList<Student> newStudents) {
for (Student e : newStudents) {
System.out.println(e);
}
}
}
输出:
1:将一个学生添加到列表中。
2:从列表中删除一个学生。
3:显示列表中的所有学生。
3
Student @ 6b2acb7a
为什么@ 6b2babc7a?
感谢您的帮助和关注。我是编程的新手,而Java是我的第一语言。因此,我非常感谢您的帮助和澄清。
答案 0 :(得分:0)
在public String toString()
中使用时,您必须重写Student类中的System.out.println()
才能提供String
但是您已经public String ToString()
更改为public String toString()
。
在toString()
中没有Student
方法的情况下,将调用toString()
中的java.lang.Object
方法,该方法将返回实例的哈希码。
答案 1 :(得分:0)
调用Java中的print任何对象时,将在内部调用该类的toString()
方法。与Java对象类一样,Object类是所有类的父类,toString()
方法在Object类中可用。因此,此方法可用于所有Class对象。
默认情况下,对象的toString()返回getClass().getName() + '@' + Integer.toHexString(hashCode())
。
因此,您得到的是 Student @ 6b2acb7a 作为输出。如果要打印其他内容,则需要覆盖Student类中的toString()
,无论您使用哪种方法return
,都将得到打印。
Object类中的方法名为toString()。所以你需要这样做:
@Override
public String toString() {
return "Number: " + number + "\tTitle: " + title + "\tAuthor: " + author;
}
重要点::当您覆盖超类中的任何方法时,请使用@Override
注释对其进行注释。如果您不正确地覆盖它,则会得到编译错误。而且始终最好在编译时而不是在运行时查找问题。如果这样做,您将已经找到问题了。