java - 使用数组变量的 Nullpointerexception
问题描述
我正在用java回答一个练习问题,我已经创建了一些代码。但是,当我运行它时,我得到一个错误,我不确定这个错误是什么意思
我已经尝试重新阅读代码,但我仍然不知道错误是什么:
Exception in thread "main" java.lang.NullPointerException at SugarSmashPlayer.setHighestScore(SugarSmashPlayer.java:42) at Main.main(Main.java:7) Process finished with exit code 1
public class Main {
public static void main(String[] args) {
SugarSmashPlayer Jacob = new SugarSmashPlayer();
Jacob.setHighestScore(40,1);
System.out.println(Jacob.getHighestScore(1));
}
}
public class SugarSmashPlayer {
private int IDnumber;
public String screenName;
public int[] highestScore;
public int level;
public int getIDnumber() {
return IDnumber;
}
public void setIDnumber(int IDnumber) {
this.IDnumber = IDnumber;
}
public String getScreenName() {
return screenName;
}
public void setScreenName(String screenName) {
this.screenName = screenName;
}
public int getHighestScore(int level) {
if(level > 10 || level < 1) {
System.out.println("Invalid level");
return 0;
} else {
return highestScore[level-1];
}
}
public void setHighestScore(int highestScore, int level) {
if(level > 10 || level < 1) {
System.out.println("Invalid level");
} else {
if(level > 2 && this.highestScore[level-2] > 99) {
this.highestScore[level - 1] = highestScore;
} else {
if (level == 1) {
this.highestScore[level - 1] = highestScore;
} else {
System.out.println("You have not achieved a score of 100 or greater in the previous level");
}
}
}
}
}
我希望 1 级的高分设置为 40,当我得到高分时,我希望它显示 40
解决方案
Anint[]
是一个对象类型,所以当你声明你的字段时
public int[] highestScore;
你得到的是一个可以包含对对象的引用int[]
的字段。但是,您实际上从未将此类引用放入字段中,因此其值保持默认值,即null
.
因此,NullPointerException
当您开始使用该字段时,您会得到一个,就好像它包含对您可以索引的实际数组对象的引用一样。
修改您的代码,以便在适当的位置分配一个实际数组并将对它的引用放入highestScores
:
highestScores = new int[117];
推荐阅读
- python - 如何将两个 2d numpy 数组复制到预分配数组
- sql - 对字符串中不同键值对的数据进行分组
- powershell - 注册表项的 Rename-Item 引发错误并创建副本而不是重命名
- javascript - React Jest 测试按钮 onClick
- django - 使用 get_context_data() 方法检索 DetailView Django 中的依赖对象列表
- c# - 在 AddHttpMessageHandler 方法中访问会话值
- python - 如果语句检查数据库中是否存在给定表单字段作为搜索条件的表?
- javascript - 这个javascript有什么错误?
- java - Drools:如何设置多线程(multithreadEvaluation)7.34.0 -Java Maven Spring
- clojure - 为什么 conj 可以产生比通常预期相反的结果