package com.tj;
public class Student {
private int StudentId;
private String StudentName;
public void AddStudent(int StudentId, String StudentName){
this.StudentId = StudentId;
this.StudentName = StudentName;
}
public void PrintAllStudents() {
System.out.println("Id : " + StudentId);
System.out.println("StudentName : " + StudentName);
}
}
和我的测试班:
package com.tj;
public class Test {
public static void main(String[] args) {
Student s = new Student();
s.AddStudent(1, "Walied");
s.AddStudent(2, "Ayman");
s.AddStudent(3, "Mostafa");
s.PrintAllStudents();
}
}
答案 0 :(得分:1)
当您致电AddStudent
时,您将替换之前的学生
您可以改为创建List<Student> list = new ArrayList<Student>();
然后将list.add(s);
添加到其中
Student s = new Student();
答案 1 :(得分:1)
您只创建了1个Student类型的对象。而且你要为它分配三个不同的值。因此,前两个值被覆盖。如果您有三个学生,则需要创建三个学生对象。
Student s = new Student(); //Creates a new Student object.
s.AddStudent(1, "Walied"); //This will assign 1 and Walied as ID and name to the objcet.
s.AddStudent(2, "Ayman"); // Now again, you are assigning new ID and name to the same object. So the previous value is overwritten.
s.AddStudent(3, "Mostafa"); // Same effect as above.
因此,只有最后一个值可供您使用。
您可以创建三个学生类型的对象,并为它们分配三个值,如下所示。
Student s1 = new Student();
Student s2 = new Student();
Student s3 = new Student();
s1.AddStudent(1, "Walied");
s2.AddStudent(2, "Ayman");
s3.AddStudent(3, "Mostafa");
并使用每个对象的print方法打印其值
OR
您可以创建一个类型为Student的列表,并在每次使用以下值填充对象时将其添加到该列表中。
Student s = new Student();
s.AddStudent(1, "Walied");
现在将其添加到Student类型的列表中,最后遍历列表并为每个对象调用print方法
答案 2 :(得分:1)
“但我没有让它打印所有学生它只是打印最新学生添加即时通讯学习java这里是我的测试类”
每次调用s.AddStudent
总体而言,您没有最好的设计。在考虑OOP时,你需要考虑什么是什么。 Student
只是一名学生。因此,没有方法可以添加学生或打印所有学生。您应该创建两个单独的类:
public class Student {
String name;
int id;
public Student(int id, String name){
this.name = name;
this.id = id;
}
public String toString(){
return "Name: " + name + " Id: " + id;
}
}
public class StudentList {
private List<Student> students = new ArrayList<Student>();
public void addStudent(Student student){
students.add(student);
}
public void printAllStudents(){
for (Student student : students){
System.out.println(student);
}
}
}
在您的学生课程中,您可以获得姓名和其他信息。你的StudentList
课程将容纳所有学生。它应该有一种方法来添加学生和方法来打印所有学生。
在您的主体中,您应该创建一个StudentList
对象并创建三个Student
对象并将它们添加到StudentList
对象,然后使用{{1}中的print方法对象
StudentList
答案 3 :(得分:0)
您总是会通过添加学生的电话覆盖学生信息。如果您只有一个ID和一个名称,并始终将其设置为新值,则会替换以前的信息。
您也不应该将addStudent方法分配给Student对象,因为它与单个学生无关,而是与学生集合有关。您可以创建一个包含Student对象集合的类并将其放在那里。然后,在addStudent()中创建一个新的Student对象,并将其放入集合中。
答案 4 :(得分:0)
我强烈建议您重命名变量和方法以降低Camel Case:studentName,studentId,printAllStudents(),以避免与Student,String等类混淆。
http://java.about.com/od/javasyntax/a/nameconventions.htm
目前,您的班级Student
包含两个变量:
private int StudentId;
private String StudentName;
您的方法AddStudent(int StudentId, String StudentName)
为这两个变量分配新值:
this.StudentId = StudentId;
this.StudentName = StudentName;
每次调用AddStudent()时,都会分配新值。这就是为什么你只能看到最后一个学生的身份和姓名的原因。
你可以做的是在你的测试类中创建多个Student对象,每个对象都拥有它自己的id和name变量:
Student s1 = new Student();
s1.AddStudent(1, "Walied");
Student s2 = new Student();
s2.AddStudent(2, "Ayman");
Student s3 = new Student();
s3.AddStudent(3, "Mostafa");
s1.PrintAllStudents();
s2.PrintAllStudents();
s3.PrintAllStudents();
您可以重命名您的方法,使其看起来更容易理解:
Student s1 = new Student();
s1.setData(1, "Walied");
Student s2 = new Student();
s2.setData(2, "Ayman");
Student s3 = new Student();
s3.setData(3, "Mostafa");
s1.printData();
s2.printData();
s3.printData();
在测试类中,您可以将所有Student对象保存在List中:
List<Student> studentList = new ArrayList<Student>();
studentList.add(s1);
studentList.add(s2);
studentList.add(s3);
然后遍历列表并打印每个对象的数据:
for (Student s : studentList) {
s.printData();
}
答案 5 :(得分:0)
当您创建对象时,您可以访问它的属性,如果要在同一属性中插入多个值,则需要使用List或Map或..... 所以现在你用列表接口创建一个对象,如List listS = new ArrayList(); 并且您可以轻松插入多个值,而无需创建更多对象。