当前位置: 首页 > news >正文

课后作业2

动手动脑:
1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。
解:import java.util.Arrays;

public class RandomNumberGenerator {

/*** 使用线性同余生成器算法生成指定数量的随机整数* @param count 要生成的随机整数数量* @param seed 随机数种子* @return 包含随机整数的数组*/
public static int[] generateRandomNumbers(int count, long seed) {if (count <= 0) {throw new IllegalArgumentException("生成数量必须大于0");}int[] randomNumbers = new int[count];long current = seed;// 线性同余生成器参数 (使用Java默认随机数生成器的参数)long a = 25214903917L;  // 乘数long c = 11L;           // 增量long m = (long) Math.pow(2, 48); // 模数 2^48for (int i = 0; i < count; i++) {// 线性同余公式: X_{n+1} = (a * X_n + c) mod mcurrent = (a * current + c) % m;// 取高32位作为随机数,转换为int类型randomNumbers[i] = (int) (current >>> 16);}return randomNumbers;
}/*** 使用系统时间作为种子生成随机数* @param count 要生成的随机整数数量* @return 包含随机整数的数组*/
public static int[] generateRandomNumbers(int count) {return generateRandomNumbers(count, System.currentTimeMillis());
}/*** 测试方法*/
public static void main(String[] args) {// 生成10个随机数int[] randomNumbers1 = generateRandomNumbers(10, 12345L);System.out.println("使用种子12345生成的10个随机数:");System.out.println(Arrays.toString(randomNumbers1));// 生成1000个随机数int[] randomNumbers2 = generateRandomNumbers(1000);System.out.println("\n使用系统时间作为种子生成的1000个随机数:");// 统计前20个System.out.print("前20个随机数: ");for (int i = 0; i < 20 && i < randomNumbers2.length; i++) {System.out.print(randomNumbers2[i] + " ");}System.out.println("...");// 基本统计信息System.out.println("\n统计信息:");System.out.println("总数: " + randomNumbers2.length);System.out.println("第一个: " + randomNumbers2[0]);System.out.println("最后一个: " + randomNumbers2[randomNumbers2.length - 1]);// 验证范围(应该是32位有符号整数范围)int min = Integer.MAX_VALUE;int max = Integer.MIN_VALUE;for (int num : randomNumbers2) {if (num < min) min = num;if (num > max) max = num;}System.out.println("最小值: " + min);System.out.println("最大值: " + max);
}

}
2. 请看以下代码,你发现了有什么特殊之处吗?

解:该段代码使用了方法重载,这段代码方法名相同;参数类型不同,参数个数不同,或者是参数类型的顺序不同。提高了代码的灵活性和可读性。
课后作业

  1. 四则运算课堂测试一
     阶段1:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件”
    解:import java.util.Random;

