2017-12-10 5 views
0

A、B、C、D、Fのようなグレードを数値形式(4,3,2,1,0)に変換するプログラムを書く必要があります。グレードは+または - を持つことができます(+ 0.3のグレードを増やす - 同じ数の減少)。 私はこのプログラムの開発を書いた:ファイル内でNullPointerExceptionが発生するJava Misanderstanding

public class Grade{ 
    private String letterGrade; 
    private String letter; 
    private String symbol = "n"; 
    private double numericGrade; 
    private double grade; 
    private final double PLUS = 0.3; 
    private final double MENO = -0.3; 

    public Grade(String letterGrade) { 
     this.letterGrade = letterGrade; 
    } 

    public double getNumericGrade() { 
     if (letterGrade.length() > 1) { 
     letter = letterGrade.substring(0, 1); 
     symbol = letterGrade.substring(1, 2); 
     } 

     if (letter.equals("A")) { 
     numericGrade = 4.0; 

     if (symbol.equals("+")) { 
      symbol = "n"; 
     } 
     } 
     else if (letter.equals("B")) { 
     numericGrade = 3.0; 
     } 
     else if (letter.equals("C")) { 
     numericGrade = 2.0; 
     } 
     else if (letter.equals("D")) { 
     numericGrade = 1.0; 
     } 
     else if (letter.equals("F")) { 
     numericGrade = 0.0; 
     } 

     if (symbol.equals("+")) { 
     grade = numericGrade + PLUS; 
     } 
     else if (symbol.equals("-")) { 
     grade = numericGrade + MENO; 
     } 
     else { 
     grade = numericGrade; 
     } 

     return grade; 
    } 
} 

そして、プログラムの開発テスター:

import java.util.Scanner; 
public class GradeTester{ 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 

     System.out.print("Please enter the grade in letter form: "); 
     String letterGrade = in.next(); 

     if (letterGrade.equals("A") || letterGrade.equals("A+") || letterGrade.equals("A-")) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } 
     else if (letterGrade.equals("B") || letterGrade.equals("B+") || letterGrade.equals("B-")) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } 
     else if (letterGrade.equals("C") || letterGrade.equals("C+") || letterGrade.equals("C-")) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } 
     else if (letterGrade.equals("D") || letterGrade.equals("D+") || letterGrade.equals("D-")) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } 
     else if (letterGrade.equals("F")) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } 
     else { 
      System.out.println("Not permissed!"); 
     } 
    } 
} 

しかし、私は+なしだけの手紙のために、それを試していますか - このエラーが表示されます。

Exception in thread "main" java.lang.NullPointerException 
     at Grade.getNumericGrade(Grade.java:20) 
     at GradeTester.main(GradeTester.java:13) 

何が問題なのか分かりません。

答えて

2

「」

:-) nullになることはありませんようにコードを試してみてください、変数、最初の定数)あなたは(すべての等号のためのことをしたいかもしれませんNullPointersを防ぐことができますletter.equals("A")の代わりに"A".equals(letter)を試してみてくださいシンボルも与えられている場合にのみ設定され、再び...

ああとGradeletterは常にnullです。

ちょうど私が作業バージョン

package nl.ivonet; 

import java.util.Scanner; 

public class Grade { 
    private final String letterGrade; 
    private String letter; 
    private String symbol = "n"; 
    private double numericGrade; 
    private static final double PLUS = 0.3; 
    private static final double MENO = -0.3; 

    public Grade(final String letterGrade) { 
     this.letterGrade = letterGrade; 
    } 

    public double getNumericGrade() { 
     if (this.letterGrade.length() > 1) { 
      this.letter = this.letterGrade.substring(0, 1); 
      this.symbol = this.letterGrade.substring(1, 2); 
     } else { 
      this.letter = this.letterGrade; 
     } 

     if ("A".equals(this.letter)) { 
      this.numericGrade = 4.0; 

      if ("+".equals(this.symbol)) { 
       this.symbol = "n"; 
      } 

     } else if ("B".equals(this.letter)) { 
      this.numericGrade = 3.0; 

     } else if ("C".equals(this.letter)) { 
      this.numericGrade = 2.0; 

     } else if ("D".equals(this.letter)) { 
      this.numericGrade = 1.0; 

     } else if ("F".equals(this.letter)) { 
      this.numericGrade = 0.0; 

     } 

     final double grade; 
     if ("+".equals(this.symbol)) { 
      grade = this.numericGrade + PLUS; 

     } else if ("-".equals(this.symbol)) { 
      grade = this.numericGrade + MENO; 

     } else { 
      grade = this.numericGrade; 

     } 

     return grade; 
    } 


    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 

     System.out.print("Please enter the grade in letter form: "); 
     String letterGrade = in.next(); 

     if ("A".equals(letterGrade) || "A+".equals(letterGrade) || "A-".equals(letterGrade)) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } else if ("B".equals(letterGrade) || "B+".equals(letterGrade) || "B-".equals(letterGrade)) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } else if ("C".equals(letterGrade) || "C+".equals(letterGrade) || "C-".equals(letterGrade)) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } else if ("D".equals(letterGrade) || "D+".equals(letterGrade) || "D-".equals(letterGrade)) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } else if ("F".equals(letterGrade)) { 
      Grade graduation = new Grade(letterGrade); 

      System.out.println("The grade in number form is: " + graduation.getNumericGrade()); 
     } else { 
      System.out.println("Not permissed!"); 
     } 
    } 
} 
にここに寛大な:-)を感じているので、
関連する問題