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

Java while循环无法回到开头生成新题目 开发问题求解

加法游戏问题修复方案

你的代码核心问题出在Scanner输入读取和答题逻辑结构上,具体问题和修复方案如下:

存在的问题

  • 重复调用sc.nextInt():每调用一次该方法就会等待用户输入一次新值,你的代码里打印题目后先在correct()方法里读了一次输入,紧接着while判断条件又读了一次,correct()内部又读一次,用户每次答题需要连续输3次值才能走完一轮逻辑,看上去就像程序卡住不刷新题目。
  • 答题逻辑混乱:答对校验和答错重试逻辑拆分在两处,既重复又没有处理答对后进入下一轮出题的跳转逻辑。
  • 终止条件有误:主循环设置的wrong <= 3会允许最多4次答错,不符合答错3次结束的需求。

修复后的代码

import java.util.Random;
import java.util.Scanner;
import java.util.ArrayList;
public class AddingGame {
    Random rand1, rand2;
    int points = 0, wrong = 0, sum;
    String str = "";
    Scanner sc;
    ArrayList <Integer> mem;
    public AddingGame() {
        sc = new Scanner(System.in);
        rand1 = new Random();
        rand2 = new Random();
        int r1, r2, i, userInput;
        mem = new ArrayList <> ();
        System.out.println("输入任意整数获取题目,答对即可进入下一题,每答对一题得1分,答错3次游戏结束。");
        // 修正终止条件:答错3次就结束
        while (wrong < 3) {
            mem.clear(); // 比removeAll更高效
            sum = 0;
            i = 0;
            str = "";
            
            r1 = rand1.nextInt(5) + 2; // 决定题目的项数
            while (mem.size() < r1) {
                r2 = rand2.nextInt(50) + 1; // 决定每一项的值
                mem.add(r2);
                sum += r2;
                if (i == (r1 - 1)) {
                    str = str + mem.get(i) + " = ?";
                } else {  
                    str = str + mem.get(i) + " + "; 
                }  
                i++;
            }
            System.out.println(str);
            // 单次答题逻辑,只读取一次输入
            while(true) {
                userInput = sc.nextInt();
                if(userInput == sum) {
                    points++;
                    if (points != 1) {
                        System.out.println("答对了!你当前的积分为 " + points + " 分!" );
                    } else {
                        System.out.println("答对了!你当前的积分为 " + points + " 分!" );
                    }
                    // 答对直接跳出答题循环,进入下一轮出题
                    break;
                } else {
                    wrong++;
                    if (wrong >= 3) {
                        System.out.println("你的答题次数已用尽!");
                        // 答错3次直接结束游戏
                        return;
                    }
                    System.out.println("再试一次!");
                    System.out.println(str);
                }
            }
        }
    }

    public static void main(String[] args) {
        new AddingGame();
    }
}

优化说明

  • 移除了冗余的correct()方法,将答题逻辑合并到一处,避免重复读取Scanner输入
  • 替换mem.removeAll(mem)为mem.clear(),性能更好也更易读
  • 补充了main方法,保证程序可以直接运行
  • 所有输入只读取一次存入变量,避免重复等待用户输入
  • 将提示文本调整为中文,更符合使用习惯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:36:04