2011-11-21 102 views
-3

我正嘗試在Java中創建一個簡單的GPA計算程序,但是我的邏輯錯誤導致答案不正確。Java GPA邏輯錯誤

我的第一個測試值是87.3%的等級和3的信用值,以及74.2%的等級和3.0的信用等級。我得到4.0的答案,如果我打印gradePointTotal或應該被命名爲加權信用值,那麼我得到24.0而不是21.0。

public class lab5{ 

    public static void main(String[] args){ 
      double gradeTotal = 0; 
      double gradeAverage = 0; 
      double creditValueTotal = 0; 
      double gradePoint = 0; 
      double gradePointTotal = 0; 
      int counter = 1; 

      Scanner input = new Scanner(System.in); 
      Scanner input2 = new Scanner(System.in); 
      String repeat; 
      do { 
      System.out.print("Enter a grade: "); 
      double grade = input.nextDouble(); 
      System.out.print("Enter credit value: "); 
      double creditValue = input.nextDouble(); 
      System.out.print("Enter Another course ? (YES/NO) "); 
      repeat = input2.next(); 
      gradeTotal += grade; 
      gradeAverage = gradeTotal/counter; 
      creditValueTotal += creditValue; 

      if (gradeAverage >= 80) 
      gradePoint = 4.0; 
    else if (gradeAverage >= 75) 
      gradePoint = 3.5; 
    else if (gradeAverage >= 70) 
      gradePoint = 3.0; 
    else if (gradeAverage >= 65) 
      gradePoint = 2.5; 
    else if (gradeAverage >= 60) 
      gradePoint = 2.0; 
    else if (gradeAverage >= 50) 
      gradePoint = 1.0; 
    else if (gradeAverage < 50) 
      gradePoint = 0.0; 

    gradePointTotal += gradePoint * creditValue; 

    counter++; 
      } 
      while("YES".equalsIgnoreCase(repeat) || "y".equalsIgnoreCase(repeat)); 

      double gradePointAverage = gradePointTotal/creditValueTotal; 

    System.out.println(gradePointAverage); 



    } 

} 
+3

請誠實,並在適當的時候將您的問題標記爲家庭作業。 – vidstige

+1

任何超過80是4.0?我敢肯定,在我的高中,我們必須得到至少90或95 ... –

+0

另外,你不應該需要兩個輸入掃描儀。並且請將您的代碼分解爲更多方法 - 這在發現問題時應該有所幫助。 –

回答

0

嘗試刪除,你計算gradeAveragecounter .Dividing給定的等級,甚至有擺在首位的計數器,並沒有真正意義,我行。另外,在每個if-else-if的條件下使用grade

1

這裏有很多錯誤。你在學習,所以這很好。關於編程的事情要記住的是,你寫一行代碼是有原因的。每一行代碼都有一個特定的原因存在。看着你的代碼,我看到一些混亂。你不明白每行代碼在做什麼。例如,你有輸入,並輸入2。爲什麼? (提示,您可能對System.in的功能感到困惑)。

在你編寫任何代碼之前你需要做的是編寫一個你想做的英文描述。它應該是這樣的:

//第1步:反覆請求當然得分和GPA,直到用戶完成輸入這些

//第2步:添加用戶輸入一起所有得分。除以條目數量。

//第3步:打印出的輸出

然後,你就可以開始沖洗出的每個乾的細節

//步驟1a)得到一個處理的命令行用戶界面,用於抓取數據(System.in) ..等

基本上,你從一個高級大綱開始,然後清除細節..最後的細節是你的代碼行。這有利於做出自我評論的代碼,所以你的導師和其他人不僅可以閱讀什麼你在做什麼,但爲什麼你是這樣做的。你也可以找到正確的函數調用或系統資源來做你想做的事情,而不是有一些你不知道它做什麼的資源,並試圖讓它做你想做的事情。

0

取平均值爲gradePointAverage會更好。

CreditValue Total = CreditValue; 
GradePointTotal = GradePoint*CreditValue; 
double gradePointAverage += gradePointAverage + (GradePointTotal/CreditValueTotal); 
double GPA = gradePointAverage/count; 

通過不增加信用總額和等級點總數,每次循環重新輸入時都會重新分配。但是,遞增gradePointAverage允許您繼續添加它。然後你取平均值來獲得平均gpa。