Java 为什么';这个类不能正确执行吗?
这是我的第一节课,叫世界Java 为什么';这个类不能正确执行吗?,java,class,instance,Java,Class,Instance,这是我的第一节课,叫世界 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;
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();
}
}
}
为什么我不需要在世界类的myWorld实例上专门调用displayWorld呢
如果我创建了多个世界实例呢?这不可能是对的
**编辑以获取更多详细信息
我想在世界类myWorld对象的实例上调用一个类方法(即moveUp或moveDown)。但是,我无法将对该对象(myWorld)的引用传递到这些方法中。我希望能够调用其中一个方法,该方法可以更改“P”在二维数组中的位置,并使用我定义的方法将其打印出来,包括displayWorld方法
静态变量,例如private Static char[][]world2D,存在于类中,而不是该类的对象。这意味着可以通过类名而不是实例名来访问它们。由于您正在构造函数中初始化它,因此每次创建新世界时它都会更改,但每个实例的值都相同。看起来您应该使变量world2D成为非静态的(只需删除static关键字),并在函数displayWorld()上执行相同的操作 然后,行
World.displayWorld()代码>可以替换为myWorld.displayWorld()代码>请参阅链接以了解有关静态类型的更多信息
如果要显示不同实例的世界,请从publicstaticvoiddisplayworld()
中删除static
,然后调用myWorld.displayWorld()
您好,我不清楚您的问题是什么。您想更详细地说明一下吗?我想在世界类myWorld对象的实例上调用一个类方法(即moveUp或moveDown)。但是,我无法将对该对象(myWorld)的引用传递到这些方法中。我希望能够调用其中一个方法,它可以更改“P”在二维数组中的位置,并使用我定义的方法(包括displayWorld methodTAsk)将其打印出来,无需居高临下。。我问这个问题是因为我是编程新手,不明白为什么它不起作用。如果你不在这里帮助或解释,请不要担心<代码>静态
类型对于新手来说非常混乱。你会掌握窍门的。:)在我的答案中贴了一个链接,你可能想看看。谢谢你,这肯定会让它变得清晰。我正在使用Eclipse,它告诉我将这些值更改为静态值。我想我没有正确引用myWorld的实例。感谢您的帮助:]
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();
}
}