" if(int == 1)"没有工作

时间:2016-04-22 05:40:13

标签: java if-statement

所以我正在努力学习Java,并且一直在编写基于 21场比赛游戏的基本程序;每位玩家轮流参加1,2或3场比赛。参加最后一场比赛的球员输了。

直到我发现当用户即将获胜时,程序才会进入最终的else if声明;它会跳过它并返回给用户,而计算机没有进行任何匹配。附件是我为计算机转过来编写的方法。

public static int ComputerPlays(int matches){ //Method for the computers turn
    int matchesTaken = 0;

    if (matches > 7){ matchesTaken = new Random().nextInt(3)+1; }
    else if (matches > 4 && matches < 8){ matchesTaken = matches - 4; }
    else if (matches < 5){ matchesTaken = matches - 1; }
    else if (matches == 1){ matchesTaken = 1; }

    System.out.println("Computer takes " + matchesTaken + " matches");
    return(matches - matchesTaken);
}

else if (matches == 1){ matchesTaken = 1; }行是我遇到问题的地方。任何帮助将不胜感激。

P.S。我意识到我可以将else if变成else语句,但主要的是我想知道问题是什么,而不仅仅是绕过它。

9 个答案:

答案 0 :(得分:2)

您应该在(matches < 5)条件之前移动(matches == 1)。在(matches < 5)之前无法访问代码,因为public static int ComputerPlays(int matches){ //Method for the computers turn int matchesTaken = 0; if (matches > 7){ matchesTaken = new Random().nextInt(3)+1; } else if (matches > 4 && matches < 8){ matchesTaken = matches - 4; } else if (matches == 1){ matchesTaken = 1; } else if (matches < 5){ matchesTaken = matches - 1; } System.out.println("Computer takes " + matchesTaken + " matches"); return(matches - matchesTaken); } 也满足此条件。

更新代码:

{{1}}

答案 1 :(得分:0)

比赛&lt;总是会到达5之前匹配== 1意味着它永远不会触发第二个if。所以要么改变if的顺序,要么将另一个参数添加到你的小于5,即匹配&lt; 5&amp;&amp; match&gt; 1)。

答案 2 :(得分:0)

条件(matches == 1)将无法访问,因为您之前的条件总是使您的后期条件成立,即。if (matches < 5)实际上考虑matches == 1。您可以将最后两个条件设为:

else if (matches < 5 && matches != 1){ matchesTaken = matches - 1; }
    else if (matches == 1){ matchesTaken = 1; }

或喜欢

else if (matches < 5 && matches > 1){ matchesTaken = matches - 1; }
    else if (matches == 1){ matchesTaken = 1; }

答案 3 :(得分:0)

你的问题是声明

else if (matches < 5){ matchesTaken = matches - 1; }
当匹配为1时,

将为真。因此,将永远不会输入else。您可以将其更改为

else if (matches < 5 && matches != 1){ matchesTaken = matches - 1; }

这样,当匹配数为1并且后续块可以成功执行时,它不会触发。

答案 4 :(得分:0)

else if (matches == 1){ matchesTaken = 1; }

之前

else if (matches < 5){ matchesTaken = matches - 1; }

订单很重要。在IF_ELSE中,一旦匹配发生,它不会检查下一个条件。在您matches<5为真的情况下,它不会检查matches==1

答案 5 :(得分:0)

您已经检查了else if (matches < 5)然后它无用的检查 else if (matches == 1),因为上述条件将结束if链。所以你可以改变 else if (matches < 5)else if (matches < 5 && matches !=1)使最后一个语句也可以访问。

答案 6 :(得分:0)

当你使用else if时,首先使用相等的条件(==)然后去大于或等于(X> = Y)或小于或等于(X <= Y)条件。

首先满足条件的语句将执行,如果语句将忽略,则执行其余的其他语句。

快乐的编码!

答案 7 :(得分:0)

if (matches > 7){ matchesTaken = new Random().nextInt(3)+1; }
else if (matches > 4 && matches < 8){ matchesTaken = matches - 4; }
else if (matches < 5){ matchesTaken = matches - 1; }
else if (matches == 1){ matchesTaken = 1; }

在您的代码中首先执行else if (matches < 5){ matchesTaken = matches - 1; }

此行首先执行,此行也满足matches == 1,这就是为什么在else if (matches == 1){ matchesTaken = 1; }

时它永远不会进入下一行(matches == 1

答案 8 :(得分:0)

1小于5.这意味着当匹配等于1时,它将始终在语句中捕获&#34;否则if(匹配&lt; 5){matchesTaken = matches - 1; }&#34 ;.

这就是为什么(匹配== 1)永远不会被执行的原因。