java - While 循环不起作用

标签 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;
                }

    }

}

最佳答案

或运算符||如果任何部分为 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 AND 不是 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 && 操作,我们仅在不匹配任何有效字符时才继续循环。

正如 Scary Wombat 所指出的,您不应该将 ==!= 与字符串一起使用。您应该使用 .equals

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

关于java - While 循环不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49642879/

相关文章:

java - 如何只允许用户输入a-z的输入并使用if语句提示正确的输入

java - JTextArea 行到 ArrayList<String>

java - 一项或多项 Activity

java - 执行后如何访问Callable Future的参数?

java - Spring Boot 2.0.5 问题部署

java - 标准 zip 实用程序无法解压缩由 java.util.zip 压缩的文件

java - 为什么当客户端被SIGKILL杀死时会调用服务器上的channelInactive?

java - 将数组转换为 LinkedList

java - Servlet 调度程序抛出异常

java - 如何提高 Android 低功耗蓝牙 GATT 吞吐量?