Java语言实现小学数学练习

题目:
【问题描述】
编写一个帮助小学生练习数学的程序,帮助小学生练习100以内的四种数学运算:加、减、乘、除。

【基本要求】
a)程序应先询问用户的ID号(ID号包括两个大写字母和4位数字),例如:
请输入用户ID号:AB1234
程序应对输入的ID号验证,符合ID号要求的格式,然后程序提示三种选择:
(1)开始测试
(2)检查分数
(3)退出
b)测试:该程序将给出10道数学题,例如:
12*3=36
48+32=80

56/28=2

注意:
i)学生将依次回答每一个问题(在等于号后面给出答案),然后给出下一道题。
ii)试题应包含四种数学运算:加、减、乘、除,它们是随机产生的。相邻的问题应该是不同的操作,
每个操作必须至少出现一次。
iii)为每道题随机生成数字,但必须确保参与运算的数字和结果都小于100且大于零的整数。
iv)十道题做完后,记录学生完成这十道题所用的时间。
v)给每个学生一个分数。将该学生的ID、成绩和使用时间保存到一个名为record.txt的文件中。
vi)在屏幕上输出以下信息:
问题|正确答案|你的答案
c)成绩检查:从文件“record.txt”中列出该学生的所有历史成绩。例如:
你以前的记录是:
AB1234 80 150秒
AB1234 50 182秒
AB1234 90 98秒

Java代码:

