为什么这个 class 没有正确执行?

Why doesn't this class execute properly?

这是我的第一个 class 世界

public class World {

    private static char[][] world2D;
    private int characterRow;
    private int characterColumn;


    public World(int width, int height){
        world2D = new char[width][height];
        characterColumn = 0;
        characterRow = 0;

        for(int i = 0; i < world2D.length; i++){
            for(int j = 0; j < world2D[i].length; j++){
                world2D[i][j] = '-';
            }
        }

        world2D[characterRow][characterColumn] = 'P';
    }

    public void moveUp(){
        world2D[characterRow][characterColumn] = '-';
        if (characterRow > 0){
            characterRow -= 1;
        }
        world2D[characterRow][characterColumn] = 'P';
    }

    public void moveDown(){
        world2D[characterRow][characterColumn] = '-';
        if (characterRow < world2D.length){
            characterRow += 1;
        }
        world2D[characterRow][characterColumn] = 'P';
    }

    public void moveRight(){
        world2D[characterRow][characterColumn] = '-';
        if (characterColumn < (world2D[characterRow].length - 1)){
            characterColumn += 1;
        }
        world2D[characterRow][characterColumn] = 'P';
    }

    public void moveLeft(){
        world2D[characterRow][characterColumn] = '-';
        if (characterColumn > 0){
            characterColumn -= 1;
        }
        world2D[characterRow][characterColumn] = 'P';
    }

    public static void displayWorld(){
        for(int i = 0; i < world2D.length; i++){
            for(int j = 0; j < world2D[i].length; j++){
                System.out.print(world2D[i][j]);
            }
            System.out.println();
        }       
    }

}

这是我的第二个 class 叫 Driver

import java.util.Scanner;

public class Driver {
    public static void main(String[]args){
        @SuppressWarnings("resource")
        Scanner input = new Scanner(System.in);
        System.out.print("How tall should the world be?: ");
        int height = input.nextInt();
        System.out.print("How wide should the world be?: ");
        int width = input.nextInt();

        World myWorld = new World(width,height);
        World.displayWorld();
    }

}

为什么我不需要专门在 World 的 myWorld 实例上调用 displayWorld class?

如果我创建了多个 World 实例怎么办?这不可能是对的。

**编辑以获取更多详细信息

我想在 World class myWorld object 的实例上调用 class 方法之一(即 moveUp 或 moveDown)。但是,我无法将我对 object (myWorld) 的引用传递到这些方法中。我希望能够调用其中一种方法,它会更改二维数组中 'P' 的位置,并使用我定义的方法(包括 displayWorld 方法

将其打印出来

静态变量,例如 private static char[][] world2D,存在于 class 中,而不是 class 的对象。这意味着它们是通过 class 名称而不是实例名称访问的。由于您是在构造函数中初始化它,因此每次创建新世界时它都会更改,但每个实例的值都是相同的。看起来您应该使变量 world2D 成为非静态的(只需删除 static 关键字)并对函数 displayWorld() 执行相同的操作 然后,行 World.displayWorld(); 可以替换为 myWorld.displayWorld();

请参阅 this link 以了解有关 static 类型的更多信息。

如果要显示不同实例的世界,请从 public static void displayWorld() 中删除 static 并调用 myWorld.displayWorld()