2017-02-15 81 views
1

我遇到了這個Java代碼的問題。這是一個應該計算你的成績的問卷。這一切都運行良好,直到最後一部分,它說「當前得分」,整個方程應該等於33.16,而不是等於24.在Java程序中的添加等於不同的值

我改變了一些值,做了一些研究,但我沒有找到我正在尋找。

import java.util.Scanner; 

public class GradeCalculator { 

    public static void main(String[] args) { 
     System.out.println("Grading Scale:"); 
     System.out.println("A\t 90 - 100"); 
     System.out.println("B\t 80 - 89"); 
     System.out.println("C\t 70 - 79"); 
     System.out.println("D\t 60 - 69"); 
     System.out.println("F\t below 60"); 

     System.out.println("What letter grade do you want to achieve for the course?"); 
     String desiredGrade; 

     Scanner keyboard = new Scanner(System.in); 
     desiredGrade = keyboard.next(); 

     if (desiredGrade.equalsIgnoreCase("A") || desiredGrade.equalsIgnoreCase("B") 
       || desiredGrade.equalsIgnoreCase("C") || desiredGrade.equalsIgnoreCase("D") 
       || desiredGrade.equalsIgnoreCase("F")) {// is this necessary? vv 
      System.out.println("Enter Percentage Weights"); 
     } 

     else { 
      System.out.println("Input error."); 
      System.exit(0); 
     } 

     int exam1, exam2, finalExam, labs, projects, attendance, quizzes; 

     System.out.println("Exam 1:\t"); 
     exam1 = keyboard.nextInt(); 

     System.out.println("Exam 2:\t"); 
     exam2 = keyboard.nextInt(); 

     System.out.println("Final Exam:\t"); 
     finalExam = keyboard.nextInt(); 

     System.out.println("Labs:\t"); 
     labs = keyboard.nextInt(); 

     System.out.println("Projects:\t"); 
     projects = keyboard.nextInt(); 

     System.out.println("Attendance:\t"); 
     attendance = keyboard.nextInt(); 

     System.out.println("Quizzes:\t"); 
     quizzes = keyboard.nextInt(); 

     // so the semicolon isn't needed after the if statement? 
     if (exam1 + exam2 + finalExam + labs + projects + attendance + quizzes != 100) { 
      System.out.println("Weights don't add up to 100, program exiting"); 
      System.exit(0); 
     } 

     System.out.println("Enter your scores out of a 100:"); 
     System.out.println("Do you know your Exam 1 score?"); 

     String answer; 
     int exam1score = 0, exam2score = 0, finalExamScore = 0, labAverage = 0, projectAverage = 0, quizAverage = 0, attendanceAverage = 0; 
     double currentScore = 0; 
     answer = keyboard.next(); 

     // ask about this 

     if (answer.equalsIgnoreCase("yes") || answer.equalsIgnoreCase("y")) { 
      // why can't i put int here? 
      System.out.println("Score received on exam 1:"); 
      exam1score = keyboard.nextInt(); 

      System.out.println("Do you know your Exam 2 score?"); 
      answer = keyboard.next(); 

      if (answer.equalsIgnoreCase("yes") || answer.equalsIgnoreCase("y")) { 
       System.out.println("Score received on exam 2:"); 
       exam2score = keyboard.nextInt(); 

       System.out.println("Do you know your Final Exam score?"); 
       answer = keyboard.next(); 
      } 
      if (answer.equalsIgnoreCase("yes") || answer.equalsIgnoreCase("y")) { 
       System.out.println("Score received on final exam"); 
       finalExamScore = keyboard.nextInt(); 
      } 
     } 

     System.out.println("Do you know your lab average?"); 
     answer = keyboard.next(); 
     if (answer.equalsIgnoreCase("yes") || answer.equalsIgnoreCase("y")) { 
       System.out.println("Average Lab Grade:"); 
       labAverage = keyboard.nextInt(); 
     } 

     System.out.println("Do you know your project average?"); 
     answer = keyboard.next(); 
     if (answer.equalsIgnoreCase("yes") || answer.equalsIgnoreCase("y")) { 
      System.out.println("Average Project Grade:"); 
      projectAverage = keyboard.nextInt(); 
     } 

     System.out.println("Do you know your quiz average?"); 
     answer = keyboard.next(); 
     if (answer.equalsIgnoreCase("yes") || answer.equalsIgnoreCase("y")) { 
      System.out.println("Average Quiz Grade:"); 
      quizAverage = keyboard.nextInt(); 
     } 

     System.out.println("Do you know your attendance average?"); 
     answer = keyboard.next(); 
     if (answer.equalsIgnoreCase("yes") || answer.equalsIgnoreCase("y")) { 
      System.out.println("Average Attendance Grade:"); 
      attendanceAverage = keyboard.nextInt(); 
     } 

     currentScore = ((double)exam1score*exam1 + exam2score*exam2 +finalExam*finalExamScore + labs*labAverage + projects*projectAverage + attendance*attendanceAverage + quizzes*quizAverage)/((double)exam1+exam2+finalExam+labs+projects+attendance+quizzes); 
     System.out.println("Current Grade Score:\t " + currentScore); 

     String grade; 

     if (currentScore >= 90) 
      grade = "A"; 
     else if (currentScore >= 80) 
      grade = "B"; 
     else if (currentScore >= 70) 
      grade = "C"; 
     else if (currentScore >= 60) 
      grade = "D"; 
     else 
      grade = "F"; 
    } 
} 
+0

當你運行它,你有什麼投入? – resueman

+0

不知道你的輸入,我們怎麼說,你爲什麼沒有得到33.16作爲最終值? –

回答

0

以下僅將exam1score*exam1值轉換爲double,而不是整個表達式。

(double) exam1score*exam1 + exam2score*exam2 + finalExam*finalExamScore + .... 

所以,你應該這樣做。

int nominator = exam1score*exam1 + exam2score*exam2 + finalExam*finalExamScore 
         + labs*labAverage + projects*projectAverage 
         + attendance*attendanceAverage + quizzes*quizAverage; 
int denominator = exam1 + exam2 + finalExam + labs + projects + attendance + quizzes; 
currentScore = (double) nominator/denominator; 

OR

int nominator = exam1score*exam1 + exam2score*exam2 + finalExam*finalExamScore 
         + labs*labAverage + projects*projectAverage 
         + attendance*attendanceAverage + quizzes*quizAverage); 
int denominator = exam1 + exam2 + finalExam + labs + projects + attendance + quizzes; 
currentScore = (nominator * 1.0)/denominator; 
+0

謝謝@Wasi!它像一個魅力!我真的很感激它:D – Katina

0
(double)exam1score*exam1 + exam2score*exam2 +finalExam*finalExamScore + labs*labAverage + projects*projectAverage + attendance*attendanceAverage + quizzes*quizAverage 

只轉換第一個double和葉,其餘爲int

+0

你好@約翰感謝你的快速幫助:D 我試過了,但它等於24.2 :(我真的很感謝你能幫助我,這個項目讓我感到沮喪 – Katina