Java嵌套If语句 - 或与!=相比

时间:2017-05-19 00:54:17

标签: java if-statement

我不知道如何为这个问题提供标题,但基本上这是我的二十一点程序的一部分。此外,由于我不知道如何标题,我不知道如何查找,这就是我在这里问的原因。所以我说当用户为ace值输入1或11时,如果他们输入1或11以外的东西,它会再次要求用户输入1或11.在我的程序中一切正常,除非用户输入1,然后它再次询问问题。如果输入不等于1或11,程序应该再次询问。这是我的代码,因为我确保它总是给出一个用于测试目的的ace:

String card1="A";
int total=0;
Scanner input_var=new Scanner(System.in);
if (card1=="A"){
    System.out.println("Do you want a 1 or 11 for the Ace?: ");
    int player_ace_selection=input_var.nextInt();
    if ((1|11)!=(player_ace_selection)){
        System.out.println("Please enter a 1 or 11: ");
        int new_selection=input_var.nextInt();
        total=total + new_selection;
    }
    else {
        total=total + player_ace_selection;
    }
}
System.out.println(total);

提前致谢。

3 个答案:

答案 0 :(得分:3)

表达式(1|11)使用二进制OR,它生成11

    11 = 01001
     1 = 00001
(11|1) = 01001

因此,比较与11!=player_ace_selection

相同

您应该将代码更改为使用逻辑OR,即

if (1!=player_ace_selection && 11!=player_ace_selection) {
    ...
}

此外,您需要修复card1 == "A"

card1.equals("A")比较

答案 1 :(得分:1)

尝试while循环,而不是If语句。 while循环可确保程序等待用户选择正确的答案。你的逻辑操作也犯了错误。在此上下文中使用“OR”的正确方法是使用“||”分别将用户输入与“1”和“11”进行比较。

    String card1="A";
    int total=0;
    Scanner input_var=new Scanner(System.in);
    if (card1.equals("A")){
        System.out.println("Do you want a 1 or 11 for the Ace?: ");
        int player_ace_selection=input_var.nextInt();

        while(player_ace_selection != 1 && player_ace_selection != 11){
            System.out.println("Do you want a 1 or 11 for the Ace?: ");
            player_ace_selection = input_var.nextInt();                
        }
        total += player_ace_selection;
    }

    System.out.println(total);

答案 2 :(得分:0)

您的代码中存在一些问题,请考虑此示例并与您的代码进行比较。

String card1="A";
int total=0;
Scanner input_var=new Scanner(System.in);
if (card1.equals("A")){ // compare the content not the reference (==)
   System.out.println("Do you want a 1 or 11 for the Ace?: ");
   try{ // wrap with try-catch block
       int player_ace_selection = Integer.parseInt(input_var.nextLine()); //read the entire line and parse the input
       if ((player_ace_selection!=1)&&(player_ace_selection!=11)){
             System.out.println("Please enter a 1 or 11: ");
             try{
                int new_selection = Integer.parseInt(input_var.nextLine()); //again read the entire line and parse the input
                total=total + new_selection;
             }catch(NumberFormatException e){
                   // do something to catch the error
             }
        }
        else {
             total=total + player_ace_selection;

        }

    }catch(NumberFormatException e){
             // do something to catch the error
    }
    System.out.println(total);

}