Я работаю над игрой, в которой использую класс, который позволит пользователю вводить выбор в виде строки для одного из трех вариантов: «атака», «защита» или «бегство». Это может быть логически обработано с помощью «исключающего ИЛИ» (XOR). Я решил попробовать использовать цикл while, используя эту логику вместо обычной конструкции Switch, чтобы посмотреть, что произойдет, вооружившись лишь небольшим количеством дискретной математики. Я знал, что условие while будет уродливым и длинным, но оно работает, черт возьми!, и мне это нравится! Я хотел знать, так как я хотел бы повторно использовать этот цикл while в других разделах кода, если бы был какой-то способ сохранить условие цикла while (например, как переменную, метод или что-то еще), чтобы я мог поместить его в в то время как условие цикла и не занимать 8 строк кода каждый раз. Вот мой цикл while. Не смейтесь, это работает. И это позволяет избежать попытки поймать. На самом деле работает очень чисто. Я разместил метод, который я использую ниже. Этот метод вызывается другим классом:
public static void fighterAction(){
String selection = null;
Scanner userChoice = new Scanner(System.in);
//Fighter 1 chooses combat action to perform: this is performed by
//(XOR) logic:
//(( a || b ) && !( a && b ) || c ) && !((( a || b ) && !( a && b ) && c ))
while((( !"attack".equals(selection) || !"defend".equals(selection) )
&& !( !"attack".equals(selection) && !"defend".equals(selection)
) || !"flee".equals(selection) ) &&
!((( !"attack".equals(selection) || !"defend".equals(selection)
) && !( !"attack".equals(selection) &&
!"defend".equals(selection) ) && !"flee".equals(selection) )))
{
System.out.println("Choose action: attack defend flee\n\nEnter: ");
selection = userChoice.next();
if((( !"attack".equals(selection) || !"defend".equals(selection) )
&& !( !"attack".equals(selection) &&
!"defend".equals(selection) ) || !"flee".equals(selection) )
&& !((( !"attack".equals(selection) ||
!"defend".equals(selection) ) &&
!( !"attack".equals(selection) &&
!"defend".equals(selection) ) &&
!"flee".equals(selection) )))
{
System.out.println("Invalid Entry!");
}else{
System.out.println(selection + " was chosen");
System.out.println("");
}
}
}
Опять же, я спрашиваю, есть ли способ использовать это предложение while (которое, я подчеркиваю, работает отлично):
(( !"атака".равные(выборка) || !"защита".равные(выборка) ) && !( !"атака".равные(выборка) && !"защита".равные(выборка) ) || !" бежать".равно(выбор) ) && !((( !"атака".равно(выбор) || !"защитить".равно(выбор) ) && !( !"атака".равно(выбор) && !"защитить ".equals(выборка) ) && !"flee".equals(выборка)) ))
чтобы он соответствовал условию цикла while:
while(FITS HERE){}
Спасибо!