2017-02-04 47 views
-1

我想了解代碼的不同部分,但我需要在此處尋求個人幫助。所以這裏是我的問題:我正在爲我的第一個Java編程類構建一個簡單的平均等級程序。我想保存4級輸入,然後顯示平均值。最終我會根據平均值顯示字母等級。我認爲這個錯誤是說我沒有初始化finalGrade初學Java:簡單等級平均代碼

但我迷路了。對發生的事情的解釋會很棒,所以我可以真正瞭解這一點。

import java.util.Scanner; 
import javax.swing.JOptionPane; 

public class GradeAverage{ 

    public static Double gradeQ1; //gradeQ are grades for the respective quarters 
    public static Double gradeQ2; 
    public static Double gradeQ3; 
    public static Double gradeQ4; 
    public static String studentName; 
    public static Double finalGrade = ((gradeQ1 + gradeQ2 + gradeQ3 + gradeQ4)/4); 

    public static void main(String args[]) { 


    Scanner input = new Scanner(System.in); 


    studentName = JOptionPane.showInputDialog(null, "Please enter your first and last name."); 
    JOptionPane.showMessageDialog(null, "Thanks " + studentName + ", let's get started!"); 

    gradeQ1 = Double.parseDouble(JOptionPane.showInputDialog(null, "What was your grade in the first quarter?")); // gets grade and saves it as a double gradeQ1 
    JOptionPane.showMessageDialog(null, "You entered " + gradeQ1); 
    //double gradeQ1 = input.nextDouble(); 

    gradeQ2 = Double.parseDouble(JOptionPane.showInputDialog(null, "What was your grade in the second quarter?")); 
    JOptionPane.showMessageDialog(null, "You entered " + gradeQ2); 

    gradeQ3 = Double.parseDouble(JOptionPane.showInputDialog(null, "What was your grade in the third quarter?")); 
    JOptionPane.showMessageDialog(null, "You entered " + gradeQ3); 

    gradeQ4 = Double.parseDouble(JOptionPane.showInputDialog(null, "What was your grade in the fourth quarter?")); 
    JOptionPane.showMessageDialog(null, "You entered " + gradeQ4); 

    JOptionPane.showMessageDialog(null, "Thanks " + studentName + ", Your average was " + finalGrade); 

    } 
} 



JGRASP error: 
Exception in thread "main" java.lang.ExceptionInInitializerError 
Caused by: java.lang.NullPointerException 
    at GradeAverage.<clinit>(GradeAverage.java:15) 
+0

右鍵 - 您需要了解Double對象和Double對象之間的區別。作爲一個初學者,你犯了太多擔心用戶界面的經典錯誤。我將首先使用文本界面進行等級計算。 – duffymo

+0

難道我不會有同樣的問題?我只是認爲使用對話框而不是命令行更容易。計算很簡單:總和/計數。執行是什麼在殺我 –

+0

這裏是你的錯誤public static Double finalGrade =((gradeQ1 + gradeQ2 + gradeQ3 + gradeQ4)/ 4);.在這個階段,等級還沒有初始化。他們的全部等於空... – 2017-02-04 03:30:09

回答

0

你的程序上失敗:

public static Double finalGrade = ((gradeQ1 + gradeQ2 + gradeQ3 + gradeQ4)/4); 

因爲等級*的對象,他們還沒有收到初始化。該程序只能在你使用double而不是Double的情況下工作。不同之處在於第一個不是對象,其默認值爲0.0,而Double是缺省值爲null的對象。這會創建nullPointerException。

其次您的finalGrade將爲0,您必須先讀取值,然後設置finalGrade的值。

... 
JOptionPane.showMessageDialog(null, "You entered " + gradeQ4); 

finalGrade = ((gradeQ1 + gradeQ2 + gradeQ3 + gradeQ4)/4); 

JOptionPane.showMessageDialog(null, "Thanks " + studentName + ", Your average was " + finalGrade);