Tablica dwuwymiarowa i jej rozmiar

0

Cześć! Sorry że zawracam głowy z taką błahostką, ale jak to na świeżaka przystało - nie mogę sobie poradzić.

Zacząłem pisać taką klasę:

import java.util.Random;

public class Map {
private int MapSize;
private String[][] array = new String[MapSize][MapSize];

public Map(int x)
{
MapSize = x;
	for(int i = 0; i<MapSize;i++)
	{
		System.out.print("\n");
		for(int j=0;j<MapSize;j++)
			{
			System.out.print("[ ]");
			array[i][j]="[ ]";
			}		
	}
}

void showMap()
{
		for(int i=0; i< MapSize; i++){
	    for(int j=0; j< MapSize; j++)
	        System.out.print(array[i][j]);
	    System.out.println();
	}	
}
void spawnGift()
{
	Random randomSpawn = new Random();
	int Xposition = randomSpawn.nextInt(MapSize);
	int Yposition = randomSpawn.nextInt(MapSize);
	array[Xposition][Yposition] = "[X]";
	}



}

W klasie main mam:

Map mapa = new Map(10);

Jednak wywala mi błąd:

java.lang.ArrayIndexOutOfBoundsException: 0

Po zmianie kodu i dopisaniu wartości * private int MapSize; = 10;*
I skasowaniu wartości z konstruktora - kod działa. Jednak zależy mi na tym żeby wartość MapSize, była przypisywana przez konstruktor.

Jak tak zrobić? Jeżeli coś nie zrozumiale piszę, to śmiało krzyczcie, postaram się wytłumaczyć o co mi chodzi ;)
Pozdrawiam!

1

Gdy wywołujsze new Map(10) to najpierw wynonywane jest

private String[][] array = new String[MapSize][MapSize];

a dopiero potem wykonuje się konstruktor.

Tak wiec tablica jest tworzona gdy jeszcze MapSize nie jest ustawione na wartość x przekazaną do konstruktora
czyli zdaje się zawiera wartość 0. Tak więc masz tablice o wymiarze [0][0] .

Tablicę należy utworzyć w konstruktorze.

private int MapSize;
private String[][] array;
 
public Map(int x)
{
    MapSize = x;

    array = new String[MapSize][MapSize];
0

Dzięki wielkie! ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1