2D массив по-прежнему равен нулю

#java #object #multidimensional-array

#java #объект #многомерный массив

Вопрос:

У меня есть 2D массив в классе Board для размещения объектов типа Ship. Конструктор класса Board инициирует 2D массив с объектами ship, однако он по-прежнему остается нулевым, когда я его проверяю.

 public class Ship{

    private int tons; // 1 element in 2d array

    public Ship(){
        this.tons=1;
    }

     public Ship(int t){
        this.tons=t;
    }

    public int getTons(){
        return this.tons;
    }

     public void setTons(){
        this.tons = 1;
    }
}
  
 import java.util.Random;

public class Board{

    private Ship battleShip[][];
    private Random rnd=new Random();

    public Board(){
      //setup board with null values
      Ship battleShip[][] = new Ship[5][5]; 

      // initialize
      for (int r=0; r < 5; r   )
           for (int c=0; c < 5; c   )
            battleShip[r][c]= new Ship();

    }
}
  

Ответ №1:

Вы объявили одну дополнительную переменную battleShip в конструкторе. используйте переменную-член класса, которую вы уже определили в class .

 private Ship battleShip[][];//<------------- use this
  

Конструктор должен быть изменен на это

 public Board(){
  //setup board with null values
  battleShip = new Ship[5][5]; //<----------  now member variable is initialed

  // initialize
  for (int r=0; r < 5; r   )
       for (int c=0; c < 5; c   )
        battleShip[r][c]= new Ship();

}
  

Ответ №2:

выполнение этого:

 public Board(){
      //setup board with null values
      Ship battleShip[][] = new Ship[5][5]; 
  

затеняет член класса battleShip и сохраняется как неинициализированное поле в классе