首页 > 解决方案 > 使用数组变量的 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

标签: javaarrays

解决方案


Anint[]是一个对象类型,所以当你声明你的字段时

public int[] highestScore;

你得到的是一个可以包含对对象的引用int[]的字段。但是,您实际上从未将此类引用放入字段中,因此其值保持默认值,即null.

因此,NullPointerException当您开始使用该字段时,您会得到一个,就好像它包含对您可以索引的实际数组对象的引用一样。

修改您的代码,以便在适当的位置分配一个实际数组并将对它的引用放入highestScores

highestScores = new int[117];

推荐阅读