gpt4 book ai didi

Java 2D 游戏 NullPointerException

转载 作者:行者123 更新时间:2023-11-30 03:11:33 24 4
gpt4 key购买 nike

我正在尝试用 Java 创建一个 2D 游戏,系统会提示用户输入行宽和列长。创建一个“世界”对象,打印时如下所示(其中 P 是玩家的角色):

P---
----
----
----

然后,用户可以输入向上、向下、向左、向右或退出,这将移动 P,如果移动会将角色移出 map ,则不执行任何操作。我的问题是在输入宽度和长度后,出现以下错误:

java.lang.NullPointerException
at World.displayWorld(Driver.java:90)
at Driver.main(Driver.java:28)

我相信这意味着 Java 将 worldDimensions.length 视为空/null?我以为我在创建世界对象时为其分配了一个值。非常感谢任何指导!

这是我的代码:

import java.util.Scanner;

public class Driver {
public static void main(String args[]) {

//Create a scanner object
Scanner input = new Scanner(System. in );

boolean exit = true;

//Prompt user to enter world width and height
System.out.print("World width: ");
int userWidth = input.nextInt();
System.out.print("World height: ");
int userHeight = input.nextInt();

//Create a world object
World world1 = new World(userWidth, userHeight);
world1.displayWorld();

System.out.println("Possible inputs: up, down, left, right, exit");

while (exit = true) {
//display world
world1.displayWorld();

System.out.print("ACTION > ");
String userAction = input.next();

if (userAction == "up" || userAction == "down" || userAction == "left" || userAction == "right" || userAction == "exit") {
switch (userAction) {
case "up":
world1.moveUp();
break;
case "down":
world1.moveDown();
break;
case "left":
world1.moveLeft();
break;
case "right":
world1.moveRight();
break;
case "exit":
exit = false;
break;
}
} else {
System.out.println("Invalid Input. Possible inputs are: up, down, left, right, or exit.");
}
}

}
}

class World {
static private char[][] worldDimensions;
static private int characterRow;
static private int characterColumn;

public World(int userWidth, int userHeight) {
char[][] worldDimensions = new char[userHeight][userWidth];
int characterRow = 0;
int characterColumn = 0;

for (int row = 0; row < worldDimensions.length; row++) {
for (int column = 0; column < worldDimensions[row].length; column++) {
if (characterRow == row && characterColumn == column) {
worldDimensions[row][column] = (char)
'P';
} else {
worldDimensions[row][column] = (char)
'-';
}
}
}
}

public void displayWorld() {
for (int row = 0; row < worldDimensions.length; row++) {
for (int column = 0; column < worldDimensions[row].length; column++) {
System.out.print(worldDimensions[row][column]);
}
System.out.println();
}
}

public void moveUp() {
if (characterRow - 1 >= 0) {
characterRow--;
}
}

public void moveDown() {
if (characterRow + 1 <= worldDimensions[0].length) {
characterRow++;
}
}

public void moveLeft() {
if (characterColumn - 1 >= 0) {
characterColumn--;
}
}

public void moveRight() {
if (characterRow + 1 <= worldDimensions.length) {
characterRow++;
}
}
}

最佳答案

您正在构造函数内部隐藏 worldDimensions。本地声明不会为您提供与先前声明相同的字段。

只需删除声明即可(至少对于该错误):

worldDimensions = new char[userHeight][userWidth];

关于Java 2D 游戏 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33529846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com