2014-09-17 8 views
0

Хорошо, теперь я думаю, что я отказался от надежды найти решение проблемы, которая должна быть простой проблемой. В основном, я создаю систему записей студентов, в которой хранятся данные учащихся в ArrayList. Сначала я создал конструктор в классе Student, чтобы указать, какие записи будут иметь каждый студент. Затем я создал экземпляр класса Student в основном классе (т. Е. Класс с основным методом), а затем добавил объект-ученик в listListArrayList.Как отобразить содержимое объекта в Java

Кстати, вместо жесткого кодирования деталей ученика моя первоначальная цель состояла в том, чтобы позволить пользователю ввести данные, а затем я буду использовать объект Scanner или BufferedReader для получения сведений, хранящихся в объекте Student, и затем в ArrayList, но у меня также есть проблемы с этим; поэтому я, вероятно, займусь этой проблемой, как только закончите с этим.

В любом случае, я ожидаю, что выходные данные распечатывают данные учащихся, но вместо этого я получаю ячейку памяти (т. Е. [[email protected]]). Я знаю, что мне нужно переопределить метод toString, но как именно это делается, я не могу получить. Я получаю синтаксические ошибки везде, как только я вхожу в блок кода @Override для метода toString. Вот что я пытался:

import java.util.*; 

class Student { 
    private String studentID; 
    private String studentName; 
    private String studentAddress; 
    private String studentMajor; 
    private int studentAge; 
    private double studentGPA; 

    Student (String studentID, String studentName, String studentAddress, String 
      studentMajor, int studentAge, double studentGPA){ 

     this.studentID=studentID; 
     this.studentName=studentName; 
     this.studentAddress=studentAddress; 
     this.studentMajor=studentMajor; 
     this.studentAge=studentAge; 
     this.studentGPA=studentGPA; 
    } 
} 


public static void main(String[] args) { 
Student ali = new Student("A0123", "Ali", "13 Bond Street", "BSc Software Engineering", 22, 3.79); 
    List<Student> studentList = new ArrayList<>(); 

    studentList.add(ali); 

    @Override 
    String toString() {       
     StringBuilder builder = new StringBuilder(); 
     builder.append(ali).append(studentList); 
     return builder.toString(); 
    } 

    System.out.println(builder); 
} 

ответ

1

Вы получаете ошибки, потому что вы должны переопределить toString метод внутри класса, который вы хотите использовать его для. т. е. вам нужно поставить метод с помощью @Override внутри вашего класса Student.

А вы можете назвать это так:

System.out.println(studentA.toString()); 
System.out.println(studentB.toString()); 

или в цикле:

for(Student x : studentList) 
    System.out.println(x.toString()); 

и так далее ..

Кроме того, в вашем коде вы создаете метод внутри ваш main способ. Конечно, вы получите ошибки.

+2

Технически, вы можете использовать 'System.out.println (х),' как 'toString' называется внутренне ... – MadProgrammer

2

Вы должны переопределить метод toString, потому что он даст вам четкую информацию об объекте в читаемом формате, который вы можете понять.

Заслуга о перекрывая toString:

Помощь программисту для протоколирования и отладки программы Java

С ToString определяется в java.lang.Object и делает не дают ценной информации, так что хорошая практика переопределить его для подклассов.

Source and Read more about overriding toString

public String toString() { 
    return "Studnet ID: " + this.studentID + ", Student Name:" 
      + this.studentName+ ", Studnet Address: " + this.studentAddress 
      + "Major" + this.studentMajor + "Age" + this.studentAge 
      + GPA" + this.studentGPA ; 
} 
2

Вы должны реализовать ToString() на объекте Student.

public class Student { 
    ... 
    Your existing code 
    ... 

    @Override 
    public String toString() { 
     return studentID + ", " + studentName + ", " + //The remaining fields 
    } 
} 

затем в главном методе, вызовите

for (Student student : studentList) { 
    System.out.println(student.toString()); 
} 
+2

Технически, вы может использовать 'System.out.println (student);' поскольку 'toString' вызывается внутри ... – MadProgrammer

Смежные вопросы