public class PrimarySchoolMathGenerator {
private static Random random = new Random();

public static void main(String[] args) {System.out.println("小学生四则运算练习题");System.out.println("====================");System.out.println();// 生成30道题目for (int i = 1; i <= 30; i++) {String exercise = generateExercise();System.out.println(i + ". " + exercise);}System.out.println();System.out.println("加油!做完记得检查哦!");
}/*** 生成一道四则运算题目*/
private static String generateExercise() {// 随机选择运算类型:0-加法,1-减法,2-乘法,3-除法int operation = random.nextInt(4);switch (operation) {case 0:return generateAddition();case 1:return generateSubtraction();case 2:return generateMultiplication();case 3:return generateDivision();default:return generateAddition();}
}/*** 生成加法题目(和不超过100)*/
private static String generateAddition() {int a = random.nextInt(50) + 1; // 1-50int b = random.nextInt(50) + 1; // 1-50// 确保和不超过100while (a + b > 100) {a = random.nextInt(50) + 1;b = random.nextInt(50) + 1;}return a + " + " + b + " = ";
}/*** 生成减法题目(结果不为负数)*/
private static String generateSubtraction() {int a = random.nextInt(50) + 10; // 10-59int b = random.nextInt(a) + 1;   // 1-a,确保结果不为负数return a + " - " + b + " = ";
}/*** 生成乘法题目(乘数不超过10,积不超过100)*/
private static String generateMultiplication() {int a = random.nextInt(10) + 1; // 1-10int b = random.nextInt(10) + 1; // 1-10// 确保积不超过100while (a * b > 100) {a = random.nextInt(10) + 1;b = random.nextInt(10) + 1;}return a + " × " + b + " = ";
}/*** 生成除法题目(确保能整除)*/
private static String generateDivision() {// 先确定除数(1-10)int divisor = random.nextInt(10) + 1;// 再确定商(1-10)int quotient = random.nextInt(10) + 1;// 被除数 = 除数 × 商int dividend = divisor * quotient;// 确保被除数不超过100while (dividend > 100) {divisor = random.nextInt(10) + 1;quotient = random.nextInt(10) + 1;dividend = divisor * quotient;}return dividend + " ÷ " + divisor + " = ";
}

}
2. 四则运算课堂测试二
阶段2:
(1)要求题目避免重复,减法不允许出现负数,乘法结果不允许出现四位数,除法必须整除不允许出现小数;
(2)实现在线实时答题,并在答题结束后,统计显示错题数,正确率;
(3)增加倒计时功能,要求在指定时间内完成测试,超时未做完视为错题。
要求上述内容编写方法实现。

解:import java.util.;
import java.util.concurrent.
;

