前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【公基】口算提速,java 自动生成:加、减、乘、除、混合运算题目

【公基】口算提速,java 自动生成:加、减、乘、除、混合运算题目

作者头像
圆号本昊
发布于 2022-11-21 02:28:30
发布于 2022-11-21 02:28:30
40200
代码可运行
举报
文章被收录于专栏:github@hornhuanggithub@hornhuang
运行总次数:0
代码可运行

效果图

  • 先确定训练那种运算
  • 以及训练多少题:
  • 具体运算:
  • 结果分析

代码

  • 废话不多说,直接上代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package 行测;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;

public class CalculateByMain {
	static enum CalculateType {
		Add,
		Subtract,
		Multiply,
		Divide,
		Mix
	}
	
	public static CalculateType chooseType() {
        System.out.println("请输入出题类型(仅输入数字)\n1:加法\n2:减法\n3、乘法\n4:除法\n5:随机");
        Scanner input = new Scanner(System.in);
        int userResult = input.nextInt();
        switch(userResult) {
        case 1:
        	return CalculateType.Add;
        case 2:
        	return CalculateType.Subtract;
        case 3:
        	return CalculateType.Multiply;
        case 4:
        	return CalculateType.Divide;
        case 5:
        	return CalculateType.Mix;
        }
        System.out.println("类型错误,请重试:");
        return chooseType();
	}
    
    public static int attachSymbolByType(CalculateType type) {
    	int symbol = 0;
    	if(type == CalculateType.Add) {
    		return 0;
    	} else if(type == CalculateType.Subtract) {
    		return 1;
    	} else if(type == CalculateType.Multiply) {
    		return 2;
    	} else if(type == CalculateType.Divide) {
    		return 3;
    	} else if(type == CalculateType.Mix) {
            Random r = new Random();
            return r.nextInt(3); // 生成[0,10]区间的整数
    	}
    	return 0;
    }
    
    public static Boolean doCalculate(CalculateType type) {
    	Boolean isRight = false;
        Random r = new Random();
        int figuresFirst = r.nextInt(899) + 100; // 生成[0,10]区间的整数
        int figuresSecond = r.nextInt(899) + 100; // 生成[0,10]区间的整数
        int symbol = attachSymbolByType(type);
        
        String formula = "";
        formula+=figuresFirst;
        double formulaResult = 0;

        if (symbol == 0) {
            formula += " + ";
            formulaResult = figuresFirst + figuresSecond;
        }else if (symbol == 1) {
            formula += " - ";
            formulaResult = figuresFirst - figuresSecond;
        }else if (symbol == 2) {
            formula += " * ";
            formulaResult = figuresFirst * figuresSecond;
        }else if (symbol == 3) {
            formula += " / ";
            formulaResult = (float) figuresFirst / figuresSecond * 1.0;
        }
    	
        formula += figuresSecond;
        formula += " = ";

        System.out.println(formula);
        Scanner input = new Scanner(System.in);
        double userResult = input.nextDouble();

    	NumberFormat nf = NumberFormat.getNumberInstance();
    	nf.setMaximumFractionDigits(3);
        isRight = Math.abs(formulaResult-userResult) < 0.1;
        System.out.print(isRight ? "\033[1;96m" + "√ 正确 罒ω罒 " +"\033[m" : "\033[1;91m" + "X 错误 (;′⌒`) "+"\033[m");
        System.out.println("答案是:" + nf.format(formulaResult));
        
        return isRight;
    }
    
    public static int scanQuestionNum() {
        System.out.println("你要刷多少题?请输入:");
        Scanner input = new Scanner(System.in);
        return input.nextInt();
    }

