You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java终端赌博程序循环问题:如何实现玩家多次赌博功能?

问题

刚学习Java一两周,想写一个终端简易赌博程序,希望玩家能用单一余额多次赌博,但添加while循环和Scanner输入后,输入"Yes"程序无反应。代码如下:

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

public class Gambler {

    public static void main(String[] args) {
        Random random = new Random();
        Scanner scanner = new Scanner(System.in);
        int balance = 100;
        System.out.println();
        System.out.println("--> Current Balance: $" + balance + " <--");
        System.out.println();
        System.out.println("Would you like to enter the Java Gambler simulator?");
        System.out.println();
        System.out.println("[Yes] [No]");
        System.out.println();
        String yesOrNo;
        yesOrNo = scanner.nextLine();
        if (yesOrNo.equalsIgnoreCase("Yes")) {
            System.out.println();
            System.out.println("[!] Welcome to the Java Gambler! [!]");
            System.out.println();
            System.out.println("The only Java gambling software in all of Java County!");
            System.out.println();
            System.out.println("If the chosen number is {1}, the player automatically wins $20.");
            System.out.println("If the chosen number is {2}, the player automatically wins $10.");
            System.out.println("If the chosen number is {3}, the player automatically wins $5.");
            System.out.println("All other numbers are an automatic loss.");
            System.out.println();
            System.out.println("Continue?");
            System.out.println();
            System.out.println("[Yes] [No]");
            System.out.println();
            String yesOrNo2;
            yesOrNo2 = scanner.nextLine();
            if (yesOrNo2.equalsIgnoreCase("Yes")) {
                System.out.println();
                System.out.println("Gambling Options:");
                System.out.println();
                System.out.println("[A] $1 Bet (1/20 $20, 1/20 $10, 1/20 $5)");
                System.out.println("[B] $5 Bet (1/10 $20, 1/10 $10, 1/10 $5)");
                System.out.println("[C] $10 Bet (1/5 $20, 1/5 $10, 1/5 $5)");
                System.out.println();
                System.out.println("Gambling Selection: ");
                System.out.println();
                String continueGambling = "Yes";
                while (continueGambling.equalsIgnoreCase("Yes")) {
                    String gamblingSelection;
                    gamblingSelection = scanner.nextLine();
                    String a = "A";
                    String b = "B";
                    String c = "C";
                    if (gamblingSelection.equalsIgnoreCase(a)) {
                        balance = balance - 1;
                        int aSelection = random.nextInt(20) + 1;
                        System.out.println();
                        System.out.println("And the number is... " + aSelection);
                        System.out.println();
                        switch (aSelection) {
                            case 1:
                                System.out.println("Congrats, you have won $20!");
                                balance = balance + 20;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            case 2:
                                System.out.println("Congrats, you have won $10!");
                                balance = balance + 10;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            case 3:
                                System.out.println("Congrats, you have won $5!");
                                balance = balance + 5;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            default:
                                System.out.println("Sorry, no luck this time...");
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                        }
                    }
                    else if (gamblingSelection.equalsIgnoreCase(b)) {
                        balance = balance - 5;
                        int bSelection = random.nextInt(10) + 1;
                        System.out.println();
                        System.out.println("And the number is... " + bSelection);
                        System.out.println();
                        switch (bSelection) {
                            case 1:
                                System.out.println("Congrats, you have won $20!");
                                balance = balance + 20;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            case 2:
                                System.out.println("Congrats, you have won $10!");
                                balance = balance + 10;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            case 3:
                                System.out.println("You won $5! Its a free spin, I guess...");
                                balance = balance + 5;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            default:
                                System.out.println("Sorry, no luck this time...");
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                        }
                    }
                    else if (gamblingSelection.equalsIgnoreCase(c)) {
                        balance = balance - 10;
                        int cSelection = random.nextInt(5) + 1;
                        System.out.println();
                        System.out.println("And the number is... " + cSelection);
                        System.out.println();
                        switch (cSelection) {
                            case 1:
                                System.out.println("Congrats, you have won $20!");
                                balance = balance + 20;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            case 2:
                                System.out.println("You won $10! Its a free spin, I guess...");
                                balance = balance + 10;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            case 3:
                                System.out.println("You won $5! At least its somethin...");
                                balance = balance + 5;
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                            default:
                                System.out.println("Sorry, no luck this time...");
                                System.out.println("--> Your new balance: $" + balance + " <--");
                                System.out.println();
                                System.out.println("Continue?");
                                System.out.println();
                                System.out.println("[Yes] [No]");
                                System.out.println();
                                break;
                        }
                    }
                }
                continueGambling = scanner.nextLine();
            }
            else {
                String wrongValue = "Invalid response. Please try again.";
                System.out.println(wrongValue);
            }
        }
        else if (yesOrNo.equalsIgnoreCase("No")) {
            System.out.println("You sure are missing out...");
        }
        else {
            System.out.println("Invalid response. Please try again.");
        }
        scanner.close();
    }
}
问题排查与修复

核心问题

  1. 循环外更新控制变量:你把continueGambling = scanner.nextLine();放在了while循环外面,循环内部没有更新这个变量,导致循环无法感知用户的继续选择,只会一直等待输入。
  2. 缺少无效输入处理:当用户输入非A/B/C的内容时,程序没有任何反馈,直接进入下一次循环,体验极差。
  3. 选项提示位置错误:赌博选项只在第一次赌博前显示,后续循环不会重新提示,不符合用户操作逻辑。

