繁体   English   中英

Java需要帮助才能获得所有字符串的打印结果

[英]Java Need Help To Get Print To All String

伙计们,我需要此代码的帮助,我需要通过命令(PrintAllStudents)打印所有字符串,但我并未将其打印出所有学生,而只是打印了最新加入我学习Java的学生,这是我的测试课:

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();
    }

}

当您致电AddStudent您将替换上一个学生。
您可以创建List<Student> list = new ArrayList<Student>(); 代替。
然后添加list.add(s); 其中Student s = new Student();

您仅创建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类型的对象,并为每个对象分配以下三个值。

Student s1 = new Student();
Student s2 = new Student();
Student s3 = new Student();
s1.AddStudent(1, "Walied");
s2.AddStudent(2, "Ayman");
s3.AddStudent(3, "Mostafa");

并使用每个对象的打印方法来打印其值

要么

您可以创建类型为Student的列表,并在每次使用以下值填充对象时将其添加到其中。

 Student s = new Student();
 s.AddStudent(1, "Walied");

现在将其添加到Student类型的列表中,最后,遍历该列表并为每个对象调用print方法

“但是我没有让它打印所有学生,而只是打印我在学习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对象,然后使用Print方法从StudentList对象

public static void main(String[] args {
    StudentList studentList = new StudentList();
    studentList.add(new Student(1, "Walied"));
    studentList.add(new Student(2, "Ayman"));
    studentList.add(new Student(3, "Mostafa"));

    studentList.printAllStudents();
}

您始终会通过添加学生的呼叫覆盖学生信息。 如果您只有一个ID和一个名称,并且始终将其设置为新值,它将替换之前的信息。

您也不应将addStudent方法分配给Student对象,因为它与单个学生无关,而是与一组学生有关。 您可以创建一个包含学生对象集合的类并将其放置在该类中。 然后,您在addStudent()中创建一个新的Student对象,并将其放入集合中。

我强烈建议重命名变量和方法以降低Camel大小写: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()时,您都将分配新值。 这就是为什么您只看到最后一个学生的ID和名称的原因。

您可以做的是在测试类中创建多个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();
}

创建对象时,您可以访问它的属性,如果要在同一个属性中插入多个值,则需要使用List或Map或.....,因此现在您可以使用List接口(如List listS)创建一个对象= new ArrayList(); 而且您可以轻松插入多个值,而无需创建更多对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM