当前位置: 首页 > 知识库问答 >
问题:

Blackjack.java循环输入验证

蒲德曜
2023-03-14

我正在创建一个简单的21点java程序,我被while循环输入验证难住了。当要求用户抽牌时,他/她可以选择:(是/否)以及他们是否想再次玩。我的问题是,当我被提示抽牌时,我选择y,该字符只应提示抽牌。。。但似乎任何角色都会这样做。如果我想再次比赛,同样的情况也会发生。此外,当提示我再次播放时,我想返回while循环的开始,但我似乎无法调用该函数。我需要帮助!这是我的代码:

    import java.util.Random;
import java.util.Scanner;

public class BlackJack
{

    public static void main(String[] args)
    {

        char play = 'y';
        char drawAgain;
        int card1, card2;
        int nextCard = 0;


        Scanner keyboard = new Scanner(System.in);
        Random number = new Random();


        while (play != 'n')
        {
            card1 = number.nextInt(10) + 1;
            card2 = number.nextInt(10) + 1;

            System.out.print("First cards: ");
            System.out.println(card1 + ", " + card2);
            int cardTotal = card1 + card2;
            System.out.println("Total: " + cardTotal);
            System.out.print("Draw again? (y/n): ");
            drawAgain = keyboard.next().charAt(0);

            while (drawAgain != 'n')
            {
                int card3 = number.nextInt(10) + 1;
                System.out.println("Card: " + card3);
                cardTotal += card3;
                System.out.println("Total: " + cardTotal);

                if (cardTotal <= 21) {
                    System.out.print("Draw Again? (y/n): ");
                    drawAgain = keyboard.next().charAt(0);

                }

                if (cardTotal > 21) {
                    System.out.println("Bust");
                    System.out.print("Would you like to play again? (y/n): ");
                    play = keyboard.next().charAt(0);
                }


            }


        }
    }
}

共有1个答案

欧阳晗日
2023-03-14

这段代码有一些问题。

  1. 您将产生一个无限的for循环,因为如果point值为

下面讨论了这些问题。这应该是你想要的。

import java.util.Random;
import java.util.Scanner;

public class BlackJack
{
public static char getValidInput(){
    Scanner keyboard = new Scanner(System.in);

    String input = keyboard.next();
    while(!input.equals("yes") || !input.equals("no")){

        System.out.println("please input yes or no");
        input = keyboard.next();
    }
    return input.charAt(0);
}

public static void main(String[] args)
{

    char play = 'y';
    char drawAgain;
    int card1, card2;
    int nextCard = 0;


    Random number = new Random();

    while (play != 'n')
    {
        card1 = number.nextInt(10) + 1;
        card2 = number.nextInt(10) + 1;

        System.out.print("First cards: ");
        System.out.println(card1 + ", " + card2);
        int cardTotal = card1 + card2;
        System.out.println("Total: " + cardTotal);
        System.out.print("Draw again? (y/n): ");


        drawAgain = getValidInput();
        while (drawAgain != 'n')
        {
            int card3 = number.nextInt(10) + 1;
            System.out.println("Card: " + card3);
            cardTotal += card3;
            System.out.println("Total: " + cardTotal);

            if (cardTotal <= 21) {
                System.out.print("Draw Again? (y/n): ");

                drawAgain = getValidInput();
            }else{ //if (cardTotal > 21) {
                System.out.println("Bust");
                drawAgain ='n';
            }
        }
        play = getValidInput();
    }
}
}
 类似资料:
  • 我正在进行模拟测试,我正在努力创建一个循环,将循环输入12次,同时将每个输入添加到总和。 确定一个人在特定年份的平均体重。 对于每个月,您的算法应该输入该人当月的体重(正实数)。您的算法应该循环,重复输入,直到输入为正。 最后,您的算法输出平均权重。 在浏览了关于迭代控制结构的课堂笔记后,我想到了这个: 不幸的是,所有这些对我来说都是重复输入无限次,直到我输入一个大于12的数字。 我只想让控制台输

  • 我有一个类,其中我们将“两个时态对象之间的时间量”存储到一个长变量monthBt中,并将其用作“for循环”中的测试表达式。然而,我在azure sechub中收到中级安全警告“未检查循环条件的输入”。 验证和删除警告的最佳方法是什么?谢谢

  • 从指定范围(0,20)内且为int的用户处获取有效整数的最佳方法是什么。如果他们输入了无效的整数打印输出错误。 我在想这样的事情: 这是正确的还是有更好的方法?

  • 问题内容: 我必须在 while 循环中显示Scanner输入:用户必须插入输入,直到他写下“ quit”为止。因此,我必须验证每个输入以检查他是否写出“ quit”。我怎样才能做到这一点? 这行不通。如何验证每个用户的输入? 问题答案: 问题是nextLine() “使该扫描程序前进到当前行之外”。因此,当您调用该条件并且不保存返回值时,您将丢失用户输入的那一行。对第3行的调用返回另一行。 您可

  • 在生命数==0之后,while语句为false,必须退出循环。但在这种情况下,即使循环为false,也会执行循环。