Я программирую текстовую RPG-игру для Android, чтобы познакомиться с Java и XML. Я хочу показать строковый массив вариантов в ListView кнопок, и в зависимости от того, какая кнопка нажата, я хочу обновить действие соответствующим новым набором вариантов.Альтернатива 1000s операторов if-then-else
Например, позволяет сказать, что игра начинается со следующими вариантами:
{option1, option2, option3, option4}
Если пользователь нажимает на option2 я хочу, чтобы отобразить:
{2-option1, 2-option2, 2-option3, 2-option4}
или позволяет сказать, что пользователь нажал на 4 вместо 2. Затем:
{4-option1, 4-option2, 4-option3, 4-option4}
Итак, я пытаюсь определить скорость, эффективную/память eff способ определения следующего String[]
для отображения.
Первоначально я думал о построении дерева GIANT if-then-else (или оператора switch - не имеет значения), где бы была инструкция if для каждой возможной опции. Например:
// choice
это выбранный пользователем вариант
if(choice==option1){
return {"1-option1", "1-option2", "1-option3"}
}else if(choice== 1-option1){
return {"1-1-option1","1-1-option2","1-1-option3"}
И список будет продолжаться и дальше, пока каждый возможный выбор не возвращает String [], который соответствует следующей группе вариантов, которые являются для отображения.
Тогда я начал думать, может быть, было бы чище и проще это сделать с объектами:
MyObject newObject = MyObject(choice)
newObject.getOptions()
где choice
является параметр конструктора, который инициализирует String[]
к надлежащему следующему набору параметров; и getOptions() возвращает это String[]
Однако, это будет много объектов, и я не уверен, что это упростит работу над методом if/switch.
Итак, любые идеи эффективного способа справиться с чем-то подобным?
Уродливые, ломкие, неподъемные. Вы должны беспокоиться об этом, прежде чем думать об эффективности. – duffymo
Я согласен, поэтому я хочу решить эту «головоломку» с надлежащей структурой, и я считаю, что метод if/switch или метод объекта, который я предложил, недостаточны. –
Имеет ли он более двух уровней? Он может быть определен в XML и unmarshalled в иерархическом наборе объектов набора опций. – laune