首页 > 解决方案 > 程序跳过'if'语句并默认为'else'

问题描述

我正在为我的编程课做作业,但我的代码(再次)出了点问题,我花了一个半小时试图调试它。该代码是一种赌博游戏,用户输入要下注的金额,然后选择高、低或 7。高是当骰子掷出 8 或更高时,低是当骰子掷出 6 或更低时,而七是当骰子总点数为 7 时。如果骰子掷出 7,则赌注乘以 4 并奖励给用户。否则,当用户“输”时,他们会输掉他们下注的金额。我似乎无法弄清楚到底出了什么问题。

首先,奖金不正确。它们在控制台中显示为“您赢了 128 美元!” 然后当代码重复时,当前池总是变为 132,即使用户丢失并且应该减去钱。此外,程序跳过了 determineWinnings 方法中的“if”语句——即使用户本应获胜,它也默认为 else。这是 20 分钟后到期的,我不知道如何解决它!真诚感谢任何帮助!

package example;
import java.util.Scanner;

public class test
{

public static void main(String[] args)
{

    Scanner inScanner = new Scanner(System.in);
    int currentPool = 100; 
    int bet = ' ';
    char highLow = ' ';
    int roll = ' ';
    int winnings = ' ';

    System.out.println("You have " + currentPool + " dollars.");
    getBet(inScanner, currentPool);
    getHighLow(inScanner);
    determineWinnings(highLow, bet, roll);
    currentPool = currentPool + winnings;
    System.out.println("");

    while (bet != 0)
    {
        System.out.println("You have " + currentPool + " dollars.");
        getBet(inScanner, currentPool);
        getHighLow(inScanner);
        determineWinnings(highLow, bet, roll);
        currentPool = currentPool + winnings;
        System.out.println("");
    }


}



private static int getBet(Scanner inScanner, int currentPool)
{
    System.out.print("Enter an amount to bet (0 to quit): ");
    String strBet = inScanner.nextLine();
    int bet = Integer.parseInt(strBet);


    while (bet < 0 || bet > currentPool)
    {
        System.out.print("Your bet MUST be between 0 and " + currentPool + " dollars.");
        System.out.println("You have " + currentPool + " dollars.");
        System.out.print("Enter an amount to bet (0 to quit): ");
        strBet = (inScanner.nextLine());
        bet = Integer.parseInt(strBet);
    }

    if (bet == 0)
    {
        System.out.println("You have " + currentPool + " dollars.");
        System.out.println("Goodbye!");
        return bet;
    }
    else
    {
        return bet;
    }
}


private static char getHighLow(Scanner inScanner)
{
    System.out.print("High, Low, or Sevens (H/L/S): ");
    String hls = inScanner.nextLine();
    char highLow = ' ';

    if (hls.equals("H") || hls.equals("h"))
    {
        highLow = 'H';
    }
    else if (hls.equals("L") || hls.equals("l"))
    {
        highLow = 'L';
    }
    else if (hls.equals("S") || hls.equals("s"))
    {
        highLow = 'S';
    }
    else
    {
        System.out.print("ERROR: invalid character entered. Please try again.");

        while (!hls.equals("H") || !hls.equals("h") || !hls.equals("L") || !hls.equals("l") || !hls.equals("S") || !hls.equals("s"))
        {
            System.out.println("High, Low, or Sevens (H/L/S): ");
            hls = inScanner.nextLine();
        }
    }
    return highLow;
}   


private static int getRoll()
{
    int roll = (int)Math.floor(Math.random() * 6 + 1);
    return roll;
}


private static int determineWinnings(char highLow, int bet, int roll)
{
    int rollOne = getRoll();
    int rollTwo = getRoll();
    int total = rollOne + rollTwo;
    int winnings = bet + 0;
    System.out.println("Die 1 rolls: " + rollOne);
    System.out.println("Die 2 rolls: " + rollTwo);
    System.out.println("Total of two dice is: " + total);

    if (highLow == 'H')
    {
        if (total >= 8)
        {
            System.out.println("You won " + winnings + " dollars!");

        }
        else
        {
            System.out.println("You lost!");
            winnings = 0 - bet;

        }
    }
    else if (highLow == 'L')
    {
        if (total <= 6)
        {
            System.out.println("You won " + winnings + " dollars!");

        }
        else 
        {
            System.out.println("You lost!");
            winnings = (0 - bet);

        }
    }
    else
    {
        if (total == 7)
        {
            winnings = bet * 4;
            System.out.println("You won " + winnings + " dollars!");

        }
        else 
        {
            System.out.println("You lost!");
            winnings = 0 - bet;

        }
    }
    return winnings;
}

}

标签: javaif-statement

解决方案


你没有理解的部分是每个方法——事实上,每个方法的每个调用——都有自己的局部变量集合。这意味着

  • winnings中声明的变量与中声明的变量main不是同一个变量;winningsdetermineWinnings
  • bet中声明的变量与 中声明的变量main不是同一个变量。betgetBet

您需要做的是确保将每个被调用方法返回的值分配给调用者方法中要存储它的变量。所以main,当你打电话时getBet,你实际上想写

bet = getBet(inScanner, currentPool);

以便将 from 返回的值getBet分配给betfrom 的变量main。同样,当你调用 时determineWinnings,你需要写

winnings = determineWinnings(highLow, bet, roll);

以便将 from 返回的值determineWinnings分配给winningsfrom 的变量main

如果您不这样做,那么所有变量都将main保持其原始值,即100用于currentPool32用于赢钱(因为' '只是另一种写法32)。这就是为什么你的最终值是132.


推荐阅读