    public static void main(String[] args) {
    	CalculateType type = chooseType();
    	int questionNum= scanQuestionNum();
    	int rightNum = 0;
    	
    	int totalTime = 0;
    	for(int i = 0; i < questionNum; i++) {
            System.out.println("第"+(i+1)+"题,"+"还剩"+(questionNum-i-1)+"题:");
        	long frontTime = System.currentTimeMillis();
    		if(doCalculate(type)) {rightNum++;}
        	long behindTime = System.currentTimeMillis();
        	long usageTime = (behindTime - frontTime)/1000;
        	totalTime+=usageTime;
            System.out.println("用时:"+usageTime+"秒");
    	}
    	NumberFormat nf = NumberFormat.getNumberInstance();
    	nf.setMaximumFractionDigits(2);
        System.out.println("恭喜完成!正确率:" + nf.format((float)rightNum/questionNum*100) + "%");
        System.out.println("总用时:"+totalTime+"秒,平均用时"+totalTime/questionNum+"秒");
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/11/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【公基】百化分 - 常考 20 种百化分,java 乱序出题训练,常见常考百分数和分数对应关系
效果 练习实况 结果分析 代码 不废话,直接上代码 package 百化分; import java.text.NumberFormat; import java.util.Collections; import java.util.HashMap; import java.util.Scanner; public class PercentageCorrespondence { static HashMap<String, Integer> arrMap = new HashMap<Stri
圆号本昊
2022/11/21
4890
【公基】百化分 - 常考 20 种百化分,java 乱序出题训练,常见常考百分数和分数对应关系
JAVA保留两位小数(四舍五入)「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.8K0
JAVA保留两位小数(四舍五入)「建议收藏」
Java学习笔记(持续更新ing)
在Java中,在字符串 st 中要将一段子串 s 替换成另一段子串 t,这个时候可以用 replace。
Lokinli
2023/03/09
4270
Java:对double值进行四舍五入,保留两位小数的几种方法
比如:输入12345.6789,输出可以是12345.68也可以是12345.67。至于是否需要四舍五入,可以通过参数来决定(RoundingMode.UP/RoundingMode.DOWN等参数)。
lin_zone
2018/08/15
4.7K0
基础算法练习200题03、电视剧每集时间(四舍五入)
📋前言📋 💝博客:【红目香薰的博客_CSDN博客-计算机理论,2022年蓝桥杯,MySQL领域博主】💝 ✍本文由在下【红目香薰】原创,首发于CSDN✍ 🤗2022年最大愿望:【服务百万技术人次】🤗 💝专栏地址:【https://blog.csdn.net/feng8403000/category_11958599.html】💝  ----       为了帮助很多想搞算法但又害怕自己搞不定的孩子们,老师付准备了200个入门的逻辑练习题,在这200个逻辑练习题下可以加强你们的基础算法能力,以次
红目香薰
2022/11/29
2430
基础算法练习200题03、电视剧每集时间(四舍五入)
Java学习历程之----基础篇(十)
在解决实际问题时,对数字和日期的处理是非常普遍的,如数学问题、随机数问题和日期问题等。为了解决这些问题,Java 提供了处理相关问题的类,包括 Math 类、Random 类、BigInteger 类、Date 类等。
用户5410712
2022/06/01
2270
Java学习历程之----基础篇(十)
【愚公系列】2021年12月 Java教学课程 17-Random随机数的使用
文章目录 一、Random 1.Random产生随机数(掌握) 2.Random练习-猜数字(应用) ---- 一、Random 1.Random产生随机数(掌握) 概述: Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能 API后续课程详细讲解,现在可以简单理解为Java已经写好的代码 使用步骤: 导入包 import java.util.Random; 创建对象 Random r = new Random(); 产生随机数 int nu
愚公搬代码
2021/12/29
2340
double保留小数点后两位_保留两位小数点公式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/01
2.5K0
一个可以测试并发数和运行次数的压力测试代码。
◆ 今天写了一个可以测试并发数和运行次数的压力测试代码 介绍一下为什么会写这么一个工具。 介绍一个这个工具怎么用的。 ◆ 背景 最近在开发CoapServer端,以及模拟设备侧发送数据调用开发好的CoapServer的性能,进行压力测试。 自己没有找到合适的压力测试的工具,但是测试诉求相对比较简单,觉得用Java可以来控制测试。 测试维度: 一共模拟1W台设备,共计发送数据100W次 模拟多台设备同时发送数据。 ◆ 代码和使用 Copyimport org.eclipse.californium.c
IT大咖说
2022/04/22
8290
一个可以测试并发数和运行次数的压力测试代码。
Java计时新姿势
在我们的程序中不免需要对某一个运算或者方法进行计时,以便我们来观察该运算或方法是否符合我们的预期,所以在我们刚开始接触 Java 的时候都能写出类似下面这样的代码来计时:
我没有三颗心脏
2019/08/01
9280
Java计时新姿势
java之StopWatch源码分析
计时这个词语在生活中被应用的很普遍,体育竞赛时频繁出现的秒表,发令信号一经发出,秒表就在滴答滴答流转开始计时了,秒表此时的作用就是计时的代名词,在我们编写代码的时候,时不时也要统计一下执行一个方法或者一系列逻辑时所消耗的时间。
码农王同学
2019/10/24
9590
OCJP 考试题之八
Giventhe following directory structure: bigProject |--source | |--Utils.java ||--classes |-- And the following command line invocation: javac -d classessource/Utils.java Assume the current directory is bigProject, what is theresult?
张哥编程
2024/12/17
670
OCJP  考试题之八
Java计时使用
在我们的程序中不免需要对某一个运算或者方法进行计时,以便我们来观察该运算或方法是否符合我们的预期,所以在我们刚开始接触 Java 的时候都能写出类似下面这样的代码来计时:
Vincent-yuan
2021/11/18
7610
Springframwork.Util之StopWatch 多任务计时
StopWatch是spring框架提供的一个util, 用来做多任务的计时, 隐藏了System.currentTimeMillis()的使用, 增加应用程序的可读性, 但是他不是为线程安全来设计的
CoffeeLand
2020/04/06
2K0
【经验总结】Java在ACM算法竞赛编程中易错点
一、Java之ACM易错点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非常之垃圾 3. 有些OJ上的题目会直接将OI上的题目拷贝过来,所以即便是题目中有输入和输出文件,可能也不需要,因为在OJ系统中一般是采用标准输入输出,不需要文件 4. 在有多行数据输入的情况下,一般这样处理: 1 static Scanner in = new Scanner(System.in); 2 w
Angel_Kitty
2018/04/09
1.5K0
java猜数小游戏
0.效果 1.代码 package number; import java.math.*; import java.util.Scanner; /** * * @author 花狗Fdog *
花狗Fdog
2020/10/28
1.7K0
java猜数小游戏
Java综合题目
分支, 循环, 数据类型 1, 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 2, 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 3, 题目:求1!+2!+3!+...+20!的和(5!表示5的阶乘, 即5*4*3*2*1) 4, 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 5, 题目:先写一个程序, 随机生成一个3*3的矩阵数字(1-9数字全部用到
二十三年蝉
2018/02/28
1.2K0
使用StopWatch计算耗时[通俗易懂]
一般采用 System.currentTimeMillis() 来获取时间,然后打印当前时间与任务开始执行时间的差值。
全栈程序员站长
2022/09/09
1.7K0
使用StopWatch计算耗时[通俗易懂]
day07_Scanner类,Random类,ArrayList类
Scanner类的功能:可以实现键盘输入数据到程序中 引用类型的一般步骤: 1.导包 import 包路径.类名称; 如果需要使用的目标类,和当前类位于同一个包中,则可以省略导入语句 只有java.lang包下的内容不需要导包,其他的都需要import语句。
全栈程序员站长
2022/06/29
6600
java.math.BigDecimal保留两位小数[通俗易懂]
java保留两位小数问题: 一: 四舍五入(四舍五入形式保留两位小数,注意模式ROUND_HALF_UP) double f = 2345.2345; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 保留两位小数 二: double f = 2345.2345; java.text.DecimalFormat df =new java.text.DecimalFormat(“#.00”); df.format(f); 例:new java.text.DecimalFormat(“#.00”).format(2.1234567) #.00 表示两位小数 #.0000四位小数 以此类推… 三: double d = 2.1234567; String result = String .format(“%.2f”); %.2f %. 表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型 四: NumberFormat ddf1=NumberFormat.getNumberInstance() ; void setMaximumFractionDigits(int digits) digits 显示的数字位数 为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的 import java.text.* ; import java.math.* ; class TT { public static void main(String args[]) { double x=2.1234567; NumberFormat ddf1=NumberFormat.getNumberInstance() ; ddf1.setMaximumFractionDigits(2); String s= ddf1.format(x) ; System.out.print(s); } } 二 、BigDecimal 的加减乘除使用 BigDecimal bignum1 = new BigDecimal(“10”); BigDecimal bignum2 = new BigDecimal(“5”); BigDecimal bignum3 = null; //加法 bignum3 = bignum1.add(bignum2); System.out.println(“和 是:” + bignum3);
全栈程序员站长
2022/11/09
2.5K0
推荐阅读
相关推荐
【公基】百化分 - 常考 20 种百化分,java 乱序出题训练,常见常考百分数和分数对应关系
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档