簡體   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