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,在执行之前尝试并检测这些。它成功了!非常感谢!我终于能够继续这个项目了。谢谢!它成功了!非常感谢!我终于能够继续这个项目了。谢谢!