gpt4 book ai didi

java - Java 文件中的 NullPointerException 误解

转载 作者:行者123 更新时间:2023-12-02 02:26:11 25 4
gpt4 key购买 nike

我必须编写一个程序,将字母形式的成绩(如 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)

我不明白问题出在哪里。

最佳答案

尝试使用 "A".equals(letter) 代替 letter.equals("A") ,这将阻止 NullPointers,因为“A”永远不会为 null : -)

您可能想对所有 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!");
}
}
}

关于java - Java 文件中的 NullPointerException 误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47744678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com