当前位置: 首页 > 面试题库 >

NullPointerException但可以编译吗?

安泰平
2023-03-14
问题内容

我正在写一个简单的命令行游戏。我有很多功能,所有功能都将在这里发布。

问题:程序可以编译,但是当levelup()被调用并选择了一个数字时,我得到了:

        You have 5 skill points to spend.
        What would you like to upgrade?
        [1:]    STR                     [2:]    DEF
1
Exception in thread "main" java.lang.NullPointerException
        at Game.levelup(cmdquest.java:300)
        at Game.start(cmdquest.java:336)
        at Menu.show_menu(cmdquest.java:195)
        at cmdquest.main(cmdquest.java:263)

这是我的代码:

class Player{
    String name;
    int hp;
    int str;
    int def;
    String  eff;

    Player(String n) {
    name = n;
    hp = 100;
    str = 1;
    def = 1;
    eff = "none";
    }
}


class Game{

    static Player p;

    static void levelup(){
        while (points > 0){
            System.out.println("\t[1:]\tSTR\t\t\t[2:]\tDEF");
            int lvlup = kb.nextInt();

            switch (lvlup){
                case 1: p.str++;
                    break;
                case 2: p.def++;
                    break;
            }

            points--;
        }

    //variables
    static Scanner kb = new Scanner(System.in);
    static int points = 5;

    }

static void start(){

        System.out.print("\t\t\t\tAnd so our adventure starts.....");

        System.out.print("\tWhat's your name: ");
        String nome = kb.next();
        Player p = new Player(nome);

        System.out.println("\tHello " + p.name);
        System.out.println("\tYou have 5 skill points to spend.\n\tWhat would you like to upgrade?");
        levelup();

    }



class cmdquest{

public static void main(String args[]) throws Exception{

    Scanner kb = new Scanner(System.in);

    //Importing foes.txt to create objects of foes
    java.io.File file = new java.io.File("foes.txt");
    Scanner imp = new Scanner(file);

    for(int i =0; i<3; i++){
        foes[i]=foe.leDados(imp);
    }
    //____________________________________________

    Game.start();

}
}

有人可以在这里指出正确的方向吗?我究竟做错了什么?我感觉这是类“玩家”和在“游戏”类中创建的对象的类问题。


问题答案:

你得到一个NullPointerException因为pnull。您在这里做了什么:

Player p = new Player(nome);

是声明 局部 html" target="_blank">变量p。静态类变量p保持不变,因此保持不变null

这称为阴影(JLS,第6.4.1节):

某些声明可能在其作用域的一部分中被同名的另一个声明遮蔽,在这种情况下,不能使用简单的名称来引用已声明的实体。

名为n的类型的声明d遮盖了在范围d内遍及d的整个范围内范围内的任何其他名为n的类型的声明。

删除Player,因此p您需要对静态类变量的引用:

p = new Player(nome);


 类似资料:
  • 问题内容: 当存在后置条件时,该方法的返回值一定不能为null,该怎么办? 我可以 但是断言可以关闭! 那可以吗 ? 还是针对此类情况使用用户定义的异常(例如NullReturnValueException)更好? 问题答案: 我认为在JVM为您执行操作之前尽早抛出NPE没问题-特别是对于null参数。对此似乎有一些争论,但是Java SE库中有许多示例正是这样做的。我不明白为什么NPE在您自己不

  • 问题内容: 注意:这是从Comparable和Comparator合约衍生出来的,涉及null 该代码可以在Eclipse(20090920-1017)中编译并正常运行 但是它不能在上编译javac 1.6.0_17。这是错误消息: 有人可以解释为什么差异吗?这是一个错误吗?如果是这样,谁有错误? 问题答案: 这是一个已确认的错误:错误ID 6468354。这是相关的摘录: 此问题是由以下事实引起

  • 我对龙目岛或月食有问题,不确定是哪一个。我有一个Spring Boot maven项目,我正在使用Lombok。我在pom中添加了这个。xml文件,我使用了用于eclipse的lombok安装。 发生的事情是,我可以对项目进行和以及maven更新,一切都按预期构建。一旦我去运行项目,错误就开始出现,我得到错误,例如: 在运行项目时,有什么事情可以让龙目岛脱颖而出吗?! 我正在运行Eclipse O

  • 问题内容: 为什么可以,但不能编译? 问题答案: 常量被评估为int,因此会溢出并为您提供一个新的int,该int可分配给,同时也被评估为equals ,而不能分配给。

  • 问题内容: 我不得不发现我的项目中有Java代码,该代码可以在Eclipse中编译并正常运行,但是会在javac中引发编译错误。 一个完整的代码段: javac中的编译返回: 现在,此错误阻止在Maven中构建项目。由于Eclipse编译器具有更高的容忍度,因此我现在不得不假设代码段的定义和用法如上所述,静态方法不是有效的Java吗? 问题答案: 似乎Sun的1.6 JDK无法推断正确的类型。以下

  • 问题内容: 使用JDK 11,Eclipse 2019-03和jaxb- api(版本2.4,最新版本在maven存储库中可用)时,Eclipse中的Java编辑器会突出显示以下行: 作为错误: 包javax.xml可以从多个模块访问:未命名的java.xml 但是代码已编译,并且“问题”选项卡中未显示任何错误。删除jaxb-api依赖关系会使错误消失。该项目中的jaxb-api位于类路径上,并包