修复后的代码

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

public class Gambler {

    public static void main(String[] args) {
        Random random = new Random();
        Scanner scanner = new Scanner(System.in);
        int balance = 100;
        System.out.println();
        System.out.println("--> Current Balance: $" + balance + " <--");
        System.out.println();
        System.out.println("Would you like to enter the Java Gambler simulator?");
        System.out.println();
        System.out.println("[Yes] [No]");
        System.out.println();
        String yesOrNo = scanner.nextLine();
        
        if (yesOrNo.equalsIgnoreCase("Yes")) {
            System.out.println();
            System.out.println("[!] Welcome to the Java Gambler! [!]");
            System.out.println();
            System.out.println("The only Java gambling software in all of Java County!");
            System.out.println();
            System.out.println("If the chosen number is {1}, the player automatically wins $20.");
            System.out.println("If the chosen number is {2}, the player automatically wins $10.");
            System.out.println("If the chosen number is {3}, the player automatically wins $5.");
            System.out.println("All other numbers are an automatic loss.");
            System.out.println();
            System.out.println("Continue?");
            System.out.println();
            System.out.println("[Yes] [No]");
            System.out.println();
            String yesOrNo2 = scanner.nextLine();
            
            if (yesOrNo2.equalsIgnoreCase("Yes")) {
                String continueGambling = "Yes";
                while (continueGambling.equalsIgnoreCase("Yes")) {
                    // 每次循环重新显示赌博选项
                    System.out.println();
                    System.out.println("Gambling Options:");
                    System.out.println();
                    System.out.println("[A] $1 Bet (1/20 $20, 1/20 $10, 1/20 $5)");
                    System.out.println("[B] $5 Bet (1/10 $20, 1/10 $10, 1/10 $5)");
                    System.out.println("[C] $10 Bet (1/5 $20, 1/5 $10, 1/5 $5)");
                    System.out.println();
                    System.out.println("Gambling Selection: ");
                    System.out.println();
                    
                    String gamblingSelection = scanner.nextLine();
                    boolean validSelection = true;
                    
                    if (gamblingSelection.equalsIgnoreCase("A")) {
                        balance -= 1;
                        int aSelection = random.nextInt(20) + 1;
                        System.out.println();
                        System.out.println("And the number is... " + aSelection);
                        System.out.println();
                        
                        switch (aSelection) {
                            case 1:
                                System.out.println("Congrats, you have won $20!");
                                balance += 20;
                                break;
                            case 2:
                                System.out.println("Congrats, you have won $10!");
                                balance += 10;
                                break;
                            case 3:
                                System.out.println("Congrats, you have won $5!");
                                balance += 5;
                                break;
                            default:
                                System.out.println("Sorry, no luck this time...");
                                break;
                        }
                    } else if (gamblingSelection.equalsIgnoreCase("B")) {
                        balance -= 5;
                        int bSelection = random.nextInt(10) + 1;
                        System.out.println();
                        System.out.println("And the number is... " + bSelection);
                        System.out.println();
                        
                        switch (bSelection) {
                            case 1:
                                System.out.println("Congrats, you have won $20!");
                                balance += 20;
                                break;
                            case 2:
                                System.out.println("Congrats, you have won $10!");
                                balance += 10;
                                break;
                            case 3:
                                System.out.println("You won $5! Its a free spin, I guess...");
                                balance += 5;
                                break;
                            default:
                                System.out.println("Sorry, no luck this time...");
                                break;
                        }
                    } else if (gamblingSelection.equalsIgnoreCase("C")) {
                        balance -= 10;
                        int cSelection = random.nextInt(5) + 1;
                        System.out.println();
                        System.out.println("And the number is... " + cSelection);
                        System.out.println();
                        
                        switch (cSelection) {
                            case 1:
                                System.out.println("Congrats, you have won $20!");
                                balance += 20;
                                break;
                            case 2:
                                System.out.println("You won $10! Its a free spin, I guess...");
                                balance += 10;
                                break;
                            case 3:
                                System.out.println("You won $5! At least its somethin...");
                                balance += 5;
                                break;
                            default:
                                System.out.println("Sorry, no luck this time...");
                                break;
                        }
                    } else {
                        System.out.println("Invalid selection! Please choose A/B/C.");
                        validSelection = false;
                    }
                    
                    // 只有选择有效时,才显示余额并询问是否继续
                    if (validSelection) {
                        System.out.println("--> Your new balance: $" + balance + " <--");
                        System.out.println();
                        System.out.println("Continue?");
                        System.out.println();
                        System.out.println("[Yes] [No]");
                        System.out.println();
                        // 在循环内部更新控制变量
                        continueGambling = scanner.nextLine();
                    }
                }
                System.out.println("Thanks for playing!");
            } else {
                System.out.println("Invalid response. Please try again.");
            }
        } else if (yesOrNo.equalsIgnoreCase("No")) {
            System.out.println("You sure are missing out...");
        } else {
            System.out.println("Invalid response. Please try again.");
        }
        scanner.close();
    }
}

修复说明

  • 将continueGambling的输入读取移到while循环内部,每次赌博结束后更新变量,控制循环是否继续
  • 增加无效选择处理,输入非A/B/C时提示错误,不扣除余额
  • 将赌博选项提示移到循环内部,每次继续赌博时重新显示
  • 简化余额加减写法(如balance -= 1),代码更简洁

内容的提问来源于stack exchange,提问作者Brock Benton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:12:02