我正在开发一款游戏,我使用一个类,允许用户输入一个选项作为字符串来执行以下 3 个选项之一:“攻击”、“防御”或“逃跑”。这可以通过“异或”(XOR)进行逻辑处理。我决定尝试使用 while 循环来使用此逻辑,而不是通常的 Switch 构造,以了解会发生什么,并配备一点离散数学。我知道 while 条件会很丑陋而且很长,但它确实有效!而且我喜欢它!我想知道,因为我想在代码的其他部分重用这个 while 循环,是否有某种方法可以保存 while 循环条件(例如作为变量、方法或其他东西),以便我可以将其放入while循环条件和not每次占用8行代码。这是我的 while 循环。别笑,有效果。而且,它避免了 try-catch。它实际上运行得非常干净。我在下面发布了我使用的方法。该方法由另一个类调用:
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(选择) || !"防御".equals(选择) ) && !( !"攻击".equals(选择) && !"防御".equals(选择) ) | | !"逃离".equals(选择) ) && !((( !"攻击".equals(选择) || !"防御".equals(选择) ) && !( !"攻击".equals(选择) && !"defend".equals(selection) ) && !"flee".equals(selection)))
使其适合 while 循环条件:
while(FITS HERE){}
谢谢!
最佳答案
哇哦,哇哦,哇哦。 selection
一次只能有一个值。有许多重构可以使代码更加简洁(例如使用枚举,而不是嵌入魔术常量),但是您可以从逻辑上将整个代码折叠成
while(!"attack".equals(selection) && !"defend".equals(selection) && !"flee".equals(selection)) { ... }
关于java - 是否可以在 while 循环中简洁地使用复杂的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19392996/