首页 > 解决方案 > 当我已经声明变量时如何修复空错误

问题描述

我正在制作 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);
}

}

谢谢你的耐心,顺便说一句

标签: javanull

解决方案


一旦两个玩家选择了他们的名字并且您使用 设置了它playerOne.name = userInput.nextLine();,您将一个不同的对象(具有空名称)分配给playerOne

 playerOne = new SwordFighter();

因此,在执行此行之后,playerOne.name为空。


推荐阅读