有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

文件Java错误中的NullPointerException

我必须写一个程序,它将字母形式的分数转换成数字形式,如a、B、C、D或F(分别为4、3、2、1、0)。等级可以有+或-太多(+增加等级0.3,-减少相同数量)。 我写了这个程序:

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)

我不明白出了什么问题


共 (1) 个答案

  1. # 1 楼答案

    请尝试使用"A".equals(letter)代替letter.equals("A")以防止空指针,因为“A”永远不能为空:-)

    您可能希望对all equals()执行此操作,首先是常量,然后是变量,然后重试您的代码

    oh和Grade中的letter始终是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!");
            }
        }
    }