2015-05-01 9 views
1

Вот мой первый класс называется WorldПочему этот класс не работает правильно?

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(); 
     }  
    } 

} 

Вот мой второй класс под названием 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(); 
    } 

} 

Почему мне не нужно вызывать displayWorld конкретно на экземпляре MyWorld класса World?

Что делать, если я создал несколько экземпляров World? Это неправильно.

** редактировать подробнее

Я хочу, чтобы вызвать один из методов класса (т.е. MoveUp или MoveDown) на экземпляре объекта Всемирного класса MyWorld. Однако я не могу передать свою ссылку на этот объект (myWorld) на эти методы. Я хочу иметь возможность вызвать один из этих методов, который изменяет положение «P» в 2-мерном массиве и распечатывает его с использованием методов, которые я определил, включая метод displayWorld

+0

Привет, я не получил четкого представления о вашей проблеме. Не могли бы вы проиллюстрировать это более подробно? – theguywhodreams

+0

Я хочу вызвать один из методов класса (т. Е. MoveUp или moveDown) в экземпляре объекта myworld класса World. Однако я не могу передать свою ссылку на этот объект (myWorld) на эти методы. Я хочу иметь возможность вызвать один из этих методов, который изменяет положение «P» в 2-мерном массиве и распечатывает его с использованием методов, которые я определил, включая метод displayWorld – Efie

+1

TAsk не нужно снисходительно. I Я спрашиваю, потому что я новичок в программировании и не понимаю, почему он не работает. Если вы здесь не для того, чтобы помочь или объяснить, пожалуйста, оставьте – Efie

ответ

1

Пожалуйста, обратитесь к this ссылке Узнайте больше о типах static.

Если вы хотите отобразить миры разных экземпляров, удалите static из public static void displayWorld() и позвоните по номеру myWorld.displayWorld().

1

Статические переменные, такие как частные static char [] [] world2D, существуют внутри класса, а не объекты этого класса. Это означает, что они доступны через имя класса, а не имя экземпляра. Поскольку вы инициализируете его в своем конструкторе, он будет изменяться каждый раз при создании нового мира, но значение будет одинаковым для каждого экземпляра. Похоже, что вы должны сделать переменную world2D нестатическим (просто удалить статическое ключевое слово) и сделать то же самое на функцию displayWorld() Затем линия World.displayWorld(); может быть заменена myWorld.displayWorld();

Смежные вопросы