package per.java.shejiti;import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;public class XiaoXueShuXueJiSuan{static Scanner sc = new Scanner(System.in);                      static int score;        // 分数static long time;        // 时间static int book;         // 控制操作不重复static String [] achievement = new String[11];     // 成绩单static int index = 0;           // 第 index 次成绩public static void main(String[] args) {System.out.println("请输入用户名ID:");                       // 输入用户名IDString str = sc.next();while(!judge(str)) {                  // 判断用户名ID是否正确, 错误重新输入直到用户名ID正确为止System.out.print("请重新输入用户名ID: ");str = sc.next();}System.out.println("用户名正确!");try {// 此处我放在了这个位置,可以更换File file = new File("E:\\Java语言\\Java语言代码\\javaexample//record");if(!file.isFile())                                         // 如果没有该文件,就新建一个file.createNewFile();FileWriter fileWriter = new FileWriter(file, true);        // 通过 true 设置追加fileWriter.write("你以前的记录是: \n");fileWriter.flush();                                        // 清空缓存区,压入文件fileWriter.close();boolean flag = true;List<Integer> list = new ArrayList<Integer>();      for(int i = 0;i < 4;i++)             // 初始化数组,控制前四个运算list.add(i);while(flag){ System.out.println("请选择:\n(1)开始测试\n(2)检查分数\n(3)退出");int choice = sc.nextInt();switch(choice) {case 1:{                                             // 开始测试score = 0;                                      // 重置分数为 0 book = list.get(3);                             // 标记上一次运算long start = System.currentTimeMillis();        // 开始时间Collections.shuffle(list);                      // 对数组乱序,保证前四次运算乱序for(int j = 0;j < 10;j++) if(j < 4) calculate(list.get(j));           // 前四次包括 +-*/ 保证每个至少出现一次else calculate();long end = System.currentTimeMillis();                // 结束时间time = (end - start) / 1000;                          // 共用时间fileWriter = new FileWriter(file, true);              // 通过 true 设置追加fileWriter.write(str + "  " + score + "  " + time + " 秒\n");fileWriter.flush();                                   // 清空缓存区,压入文件fileWriter.close();                                   // 关闭写入流System.out.println("\n问题      | 正确答案  | 你的答案 ");for(int i = 0;i < 10;i++) System.out.println(achievement[i]);    // 输出每次成绩System.out.println();index = 0;                                 // 重置成绩单break;}case 2:{FileReader fileReader = new FileReader(file);BufferedReader in = new BufferedReader(fileReader);String s;while((s = in.readLine()) != null)     // 读取文件全部内容System.out.println(s);System.out.println();fileReader.close();               break;}case 3:{System.out.println("退出成功!");flag = false;file.delete();                    // 删除文件break;}}}}catch(Exception e) {e.printStackTrace();}sc.close();}//判断用户名是否正确方法public static boolean judge(String str) {if(str.length() != 6) {                                 // 六位组成System.out.println("提示: 憨批, 用户名ID是六位大写字母和数字组成的哦! ");return false;}for(int i = 0;i < 2;i++) if(!Character.isUpperCase(str.charAt(i))) {     // 前两位不是大写字母System.out.println("提示: 憨批, 用户名ID的前两位应该是大写字母哦! ");return false;}for(int i = 2;i < 6;i++) if(!Character.isDigit(str.charAt(i))) {         // 后四位不是数字System.out.println("提示: 憨批, 用户名ID的后四位应该是数字哦! ");return false;}return true;        }// 随机运算操作public static void calculate() {int n = (int)(Math.random()*8)%4;    // 四种运算法,随机产生while(book == n)                     // 相邻运算不能相同n = (int)(Math.random()*8)%4;   book = n;switch(n) {case 0:add();break;case 1:subtract();break;case 2:multiplication();break;case 3:division();break;}}// 有参数运算操作, 重载方法public static void calculate(int n) {switch(n) {case 0:add();break;case 1:subtract();break;case 2:multiplication();break;case 3:division();break;}}// +public static void add() {            int num1 = (int)(Math.random()*99 + 1);              // 产生 [1, 99] 的整数int num2 = (int)(Math.random()*(100-num1-1)+1);      // 保证两数运算结果小于100, 以下同理System.out.print(num1 + " + " + num2 + " = ");int result = sc.nextInt();achievement[index++] = String.format("%-2d + %-2d = |    %-2d    | %-2d", num1, num2, num1+num2, result);if(result == num1+num2)score += 10;                                     // 得分加 10 分}// -public static void subtract() {int num1 = (int)(Math.random()*99 + 1);int num2 = (int)(Math.random()*99 + 1);  while(num1 == num2)               // 保证两数不相等num2 = (int)(Math.random()*99 + 1);if(num1 < num2) {   // 用最大值-最小值int temp = num1;num1 = num2;num2 = temp;}System.out.print(num1 + " - " + num2 + " = "); int result = sc.nextInt();achievement[index++] = String.format("%-2d - %-2d = |    %-2d    | %-2d", num1, num2, num1-num2, result);if(Math.abs(Math.abs(num1-num2) - result) < 1e-6)    // 精确到10的-6次方算得分score += 10;}// *public static void multiplication() {int num1 = (int)(Math.random()*99 + 1);              // 产生 [1, 99] 的整数int num2 = (int)(Math.random()*(100/num1-1)+1);   System.out.print(num1 + " * " + num2 + " = ");int result = sc.nextInt();achievement[index++] = String.format("%-2d * %-2d = |    %-2d    | %-2d", num1, num2, num1*num2, result);if(result == num1*num2)score += 10;}// /public static void division() {double weighting = Math.random();int num1, num2;if(weighting < 50) num1 = (int)(Math.random()*20 + 1);              // 产生 [1, 20] 的整数   加权 50%else if(weighting < 80) num1 = (int)(Math.random()*30 + 21);             // 产生 [21, 50] 的整数   加权 30%elsenum1 = (int)(Math.random()*49 + 51);             // 产生 [51, 99] 的整数   加权 20%if(num1 > 50)                                        // 如果num1 > 50, num2 只能等于 num1 num2 = num1;elsenum2 = ((int)(Math.random()*(100/num1-1) + 1) )*num1; // num2 必须是 num1 的整数倍,保证结果为整数System.out.print(num2 + " / " + num1 + " = ");int result = sc.nextInt();achievement[index++] = String.format("%-2d / %-2d = |    %-2d    | %-2d", num2, num1, num2/num1, result);if(result == num2/num1)score += 10;}
}

