Принято считать, что Item
является enum
, вы можете действительно использовать switch
заявление:
switch(map[x+1][y+1]) {
case Item.O : System.out.println("Object is in the way."); break;
case Item.F : System.out.println("Food is in the way."); break;
...
}
Однако гораздо более гибкое решение будет не хранить enum
в массиве , а реальные объекты, которые реализуют общий интерфейс, который предоставляет необходимые методы. Затем реализуйте разные классы, которые реализуют различное поведение ваших объектов.
Иерархия классов может выглядеть следующим образом:
interface PrintText {
void printText();
}
class Food implements PrintText {
public void printText() {
System.out.println("Food is in the way.");
}
}
class SomeObject implements PrintText {
public void printText() {
System.out.println("Object is in the way.");
}
}
Вы можете инициализировать массив, похожий на этот:
// initialize array
PrintText[][] map = new PrintText[WIDTH][HEIGHT];
map[0][0] = new Food();
map[0][1] = new SomeObject();
...
А позже вызывать метод так, без какой-либо switch
или if
заявление - полиморфизм заботится об этом:
// call the method
map[x+1][y+1].printText();
На боковой ноте не используйте необработанные массивы. Вместо этого используйте класс коллекции, например ArrayList
.
'Item' является' enum'? –
Да, извините, забыл добавить это. – Logic
Похоже, вам просто нужен вложенный цикл для этого, чтобы перейти от x-1 к x + 1 и y-1 к y + 1, просто убедитесь, что пропустили (x, y), если необходимо, – phflack