有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否可以简洁地使用复杂条件进行while循环?

我正在开发一个游戏,在这个游戏中,我使用了一个类,允许用户输入一个选项作为字符串来执行3个选项之一:“攻击”、“防御”或“逃跑”。这可以由“异或”(XOR)逻辑处理。我决定尝试使用一个while循环,使用这种逻辑,而不是通常的开关构造,来看看会发生什么,只需要使用一点离散数学。我知道while条件会很难看很长时间,但它真的很管用!,我喜欢!我想知道,因为我想在代码的其他部分重用这个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子句(我强调,它非常有效):

(!“攻击”。等于(选择)| |!“防守”。相等(选择))&&!(!“攻击”。等于(选择)&&!“防守”。等于(选择)| |!“逃跑”。相等(选择))&&!(!“攻击”。等于(选择)| |!“防守”。相等(选择))&&!(!“攻击”。等于(选择)&&!“防守”。相等(选择))&&!“逃跑”。等于(选择)

使其符合while循环条件:

 while(FITS HERE){}  

谢谢


共 (2) 个答案

  1. # 1 楼答案

    我就是这样写的

    String select;
    while (true) {
       System.out.println("Enter: attack, defend or flee");
       selection = userChoice.nextLine();
       if (select.equals("attack") || select.equals("defend")||select.equals("flee"))
           break;
       System.out.println("Invalid input: " + select);
    }
    
  2. # 2 楼答案

    哇,哇,哇selection一次只能有一个值。有很多重构可以使代码更干净(比如使用枚举,而不是嵌入神奇的常量),但可以从逻辑上将整个过程压缩为

    while(!"attack".equals(selection) && !"defend".equals(selection) && !"flee".equals(selection)) { ... }