Java语言实现小学数学练习相关推荐

  1. java语言数学_Java语言实现小学数学练习

    Java语言实现小学数学练习 题目[问题描述] 编写一个帮助小学生练习数学的程序 帮助小学生练习100以内的四种数学运算 加.减.乘.除. [基本要求] a)程序应先询问用户的ID号(ID号包括两个大 ...

  2. java数学题_小学数学练习题用Java实现

    Java语言实现小学数学练习 题目: [问题描述] 编写一个帮助小学生练习数学的程序,帮助小学生练习100以内的四种数学运算:加.减.乘.除. [基本要求] a)程序应先询问用户的ID号(ID号包括两 ...

  3. 小学数学闯关游戏 java代码_Java语言实现小学数学练习

    package per.java.shejiti; import java.io.*; import java.util.ArrayList; import java.util.Collections ...

  4. JAVA课程设计——小学数学练习

    设计题目 1.小学数学练习 1.1[问题描述] 编写一个帮助小学生练习数学的程序,帮助小学生练习 100 以内的四种数学运算:加.减.乘.除. 1.2[基本要求] a) 程序应先询问用户的 ID 号( ...

  5. 掌门1对1java面试_2019掌门1对1面试经验(JAVA软件工程师,小学数学教师等)

    为了帮助职业圈网友能够及时了解掌门1对1的面试流程以及面试过程所涉及的面试问题,职业圈小编把2019最新掌门1对1面试经验编辑好,马上提供给大家,以便能够尽快帮助到有需要的人.文章中还为你提供掌门1对 ...

  6. 自动出题机c语言compute,小学数学自动出题工具下载-幼儿园小学数学自动出题机下载v2.0-西西软件下载...

    幼儿园小学数学自动出题机由西西给大家带来,这款软件也是一个非常好用的自动出题软件,并且出的题也是非常的有水准,从此再也不需要你自己来出题,需要的赶紧来下载幼儿园小学数学自动出题机试试吧! 幼儿园小学数 ...

  7. 【C语言】小学数学练习

    小学数学练习 1.1[问题描述] 编写一个帮助小学生练习数学的程序,帮助小学生练习100 以内的四种数学运算:加.减.乘.除. 1.2[基本要求] a) 程序应先询问用户的ID 号(ID 号包括两个大 ...

  8. c语言编写小学数学测试系统,用c语言编写 小学数学考试题

    满意答案 ssjzrl 2013.09.09 采纳率:49%    等级:12 已帮助:13053人 #include "stdio.h" #include "time. ...

  9. java 数学测试_Java实现小学数学练习

    Java语言实现小学数学练习 题目: [问题描述] 编写一个帮助小学生练习数学的程序,帮助小学生练习100以内的四种数学运算:加.减.乘.除. [基本要求] a)程序应先询问用户的ID号(ID号包括两 ...

最新文章

  1. 利用mem数组完成MM32 的 MicroPython中UART1的(REPL)的交互
  2. rm排除某个文件进行删除
  3. 【错误记录】安装 Visual Studio 2013 中文语言包报错 ( 需要 Microsoft Visual Studio Test Agent , 但此计算机上并为安装它 )
  4. 大数据技术 学习之旅_数据-数据科学之旅的起点
  5. ajax如何处理服务器返回的三种数据类型
  6. uniapp 微信小程序打包 vendor.js过大 导致打包超过2M
  7. zookeeper工作原理、安装配置、工具命令简介
  8. 谷歌在华遭遇首例关键词官司
  9. 智能一代云平台(三十六):项目中如何做到避免传递依赖
  10. 2011年3月四级网络工程师笔试试卷 解答思路
  11. equals方法的小结
  12. 友华改设备标识命令_PT632 G_2装备指令
  13. NCBI推出blastp加速服务(Accelerated protein-protein BLAST)
  14. 滚滚长江东逝水历史的天空
  15. html组态插件_组态 web组态 插件 编辑器 使用说明书
  16. 【学堂上新】Unity UGUI 渲染 3D 对象详解
  17. vue 移动端音乐(3) amp;amp;gt;热门歌单推荐部分(webpack-dev-conf.js做后端接口代理+scroll插件)
  18. 在灰度图像上进行Mean Shift迭代搜索目标 ,一维加权直方图 + 巴氏系数 + Mean Shift迭代
  19. Ubuntu16.04下ROS Kinetic的安装(2022)
  20. ldslite是什么启动项_ldslite是什么开机启动项

热门文章

  1. WebSocket断开原因
  2. php在foreach循环后留下数组的引用问题
  3. ENVI入门之不同影像镶嵌之后颜色不一样的色差问题
  4. java实现将多个word文档合并
  5. 共建通往天堂的巴别塔
  6. 中国头孢菌素药物行业市场供需与战略研究报告
  7. MSSQL的datediff函数
  8. 关于开源软件名字的由来
  9. 嵌入式 Linux LED 驱动开发实验
  10. 中国魔笛痛改前非做好准备 国足不能失去传奇大师