java - 是否可以在 while 循环中简洁地使用复杂的条件?

标签 java while-loop xor

我正在开发一款游戏,我使用一个类,允许用户输入一个选项作为字符串来执行以下 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/

相关文章:

java - WRITE_EXTERNAL_STORAGE 可能的目标文件夹

java - 什么是嵌套类型?

c++ - 在我的程序中使用 eof 然后不断循环为什么?

c# - 在 C# .net 中查找字符串的校验和

java - Xor 为 uint16 或 uint32 的字符串

java - 关于 tomcat 服务 webapps 和 web-inf 的问题

linux - Bash While 循环未结束

linux - 为什么我运行脚本时出现错误。我该如何修复它?

java - 是否可以使用 XOR 来检测多个条件中的一个是否为真?

java - 如何实现返回压缩流的 Java 8 通用方法,其中两个流中的对象依次出现?