Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NullPointerException但正在编译?_Java_Class_Nullpointerexception - Fatal编程技术网

Java NullPointerException但正在编译?

Java NullPointerException但正在编译?,java,class,nullpointerexception,Java,Class,Nullpointerexception,我正在写一个简单的命令行游戏。 我有很多函数和所有函数,只在这里发布基本函数 问题:程序可以编译,但当调用levelup()并选择一个数字时,我得到以下结果: You have 5 skill points to spend. What would you like to upgrade? [1:] STR [2:] DEF 1 Exception in thread "main" java.la

我正在写一个简单的命令行游戏。 我有很多函数和所有函数,只在这里发布基本函数

问题:程序可以编译,但当调用
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();

}
}
职业玩家{
字符串名;
int-hp;
int-str;
int-def;
字符串eff;
播放器(字符串n){
name=n;
hp=100;
str=1;
def=1;
eff=“无”;
}
}
班级游戏{
静态播放器p;
静态孔隙levelup(){
而(点数>0){
System.out.println(“\t[1:][tSTR\t\t\t[2:][tDEF”);
int lvlup=kb.nextInt();
开关(lvlup){
案例1:p.str++;
打破
案例2:p.def++;
打破
}
点--;
}
//变数
静态扫描仪kb=新扫描仪(System.in);
静态积分=5;
}
静态void start(){
System.out.print(“\t\t\t\t这样我们的冒险就开始了…”);
System.out.print(“\t您叫什么名字:”);
字符串nome=kb.next();
玩家p=新玩家(nome);
System.out.println(“\tHello”+p.name);
System.out.println(“\t您有5个技能点需要花费。\n\t您想升级什么?”);
levelup();
}
类cmdquest{
公共静态void main(字符串args[])引发异常{
扫描仪kb=新扫描仪(System.in);
//导入foes.txt以创建敌人的对象
java.io.File File=新的java.io.File(“foes.txt”);
扫描仪imp=新扫描仪(文件);

对于(int i=0;i你会得到一个
NullPointerException
,因为
p
null
。你在这里做了什么:

Player p = new Player(nome);
是声明一个局部变量
p
。静态类变量
p
未被触及,因此它保持为
null

这被称为:

某些声明可能会在其部分范围内被另一个声明隐藏 相同名称的声明,在这种情况下,不能使用简单名称 用于指声明的实体

名为n的类型的声明d隐藏了任何 在d出现点的作用域中名为n的其他类型 在d

删除
Player
,这样就可以引用静态类变量
p

p = new Player(nome);

您会得到一个
NullPointerException
,因为
p
null
。您在这里所做的:

Player p = new Player(nome);
是声明一个局部变量
p
。静态类变量
p
未被触及,因此它保持为
null

这被称为:

某些声明可能会在其部分范围内被另一个声明隐藏 相同名称的声明,在这种情况下,不能使用简单名称 用于指声明的实体

名为n的类型的声明d隐藏了任何 在d出现点的作用域中名为n的其他类型 在d

删除
Player
,这样就可以引用静态类变量
p

p = new Player(nome);

可能没有初始化
kb
p
堆栈跟踪会告诉您错误的确切位置。请查看
cmdquest.java
的第299行。您能否指定哪一行是299?另外,为了澄清-
NullPointerException
是一个运行时异常。这意味着在编译过程中它永远不会被捕获,仅在运行时。我猜它是
p
,它没有初始化!虽然可以使用诸如ESC Java之类的验证器在执行前尝试检测空指针,但在编译时不会检查空指针。可能没有初始化
kb
p
堆栈跟踪会告诉您错误的确切位置。请查看
cmd的第299行quest.java
。您能确切地指定哪一行是299吗?另外,为了澄清-
NullPointerException
是一个运行时异常。这意味着它在编译过程中永远不会被捕获,只会在运行时被捕获。我猜它是
p
,它没有初始化!尽管您可以使用verifie,但在编译时不会检查NullPointerrs,比如ESC Java,在执行之前尝试并检测这些。它成功了!非常感谢!我终于能够继续这个项目了。谢谢!它成功了!非常感谢!我终于能够继续这个项目了。谢谢!