public class AdvancedMathTestSystem {
private static Random random = new Random();
private static Scanner scanner = new Scanner(System.in);
private static Set generatedExercises = new HashSet<>(); // 用于避免重复题目

// 题目和答案存储
private static List<String> exercises = new ArrayList<>();
private static List<Integer> correctAnswers = new ArrayList<>();
private static List<Integer> userAnswers = new ArrayList<>();// 测试配置
private static final int TOTAL_QUESTIONS = 10; // 题目数量
private static final int TIME_LIMIT = 60; // 时间限制(秒)public static void main(String[] args) {System.out.println("小学生四则运算在线测试系统");System.out.println("========================");System.out.println("规则说明:");System.out.println("- 共 " + TOTAL_QUESTIONS + " 道题目");System.out.println("- 时间限制: " + TIME_LIMIT + " 秒");System.out.println("- 超时未完成的题目视为错误");System.out.println("========================");// 生成不重复的题目generateUniqueExercises(TOTAL_QUESTIONS);// 开始测试(带倒计时)startTimedTest();// 显示结果统计showTestResults();scanner.close();
}/*** 生成指定数量的不重复题目*/
private static void generateUniqueExercises(int count) {int attempts = 0;int maxAttempts = count * 10; // 防止无限循环while (exercises.size() < count && attempts < maxAttempts) {String exercise = generateExercise();// 检查是否重复if (!generatedExercises.contains(exercise)) {exercises.add(exercise);generatedExercises.add(exercise);// 计算并存储正确答案int answer = calculateAnswer(exercise);correctAnswers.add(answer);}attempts++;}// 如果无法生成足够的不重复题目,用重复题目补足while (exercises.size() < count) {String exercise = generateExercise();exercises.add(exercise);int answer = calculateAnswer(exercise);correctAnswers.add(answer);}
}/*** 生成一道四则运算题目*/
private static String generateExercise() {int operation = random.nextInt(4);switch (operation) {case 0: return generateAddition();case 1: return generateSubtraction();case 2: return generateMultiplication();case 3: return generateDivision();default: return generateAddition();}
}/*** 生成加法题目(和不超过100)*/
private static String generateAddition() {int a = random.nextInt(50) + 1;int b = random.nextInt(50) + 1;// 确保和不超过100while (a + b > 100) {a = random.nextInt(50) + 1;b = random.nextInt(50) + 1;}return a + " + " + b + " = ";
}/*** 生成减法题目(结果不为负数)*/
private static String generateSubtraction() {int a = random.nextInt(50) + 10;int b = random.nextInt(a) + 1; // 确保结果不为负数return a + " - " + b + " = ";
}/*** 生成乘法题目(积不超过三位数)*/
private static String generateMultiplication() {int a = random.nextInt(20) + 1; // 1-20int b = random.nextInt(10) + 1; // 1-10// 确保积不超过三位数(即不超过999)while (a * b > 999) {a = random.nextInt(20) + 1;b = random.nextInt(10) + 1;}return a + " × " + b + " = ";
}/*** 生成除法题目(确保能整除)*/
private static String generateDivision() {int divisor = random.nextInt(10) + 1; // 1-10int quotient = random.nextInt(10) + 1; // 1-10int dividend = divisor * quotient;// 确保被除数不超过100while (dividend > 100) {divisor = random.nextInt(10) + 1;quotient = random.nextInt(10) + 1;dividend = divisor * quotient;}return dividend + " ÷ " + divisor + " = ";
}/*** 开始带倒计时的测试*/
private static void startTimedTest() {System.out.println("\n测试开始!剩余时间: " + TIME_LIMIT + " 秒");System.out.println("========================");// 创建倒计时线程CountDownLatch countDownLatch = new CountDownLatch(1);Timer timer = new Timer();timer.schedule(new TimerTask() {int remainingTime = TIME_LIMIT;@Overridepublic void run() {if (remainingTime <= 0) {System.out.println("\n\n时间到!测试结束。");countDownLatch.countDown();this.cancel();return;}// 每10秒显示一次剩余时间if (remainingTime % 10 == 0 || remainingTime <= 5) {System.out.println("剩余时间: " + remainingTime + " 秒");}remainingTime--;}}, 0, 1000); // 每秒执行一次// 记录开始时间long startTime = System.currentTimeMillis();// 开始答题for (int i = 0; i < exercises.size(); i++) {// 检查是否超时long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;if (elapsedTime >= TIME_LIMIT) {System.out.println("\n时间到!未完成的题目视为错误。");// 为未答题的题目填充-1作为错误标记for (int j = i; j < exercises.size(); j++) {userAnswers.add(-1);}break;}System.out.print((i + 1) + ". " + exercises.get(i));String input = scanner.nextLine().trim();try {int answer = Integer.parseInt(input);userAnswers.add(answer);} catch (NumberFormatException e) {// 输入无效,视为错误userAnswers.add(-1);System.out.println("  输入无效,已记录为错误答案");}}// 停止计时器timer.cancel();// 确保所有题目都有用户答案while (userAnswers.size() < exercises.size()) {userAnswers.add(-1);}
}/*** 显示测试结果统计*/
private static void showTestResults() {System.out.println("\n\n测试结果统计");System.out.println("============");int correctCount = 0;List<Integer> wrongQuestions = new ArrayList<>();// 统计正确率和错题for (int i = 0; i < exercises.size(); i++) {if (userAnswers.get(i) == correctAnswers.get(i)) {correctCount++;} else {wrongQuestions.add(i + 1); // 记录错题编号}}// 显示统计信息double accuracy = (double) correctCount / exercises.size() * 100;System.out.println("总题数: " + exercises.size());System.out.println("答对题数: " + correctCount);System.out.println("答错题数: " + (exercises.size() - correctCount));System.out.printf("正确率: %.2f%%\n", accuracy);// 显示错题详情if (!wrongQuestions.isEmpty()) {System.out.println("\n错题列表:");for (int questionNum : wrongQuestions) {int index = questionNum - 1;System.out.println(questionNum + ". " + exercises.get(index) + "你的答案: " + (userAnswers.get(index) == -1 ? "未作答" : userAnswers.get(index)) + ", 正确答案: " + correctAnswers.get(index));}System.out.println("\n建议重点复习以上错题!");} else {System.out.println("\n太棒了!全部答对!");}
}/*** 计算题目的正确答案*/
private static int calculateAnswer(String exercise) {if (exercise.contains("+")) {String[] parts = exercise.split(" \\+ ");int a = Integer.parseInt(parts[0]);int b = Integer.parseInt(parts[1].split(" ")[0]);return a + b;} else if (exercise.contains("-")) {String[] parts = exercise.split(" - ");int a = Integer.parseInt(parts[0]);int b = Integer.parseInt(parts[1].split(" ")[0]);return a - b;} else if (exercise.contains("×")) {String[] parts = exercise.split(" × ");int a = Integer.parseInt(parts[0]);int b = Integer.parseInt(parts[1].split(" ")[0]);return a * b;} else if (exercise.contains("÷")) {String[] parts = exercise.split(" ÷ ");int a = Integer.parseInt(parts[0]);int b = Integer.parseInt(parts[1].split(" ")[0]);return a / b;}return 0;
}

}

