2013-11-19 3 views
0

Я пытаюсь создать броневую систему для текстовой игры, используя 2D-массив на Java. Я все понял в голове, но код, похоже, не работает.2d массив в Java возвращает нулевой результат

public static String[][] armour = new String[2][3]; 
{ 
    armour[0][0] = "shirt"; 
    armour[0][1] = "plate"; 
    armour[0][2] = "iron"; 
    armour[1][0] = "1"; 
    armour[1][1] = "0.75"; 
    armour[1][2] = "0.5"; 
} 
public static void main(String[] args) { 
    System.out.println(armour[0][1]); 
} 

Это должно вернуть «тарелку», но это не так, и я искал его, изменяя его и все виды в течение нескольких часов, и теперь я не могу за жизнь мне понять это. Кто-нибудь здесь знает?

+0

Я думаю, ты путаешь '{ } 'block. Этот блок никак не связан с «armour». – m0skit0

+0

Да, я довольно новичок в Java (ну, программирование вообще), и я только наклонился о 2d массивах ~ 2 дня назад, так что да. :) – TheScottymo

ответ

1

Создание статического инициализатора:

static { 
    armour[0][0] = "shirt"; 
    armour[0][1] = "plate"; 
    armour[0][2] = "iron"; 
    armour[1][0] = "1"; 
    armour[1][1] = "0.75"; 
    armour[1][2] = "0.5"; 
} 

В противном случае, вам придется иметь экземпляр класса для того, чтобы получить блок кода выполняется.

Подробнее:

+0

О, спасибо! Это сработало: D Я ненавижу это, когда огромная проблема сводится к отсутствию одного слова. – TheScottymo

+0

Добро пожаловать. Upvote/accept, если вы сочтете это полезным. –

5

Вы используете инициализатор блок экземпляра, где вы должны были использовать статический один.

public static String[][] armour = new String[2][3]; 
static { 
    armour[0][0] = "shirt"; 
    armour[0][1] = "plate"; 
    armour[0][2] = "iron"; 
    armour[1][0] = "1"; 
    armour[1][1] = "0.75"; 
    armour[1][2] = "0.5"; 
} 

Попробуйте это, это сделает трюк. Вы не делаете экземпляр своего класса, и любой блок без ключевого слова static будет выполняться только при создании экземпляра.

Другой вариант заключается в использовании инициализатора блока массива:

public static String[][] armour = 
     {{"shirt", "plate", "iron"},{"1", "0.75", "0.5"}}; 

У меня есть несколько замечаний, хотя:

  • public static переменные рожон. использовать private переменные или константы (public static final)
  • Вы должны переместить информацию о броню их отдельный класс ИЛИ использовать Map для хранения пар ключ-значение: shirt -> 1
+3

Или инициализируйте как часть декларации, конечно. –

+0

Да, я продлил свой ответ. –

+0

В фактическом коде информация о броне находится в собственном классе. Это был просто класс испытаний – TheScottymo

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