2014-08-29 83 views
-1

這是我遇到的一個任務。我仍然是Java的新手。我似乎無法加載學生的姓名和成績。名字和等級應該被硬編碼爲主,不一定是25.所以我做了4.我在加載數據時遇到了困難。 (成績)創建一個名爲Student的藍圖,其中包含兩個字段,一個字符串作爲其名稱和一個整數的一維數組,它們是成績(不同學生的成績數可能不同)。至少使用兩個構造函數完成藍圖,一個toString,以及getters和setter。您可以根據需要添加更多方法。 寫,有一個驅動程序,至少,以下結構:如何使用驅動程序類從陣列加載數據

public static void main(String[] args) { 
    // we do not know the number of students but there will not be >25 
    Student[] students = new Student[25]; 

    int numStudents = loadStudents(students); 
    printStudents(students,numStudents); 

} 

public static int loadStudents(Student[] s) { } 
public static void printStudents(Student[] s, int numStudents) {} 
} 

這是我到目前爲止所。

學生類:

public class Student { 

String name; 
int[] grades; 


public Student() 
{ 
} 

public Student(String n,int[] g) 
{ 
    name=n; 
    grades=g; 
} 

public String toString(){ 
return ""; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int[] getGrades() { 
    return grades; 
} 

public void setGrades(int[] grades) { 
    this.grades = grades; 
} 


} 

driverclass:

所有的
public class Driver { 


public static void main(String[] args) { 
    // we do not know the number of students but there will not be >25 
Student[] students = new Student[25]; 

    Student s1= new Student("John", new int[]{98, 92, 81}); 
    Student s2= new Student("Claire", new int[]{75, 84, 91, 39}); 
    Student s3= new Student("Steven", new int[]{88, 94, 65, 91,95}); 
    Student s4= new Student("Jason", new int[]{97, 89, 85, 82}); 





    int numStudents = loadStudents(students); 
    printStudents(students,numStudents); 

} 

public static int loadStudents(Student[] s) { 
     for(int i=0;i<4;i++){ 
     s[i]=new Student(); 
     System.out.println(s[i]); 
     } 



    } 

public static void printStudents(Student[] s, int numStudents) { 
     if(numStudents < s.length){ 
      System.out.println(s[numStudents]); 
      printStudents(s,numStudents-1); 
     } 

     } 
} 
+2

如果我們爲您完成這項任務,我們也獲得課程學分嗎? – markspace 2014-08-29 19:08:06

+0

大聲笑我只需要知道如何加載數據,我可以做其餘的。 – SikRik 2014-08-29 19:11:21

+0

那麼,你可能想問問你的老師或TA是什麼意思「加載」的東西。您正在使用「加載」方法打印學生。通常,打印被認爲是輸出,並且加載被稱爲輸入。您必須執行與「加載」相反的打印。 – markspace 2014-08-29 19:13:00

回答

0

也有適用於您的問題的一些優雅的解決方案,但是如果你想修改現有的代碼做按以下Driver類,

公共類驅動程序{

public static void main(String[] args) { 

    Student[] students = new Student[25]; 

    Student s1 = new Student("John", new int[] { 98, 92, 81 }); 
    Student s2 = new Student("Claire", new int[] { 75, 84, 91, 39 }); 
    Student s3 = new Student("Steven", new int[] { 88, 94, 65, 91, 95 }); 
    Student s4 = new Student("Jason", new int[] { 97, 89, 85, 82 }); 

    List<Student> stuList = new ArrayList<Student>(); 
    stuList.add(s1); 
    stuList.add(s2); 
    stuList.add(s3); 
    stuList.add(s4); 

    int numStudents = loadStudents(students, stuList); 
    printStudents(students, numStudents); 

} 

public static int loadStudents(Student[] s, List<Student> list) { 
    int size = list.size(); 
    for (int i = 0; i < list.size(); i++) { 
     s[i] = list.get(i); 
     System.out.println(s[i]); 
    } 
    return size; 
} 

public static void printStudents(Student[] s, int numStudents) { 
    if (numStudents == 0) { 
     return; 
    } 
    if (numStudents < s.length) { 
     System.out.println(s[numStudents]); 
     printStudents(s, numStudents - 1); 
    } 
} 

}

和修改ŧ他在Student類中的toString方法。

public String toString(){ 
    String str = "name : "+name; 
    for(int i=0;i<grades.length;i++){ 
    str += grades[i] + " "; 
    } 
    return str; 
} 

我希望它能解決您的問題。

+0

非常感謝,我知道我錯過了一些東西,那就是列表並添加到列表中。我一直只是把students.add(等等);並忘記實際初始化列表。咄! – SikRik 2014-08-29 19:46:40

+0

我得到一行null打印第一,它是失蹤的學生,所以我把如果(numStudents == -1),並打印他們的權利。但仍然打印出一條空行。另外我怎麼去得到每個學生的平均水平。我想我必須創建另一個方法並通過每個方法,或者我可以通過整個列表。 – SikRik 2014-08-29 20:10:43

+0

沒關係我得到它的工作感謝您的幫助 – SikRik 2014-08-29 20:24:04

0

首先,你必須從你的loadStudents函數返回一個int。其次,在main函數中聲明瞭四個Student變量,現在無法在loadStudents函數中訪問這些變量。快速解決方案是將它們作爲參數傳遞並在loadStudents函數中使用不同的構造函數。

有,當然,更優雅的方式做到這一點,只考慮這個答案有點幫助你分配:)

相關問題