虽然循环不起作用

时间:2018-04-04 04:37:05

标签: java

我只是想解释(为什么)以下代码无效的原因以及使代码运行的解决方案(如何)。

该计划的目标是获得用户输入的扑克牌,J,Q,K,A,小写或大写。程序必须只接受其中一个值,因此需要验证用户输入,显示错误并提示输入接受值。然后程序必须取用户输入的值,并将扑克牌的名称打印到控制台上,Jack,Queen,King,Ace。

package practical_1;

import static java.lang.System.out;
import java.util.Scanner;

public class Question_4 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

            String Usr_Card;                
            out.print("Enter Card Letter Here....   ");
            Usr_Card = input.next();
            Usr_Card = Usr_Card.toUpperCase();


            while (Usr_Card != "K" || Usr_Card != "Q" || Usr_Card != "J" || Usr_Card != "A"){
                out.print("Invalid Input\nEnter Valid Card Letter Here:   ");
                Usr_Card = input.next();
                Usr_Card = Usr_Card.toUpperCase();
            }

            switch (Usr_Card) {
                case ("J"): 
                    out.print("Jack");
                    break;
                case ("Q"): 
                    out.print("Queen");
                    break;
                case ("K"): 
                    out.print("King");
                    break;
                case ("A"): 
                    out.print("Ace");
                    break;
                }

    }

}

3 个答案:

答案 0 :(得分:3)

OR运算符||如果任何section为true,则返回true。在您的示例中,如果卡不是K或不是Q或不是J或不是A,请继续循环。

让我们打破它。用户输入“K”

Usr_Card != "K" // false
Usr_Card != "Q" // true
Usr_Card != "J" // true
Usr_Card != "A" // true

false || true || true || true === true // continue the loop

我们真正想要检查的是输入是否无效。当它与K,Q,J或A中的至少一个不匹配时,输入无效。或者更好地说,当不是K而不是Q而不是J而不是A时。

我们只是从||改变我们的条件到&&同样的例子

Usr_Card != "K" // false
Usr_Card != "Q" // true
Usr_Card != "J" // true
Usr_Card != "A" // true

false && true && true && true === false // do not continue the loop

while (Usr_Card != "K" && Usr_Card != "Q" && Usr_Card != "J" && Usr_Card != "A")

让我们尝试一个无效的例子。使用输入“A”

Usr_Card != "K" // true
Usr_Card != "Q" // true
Usr_Card != "J" // true
Usr_Card != "A" // true

true && true && true && true === true // continue the loop

正如您所看到的,由于我们的AND&& amp;& amp;&操作

正如Scary Wombat指出的那样,你不应该在字符串中使用==!=。您应该使用.equals

while( !Usr_Card.equals("K") && !Usr_Card.equals("Q") && !Usr_Card.equals("J") && !Usr_Card.equals("A") )

答案 1 :(得分:0)

这个表达式,

  

(Usr_Card!=“K”|| Usr_Card!=“Q”|| Usr_Card!=“J”|| Usr_Card!=“A”)

始终求值为true,因此循环永不退出。

这里需要AND逻辑,例如:

  

(Usr_Card!=“K”&& Usr_Card!=“Q”&& Usr_Card!=“J”&& Usr_Card!=“A”)

答案 2 :(得分:0)

while循环中的条件更改为:

while (Usr_Card.equals("K") && Usr_Card.equals("Q") && Usr_Card.equal("J") && Usr_Card.equals("A"))    

编辑:正如@ScaryWombat在评论中所指出的,字符串比较方法已从'!='更改为equals()