2017-02-04 4 views
-1

私はコードのさまざまな部分を理解しようとしていますが、私はこの時点で個々の助けを求める必要があります。だからここに私の問題です:私は最初のJavaプログラミングクラスのための簡単な成績平均的なプログラムを構築しています。私は4つの等級入力を保存し、平均を表示したいと思います。最終的に私はその平均に基づいて文字の等級を表示しようとしています。このエラーは私が初期化していないと言っていると思いますfinalGrade初級Java:単純な等級の平均コード

しかし、私は失われています。起こっていることの説明が素晴らしいので、実際にこれを学ぶことができます。グレード*はオブジェクトであり、彼らは初期化を持っていないので、

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

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

右 - オブジェクトの倍精度化とプリミティブの倍数の違いを理解する必要があります。初心者の方は、ユーザーインターフェイスについてあまり心配しないという古典的な間違いを犯しています。私はグレード計算を最初にテキストインターフェイスで動作させるでしょう。 – duffymo

+0

同じ問題はありませんか?私はちょうどそれがコマンドラインではなくダイアログボックスを使用する方が簡単だと思った。計算は単純です:合計/カウント。実行は私を殺しているものです –

+0

ここにあなたのエラーですpublic static Double finalGrade =((グレードQ1 +グレードQ2 +グレードQ3 +グレードQ4)/ 4);この段階では、gradeQiはまだ初期化されていません。彼らはすべてnullに等しい... –

答えて

0

あなたのプログラムがで失敗。このプログラムはDoubleの代わりにdoubleを使用する場合にのみ機能します。異なる点は、最初のものはオブジェクトではなく、そのデフォルト値は0.0ですが、Doubleはデフォルト値nullのオブジェクトです。これにより、nullPointerExceptionが作成されます。

2番目のfinalGradeは0になります。値を読み取ってからfinalGradeの値を設定する必要があります。

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

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

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