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

如何让Java数学练习程序完成指定题目数量后停止出题?

实现Java数学练习程序按指定题数停止的方案

嘿,我来帮你搞定这个需求!你的代码已经有了不错的基础,只需要补全几个关键部分,就能让程序在完成用户指定数量的题目后自动停止。

关键修改点

  • 确保getNumberOfQuestions()方法正确获取用户输入:这个方法需要从用户那里拿到想要的题目数量,返回一个正整数。
  • 循环内递减题目计数:每次完成一道题后,把questions变量减1,这样当它降到0时,while(questions > 0)的循环就会终止。
  • 补全四则运算的完整逻辑:你代码里的四则运算部分没写完,得把加减乘除的判断、计算和用户交互补全。

完整修改后的代码

import java.util.Scanner;

public class MathPractice {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int questions = getNumberOfQuestions(keyboard); // 传入Scanner复用
        int difficulty = getQuestionDifficulty(keyboard); // 同样传入Scanner
        
        while (questions > 0) {
            int random1 = (int)(9 * Math.random()) + 1;
            int random2 = (int)(9 * Math.random()) + 1;
            int randomSign = (int)(4 * Math.random()) + 1; // 1=加,2=减,3=乘,4=除
            int correctAnswer = 0;
            boolean validOperation = true;

            // 根据符号生成题目
            switch(randomSign) {
                case 1:
                    System.out.print(random1 + " + " + random2 + " = ");
                    correctAnswer = random1 + random2;
                    break;
                case 2:
                    // 减法确保结果非负,避免给用户出负数答案的题
                    if (random1 < random2) {
                        int temp = random1;
                        random1 = random2;
                        random2 = temp;
                    }
                    System.out.print(random1 + " - " + random2 + " = ");
                    correctAnswer = random1 - random2;
                    break;
                case 3:
                    System.out.print(random1 + " * " + random2 + " = ");
                    correctAnswer = random1 * random2;
                    break;
                case 4:
                    // 除法确保能整除,避免小数答案
                    random1 = random1 * random2; // 调整第一个数,让除法结果为整数
                    System.out.print(random1 + " / " + random2 + " = ");
                    correctAnswer = random1 / random2;
                    break;
                default:
                    validOperation = false;
                    System.out.println("生成题目出错,请重试");
            }

            if (validOperation) {
                int userAnswer = keyboard.nextInt();
                if (userAnswer == correctAnswer) {
                    System.out.println("答对了!");
                } else {
                    System.out.println("答错了,正确答案是: " + correctAnswer);
                }
                questions--; // 每完成一题,题目数减1
                if (questions > 0) {
                    System.out.println("还有 " + questions + " 道题要做!");
                } else {
                    System.out.println("所有题目完成!真棒!");
                }
            }
        }
        keyboard.close(); // 关闭Scanner资源
    }

    // 获取用户想要的题目数量
    private static int getNumberOfQuestions(Scanner keyboard) {
        System.out.print("请输入你想要做的题目数量: ");
        while (!keyboard.hasNextInt()) {
            System.out.print("请输入有效的整数: ");
            keyboard.next(); // 清除无效输入
        }
        return keyboard.nextInt();
    }

    // 获取题目难度(这里简单实现,你可以根据需求扩展)
    private static int getQuestionDifficulty(Scanner keyboard) {
        System.out.print("请输入题目难度(1-简单,2-中等,3-困难): ");
        while (!keyboard.hasNextInt()) {
            System.out.print("请输入有效的难度值(1-3): ");
            keyboard.next();
        }
        int difficulty = keyboard.nextInt();
        while (difficulty < 1 || difficulty > 3) {
            System.out.print("请输入有效的难度值(1-3): ");
            difficulty = keyboard.nextInt();
        }
        return difficulty;
    }
}

额外说明

  • 我把Scanner传入工具方法,避免重复创建多个实例,代码更规范。
  • 处理减法和除法时做了优化:减法确保结果非负,除法确保能整除,避免用户遇到不合理的题目。
  • 加入了输入验证逻辑,确保用户输入的题目数量和难度都是有效的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:48:36