首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局变量不识别用户输入的数字

全局变量不识别用户输入的数字
EN

Stack Overflow用户
提问于 2016-09-15 03:14:03
回答 2查看 34关注 0票数 1
代码语言:javascript
复制
import java.util.Scanner;




public class Blackjack {

    class Commands {
        static final String yes = "yes";
        static final String no = "no";
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        //Opponent player2 = new Opponent();
        double AiCard1 = 0;
        double AiCard2 = 0;
        double AiCard3 = 0;
        double AiTotalcard3 = AiCard1 + AiCard2 + AiCard3;
        double card1 = 0;
        double card2 = 0;
        double card3 = 0;
        double card4 = 0;
        double total2 = card1 + card2 + card3 + card4;
        double total = card1 + card2 + card3;



        System.out.println("Hello and Welcome to my custom version of blackjack!");
        System.out.println("You will start off with $300");
        System.out.println();
        System.out.println("Do you want to read the rules before playing?");
        System.out.print("Press 1 if yes, press 2 for no");


            int choice = input.nextInt();
            switch (choice) {
            case 1: 
                System.out.println("You have 4 cards to get as close to 21 as possible.  Whoever is closest to 21 wins");
                break;
            default:
                break;
        }




        int balance = 300;

        System.out.println("Your bank balance is $" + balance);
        //user places a bet
        System.out.println("Place a bet");

        int bet = input.nextInt();
        System.out.println("You placed a bet of " + bet);

        //this is the AI 
        AiCard1 = Math.random() * 12 + 1;
        AiCard1 = Math.round(AiCard1);
        AiCard2 = Math.random() + 12 + 1;
        AiCard2 = Math.round(AiCard2);
        double AiTotal2cards = AiCard1 + AiCard2;
        if(AiTotal2cards < 15) {
            AiCard3 = Math.random() * 12 + 1;
            AiCard3 = Math.round(AiCard3);
            AiTotalcard3 = AiCard1 + AiCard2 + AiCard3;
        }



        card1 = Math.random() * 12 + 1;
        card1 = Math.round(card1);
        System.out.println("Your first card was a " + card1);
        System.out.println();

        card2 = Math.random() * 10 + 1;
        card2 = Math.round(card2);

        System.out.println("Your second card was a " + card2);
        System.out.println();

        System.out.println("Your cards add up to " + (card1 + card2));
        System.out.println("Do you want to add another card?");
        String answer = input.next();
        here:
        if(answer.equals(Commands.yes)) {

            card3 = Math.random() * 12 + 1;
            card3 = Math.round(card3);
            System.out.println("Your third card was a " + card3);
            System.out.println("Your cards add up to " + (card1 + card2 + card3));
            total = card1 + card2 + card3;

            if(total > 21) {
                System.out.println("You lose");
                break here;
            }
            System.out.println("Do you want to add another card?");


            String answer1 = input.next();
            if(answer1.equals(Commands.no)){
                break here;
            }
            if(answer1.equals(Commands.yes)) {

                card4 = Math.random() * 12 + 1;
                card4 = Math.round(card4);
                System.out.println("Your fourth card was a " + card4);
                System.out.println("Your cards add up to " + (card1 + card2 + card3 + card4));
                total2 = card1 + card2 + card3 + card4;

                if(total2 > 21) {
                    System.out.println("You lose");
                    break here;
                }
                break here;
            }
        }
        System.out.println("Your total cards were " + total2);
        System.out.println("AI total cards were " + AiTotalcard3);
        input.close();

    }
}

当您运行程序时,我希望在用户通过程序时,顶部的变量会有新的数字保存到这些变量中。是否有更好的方法来做到这一点,因为控制台输出的总数总是为0。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-15 03:25:00

首先让我们来看看AiTotalcard3

对于这种情况,它不应该总是输出0,更确切地说,在AiCard1 + AiCard2 >= 15的情况下,它将输出0,这可能经常发生。

如果您通过实际代码进行跟踪,这是有意义的。发生的第一件事是那些初始化器:

代码语言:javascript
复制
double AiCard1 = 0;
double AiCard2 = 0;
double AiCard3 = 0;
double AiTotalcard3 = AiCard1 + AiCard2 + AiCard3;

因此,AiTotalcard3最初被设置为0。在您更改它之前,它将保持为0,这发生在以下情况:

代码语言:javascript
复制
AiCard1 = Math.random() * 12 + 1;
AiCard1 = Math.round(AiCard1);
AiCard2 = Math.random() + 12 + 1;
AiCard2 = Math.round(AiCard2);
double AiTotal2cards = AiCard1 + AiCard2;
if(AiTotal2cards < 15) {
    AiCard3 = Math.random() * 12 + 1;
    AiCard3 = Math.round(AiCard3);
    AiTotalcard3 = AiCard1 + AiCard2 + AiCard3;
}

但是,只有当前两张牌加起来少于15张时,才会发生这种情况。此后,你再也不会碰AiTotalcard3了。

您的逻辑可以大大简化,而且对卡片使用int而不是double更有意义,但是忽略所有这些并坚持当前的样式,您可以通过确保所有路径设置AiTotalcard3 (同样不是最干净的逻辑,而只是坚持您的模式)来修复这个问题:

代码语言:javascript
复制
if(AiTotal2cards < 15) {
    AiCard3 = Math.random() * 12 + 1;
    AiCard3 = Math.round(AiCard3);
    AiTotalcard3 = AiCard1 + AiCard2 + AiCard3;
} else {
    AiTotalcard3 = AiCard1 + AiCard2; // be sure to always set it
}

现在,考虑到所有这些,total2有一个类似的问题:并不是所有的执行路径都设置了total2__的值。它可以工作,如果你弥补它到第四张卡,但在此之前,你永远不会改变它的初始值0。所以你得用一把漂亮的梳子来完成这一切。

你的基本问题之一是,由于某种原因,你在前2张卡片上使用不同的变量,而不是所有的卡。如果您只是使用单一的aiTotaltotal累积卡总数,您将避免这些问题中的大多数。

票数 2
EN

Stack Overflow用户

发布于 2016-09-15 03:40:57

我认为您的主要问题是混淆totaltotal2。您似乎在多个地方使用这两种可互换的。

首先,如果用户不选择第三张卡,total2将始终等于0,因为如果从未输入if(answer.equals(Commands.yes)) {,则total2永远不会超过初始初始化值0。

如果用户选择了第三张卡,而不是第四张卡,那么您可以正确地更新total的值,而不是total2

如果用户选择第四张卡,那么它应该正确工作。

除了主要的修正外,以下是一些在编写游戏时应该记住的提示:

  1. 您提到的全局变量是不被识别的,但是您的变量实际上都不是全局变量。你应该读清楚那到底是什么意思。
  2. 我建议使用ints或自定义数据类型来存储卡片值,因为您永远不需要双倍提供的十进制位。
  3. 在结构中使用循环可以节省大量代码。它将使它更清洁,更容易理解。
  4. 打印AI正在做的事情。如果你看不到AI的动作,就没有必要拥有它。

不管怎么说,祝你的比赛好运!一开始编程可能很吓人,但这是一个很好的开始。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39502583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档