java - 当我已经声明变量时如何修复空错误
问题描述
我正在制作 PVP RPG 游戏,显示框显示为“null”,而不是我已经声明的变量。
我已将该变量声明为用户的下一个输入,并将该信息存储在变量中。然后当我尝试显示变量时,它只显示“null”,
System.out.println("Welcome, Player One and Player Two!");
delay(1500);
System.out.println("What is your name, Player One?");
playerOne.name = userInput.nextLine();
我已经将 playerOne 声明为新角色(不同类别)
System.out.println("Your turn, " + playerOne.name+".");
if (p1Swordgo == 1) {
这是我要提出的问题。它在同一个主方法中,变量在主方法中声明,是的,我导入了扫描仪并声明了变量 userInput
我希望它是用户输入的内容,但它想出了 null。正如我之前所说,它在同一个主要方法中,应该不会出错,但它出现了“null”
import java.util.Random;
import java.util.Scanner;
public class Arena {
Random generator = new Random();
public static void main(String[] args) {
Character playerOne = new Character(10,10,0);
Character playerTwo = new Character(10,10,0);
boolean P1hasClass = false;
boolean P2hasClass = false;
int p1Swordgo = 0;
int p2Alchgo = 0;
int p2Archgo = 0;
Scanner userInput = new Scanner(System.in);
System.out.println("Welcome, Player One and Player Two!");
delay(1500);
System.out.println("What is your name, Player One?");
playerOne.name = userInput.nextLine();
delay(1000);
System.out.println("Hello, " +playerOne.name +".");
delay(1000);
System.out.println("What is your name, Player Two?");
playerTwo.name = userInput.nextLine();
delay(1000);
System.out.println("Hello, " +playerTwo.name +".");
delay(1500);
countdown();
System.out.println("Your turn, " + playerOne.name+".");
if (p1Swordgo == 1) {
if (p2Archgo == 1 || p2Alchgo == 1) {
if (playerOne.move == 1){
System.out.println("What do you want to do?" +'\n' +"1 = Move into range of " +playerTwo.name +'\n' +"2 = Heal" +'\n' +"3 = Forfeit");
int P1Choice = userInput.nextInt();
if (P1Choice == 1) {
playerOne.move --;
System.out.println(playerOne.move);
}
}
}
}
}
public static void delay ( int time){
try {
Thread.sleep(time);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
public static void countdown() {
delay(500);
System.out.println("Get ready to fight in 5,");
delay(1000);
System.out.println("4");
delay(1000);
System.out.println("3");
delay(1000);
System.out.println("2");
delay(1000);
System.out.println("1");
delay(1000);
System.out.println("Fight!");
delay(750);
}
}
然后在一个名为 Character 的类中
public class Character {
public int strength;
public double health;
public int move;
public String name;
public Character(double health, int strength, int move) {
this.health = health;
this.strength = strength;
this.name = name;
this.move = move;
}
}
在一个名为 SwordFighter 的课程中
public class SwordFighter extends Character {
public SwordFighter() {
super(60,15, 1);
}
}
在一个叫弓箭手的课上
public class Archer extends Character{
public Archer() {
super(45,20, 0);
}
}
最后,在一个名为 Alchemist 的类中 public class Alchemist extends Character {
public Alchemist() {
super(50,15, 0);
}
}
谢谢你的耐心,顺便说一句
解决方案
一旦两个玩家选择了他们的名字并且您使用 设置了它playerOne.name = userInput.nextLine();
,您将一个不同的对象(具有空名称)分配给playerOne
:
playerOne = new SwordFighter();
因此,在执行此行之后,playerOne.name
为空。
推荐阅读
- laravel - 如何在 routeIs 函数内的 laravel 刀片中包含变量
- .net - .Net Core 3.1 _Layout.cshtml 中的托管环境错误:CS0841:在声明之前无法使用局部变量“hostingEnv”
- arrays - 如何对 python 列表中的每一对数字求和?
- amazon-web-services - AWS EMR 上的 spark-submit 引发异常
- mysql - 在不构建项目的其余部分的情况下重建特定的共享对象 (libndbclient.so)?
- character-encoding - 使用Datastage,Sql server的法语字符编码问题
- excel - VBA for Excel 在 .xlam 中出现错误“91”,但在 .xlsm 中工作正常
- javascript - 有没有办法从其他文件向 HTML 添加代码?
- google-sheets - 根据多个标准谷歌表对唯一值求和
- pdf - 使用 Active PDF Toolkit 中的合并文件功能时未传输 T26 到 T37 字体