我正在写一个简单的命令行游戏。我有很多功能,所有功能都将在这里发布。
问题:程序可以编译,但是当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
因为p
是null
。您在这里做了什么:
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位于类路径上,并包