2014-04-14 95 views
0

我會複製/粘貼作業,然後是迄今取得的進展。我真的不想找人做這項工作,只有一些幫助,指出我正確的方向,我要去哪裏錯了?該程序運行時沒有錯誤,但它只是返回一個學生返回的多個結果。我可以修改成績,並讓它產生不同的結果,所以我知道數學正在完成,但我不知道爲什麼它會給單個學生提供多個(和不同的)結果。我一直在檢查代碼,無法確定我要出錯的地方。我最好的猜測是它在OutputGrade方法的某個地方,我找不到它。尋求協助賦值平均數組

說明:

創建一個名爲學生有下列實例變量的Java類: •私人字符串studentName; •private int []等級; //數組 包含setter和getter方法來設置和獲取這2個屬性。等級實例數組變量 - setGrades()的setter方法應該採用單個參數,該參數是一個int數組,並且已經填充了等級。如果語句確保每個等級值都使用了setGrades()在數組參數是有效的(在0到100之間) - 您將需要結合if語句使用循環來有效地完成此操作。如果等級超出範圍,setGrades()應該將該等級值設置爲0.您傳遞給setGrades()的數組必須保持3到5個等級。 包含一個名爲outputGrade()的方法,該方法對學生成績數組中的所有成績進行平均,然後使用switch語句根據以下條件輸出成績轉換: •對於0-59的值,程序應該輸出:「學生失敗「 •對於60-69的值,程序應輸出:」學生獲得D「 •對於70-79的值,程序應該輸出:」學生獲得C「 •對於值從80-89,你的程序應該輸出:「學生獲得B」 •對於90-100的值,你的程序應輸出:「學生獲得A」 其中「學生」是學生的真實姓名。 創建一個名爲TestStudent的測試類,它實例化3名學生並設置他們的姓名和成績,然後爲每個學生調用outputGrade()。對於你的3名學生,1名必須有3個等級,1個必須有4個等級,並且1個必須有5個等級。這是因爲你將有3個不同的數組大小傳遞給setGrades()。確保對於1名學生,setGrades()被調用1級值超出範圍(小於0或大於100)。

代碼:

public class TestStudent { 

    public static void main(String[] args) { 

     Student student1 = new Student(); 
     int[] grades1 = {15, 50, 5}; 
     student1.setStudentName("Ernest Craft"); 
     student1.setGrades(grades1); 
     student1.outputGrades(); 

     Student student2 = new Student(); 
     int[] grades2 = {95, 95, 95, 95}; 
     student2.setStudentName("Steve Jones"); 
     student2.setGrades(grades2); 
     student2.outputGrades(); 

     Student student3 = new Student(); 
     int[] grades3 = {105, -1, 72, 90, 88}; 
     student3.setStudentName("Mary Smith"); 
     student3.setGrades(grades3); 
     student3.outputGrades(); 

    } // end method main 
} // end class TestStudent 

Student類:

public class Student { 

    private String studentName; 
    private int[] grades; 

    //constructor 
    public Student() { 
    } 

    public void setStudentName(String name) { 
     studentName = name; 
    } // end method setStudentName 

    public String getStudentName() { 
     return studentName; 
    } // end method getStudentName 

    public void setGrades(int gradeArray[]) { 
     grades = gradeArray; 

     for (int i = 0; i < gradeArray.length; i++) { 
      if (gradeArray[i] < 0 || gradeArray[i] > 100) { 
       gradeArray[i] = 0; 
      } // end if 
     } // end loop 
    } // end method setGrades 

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

    public void outputGrades() { 

     int gradesTotal = 0; 
     int gradesAverage; 
     char letterGrade; 

     for (int i : grades) { 
      gradesTotal += i; 
     } // end loop 

     gradesAverage = gradesTotal/(grades.length); 

     if (gradesAverage >= 0 && gradesAverage <= 59) { 
      letterGrade = 'F'; 
     } else if (gradesAverage >= 60 && gradesAverage <= 69) { 
      letterGrade = 'D'; 
     } else if (gradesAverage >= 70 && gradesAverage <= 79) { 
      letterGrade = 'C'; 
     } else if (gradesAverage >= 80 && gradesAverage <= 89) { 
      letterGrade = 'B'; 
     } else { 
      letterGrade = 'A'; 
     } // end if statement 

     switch (letterGrade) { 

      case 'A': 
       System.out.println(studentName + " gets an A."); 
      case 'B': 
       System.out.println(studentName + " gets an B."); 
      case 'C': 
       System.out.println(studentName + " gets an C."); 
      case 'D': 
       System.out.println(studentName + " gets an D."); 
      case 'F': 
       System.out.println(studentName + " gets an F."); 

     } // end switch 
    } // end method outputGrades 
} // end class Student 

感謝您抽空看看!

+1

小費,除非需要'switch'。你的'case'主體都是相同的減一個字符不同的(你有'letterGrade'的形式,所以你可以簡單地用'System.out.println(新的StringBuilder())替換整個'switch'。append(studentName).append(「gets an」).append(letterGrade).append(「。」));' –

+0

你有一個好主意,但是這個任務的參數需要一個開關。儘管如此,我將把它歸檔以備後用。謝謝! – user3533863

回答

5

你忘了從switchbreak語句。如果你不是break,它會繼續執行一切,直到塊結束!

這有點混亂的「功能」是從C剩餘,在大多數情況下,你會想用一個breakreturnthrow結束所有case秒。

+0

我坐在這裏笑自己俯視。我覺得這很簡單,但完全錯過了。非常感謝你!我添加了break語句,它效果很棒! – user3533863

+0

爲了擴展,從第一個'評估爲'案例',所有後續的案例'也將被評估。這被稱爲「案例」,在多個「案例」共享功能時非常有用。但是,一旦案例完成,您往往會想要「休息」或「返回」。 –

+0

恕我直言,利用案件的貫穿落入「不必要的欺騙」之下 - 我想我已經在我的生活中找到了合法用途。如果返回/拋出,不需要'中斷'好點。 –