http://www.jsqmd.com/news/144703/

相关文章:

  • 2025年12月绵阳米粉/米线加工厂综合比较 - 2025年品牌推荐榜
  • 2025年12月江苏徐州别墅庭院设计、屋顶花园设计、公园绿地设计、市政广场设计、生态园区设计服务商排行榜 - 2025年品牌推荐榜
  • 运用 Python 将 Markdown 转换为 Word、HTML、PDF、PNG 和 JPG
  • 基于Spring Boot和Vue.js的视频点播管理系统设计与实现
  • pg_waldump 和 pg_xlogdump
  • 一个简单想法的实验随笔-胜任能力
  • 高精度光学动作捕捉如何为无人机提供飞行姿态与轨迹真值?——以IROS 2025多篇无人机学习与控制研究为例
  • 让回忆“动”起来:手把手教你制作老照片动态视频
  • 2025最新!自考党必看9个AI论文平台测评与推荐
  • CF1295F Good Contest/[APIO2016] 划艇
  • 郑州家装公司五大推荐:优质装修/别墅装修/老房翻新精选,华埔装饰砸无赦承诺引领行业新风尚 - 深度智识库
  • 基于Spring Boot和Vue.js的房屋出租管理系统设计与实现
  • 2025年12月江苏徐州变压器系列,智能变电站,新能源配套,高低压配电柜,智慧电力系统厂家选择指南 - 2025年品牌推荐榜
  • 2025年门式冲洗装置直销厂家权威推荐榜单:液压水力冲洗门/水力冲洗门/智能控制拍门源头厂家精选 - 品牌推荐官
  • 2025年蠕变持久试验机生产厂家推荐:哪家公司靠谱/国内哪家性价比高/哪个厂家品质好/哪家售后好 - 品牌推荐大师1
  • 上海策划品牌全案公司推荐:4事业部+长期陪跑(案例集) - 品牌排行榜
  • ModelEngine的Aido智能体【娱乐生涯 AI 助手】升级计划——工作流编排精确制导AI应用
  • 哪家上海装修公司口碑最好?21年零投诉实力验证 - 品牌排行榜
  • 告别传统低效!AgentRun 如何用 Serverless + Agent 打造现代化的舆情分析系统?
  • 2025年图书档案标签厂家实力推荐:超高频抗金属标签/耐高温电子标签/rfid标签定制厂家精选 - 品牌推荐官
  • 学长亲荐9个AI论文工具,研究生轻松搞定开题报告!
  • 西门子模拟量处理程序块:滤波峰值,便捷调用报警功能,适用于博图V15及以上版本
  • c# 递归算法
  • 模型没挂,是我自己把系统搞死的
  • 2025升降机厂家TOP10推荐 国内靠谱品牌榜单出炉,苏州卓高9.99分登顶 - 品牌智鉴榜
  • 基于结构特征与神经网络特征融合的手写汉字评价模型研究
  • OpenCSG社区:激发城市AI主权创新引擎
  • 深耕用户体验,「呵汤」年度会员聚会举办在即 - 资讯焦点
  • 2025年亚麻油灌装机厂家实力推荐:大豆油灌装机/导热油灌装机/机油灌装机源头厂家精选 - 品牌推荐官
  • 2025年内浮盘厂家权威推荐榜:油罐内浮盘/储罐内浮盘/不锈钢内浮盘源头厂家精选 - 品牌推荐官