如何让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
相关产品推荐
相关产品推荐

