一个简单的加减乘除自动生成小程序升级版(JAVA)
import java.util.Scanner;
public class Suan {
public static void main(String[] args) {
int []b;//设置数组来存放随机产生数
b=new int [4];
Scanner in=new Scanner(System.in);
System.out.println("请选择你想练习的题型:");
System.out.println(" 1、分数的加减乘数法练习!");
System.out.println(" 2、整数的加减乘数法练习!");
int xuanze=in.nextInt();
System.out.println("你想输出四则运算的个数是:");
int num=in.nextInt();
String []a={"+","-","*","/"};//整数运算存放符号的数组
String res,res1 = null, sum1=null;//res为你输入的答案,res1为分数运算和整数运算除法中的正确答案
int []c;//符号的代数
int j=0,sum2=0;//sum2为整数运算中加减除的用户输入答案
int rshu = 0;//用户计算正确数
c=new int [4];
if(1==xuanze)//选择应该输出怎样类型的算式
{
for(int i=0;i<4;i++)//产生符号的代数
{
c[i]=(int)(Math.random()*14/3);
}
for( j=0;j<num;j++)//不够num个数就继续输出算式
{
for(int i=0;i<4;i++)//产生1到10的随机数
{
b[i]=(int)( Math.random()*10);
} if(b[0]>b[1]&&b[2]>b[3]&&b[0]!=0&&b[1]!=0&&b[2]!=0&&b[3]!=0)//真分数的前提
{
System.out.println("("+b[1]+"/"+b[0]+")"+ a[c[0]]+"("+ b[3]+"/"+b[2]+")");
System.out.print("你的答案是:");
res=in.next();
switch(c[0]){//调用成员方法计算
case 0:res1=fracAdd(b[1],b[0],b[3],b[2]);break;
case 1:res1=fracSub(b[1],b[0],b[3],b[2]);break;
case 2:res1=fracMul(b[1],b[0],b[3],b[2]);break;
case 3:res1=fractDiv(b[1],b[0],b[3],b[2]);break;
}
if(!res.equals(res1))//比较答案
{
System.out.println("你的答案错误!正确答案为:"+res1);
}
else
{
rshu++;//用户计算正确数
}
}
else
j--;
}
}
if (2==xuanze)//选择整型数算式
{ for( int r=0;r<num;r++)//不够num个数就继续输出算式
{
int sum = -1;//真正的结果
for(int i=0;i<4;i++)
{
b[i]=(int)( Math.random()*100);
}
for(int i=0;i<4;i++)
{
c[i]=(int)(Math.random()*14/3);
}
switch(c[0])//判断应该用什么符号
{
case 0 :
case 1 :sum=b[0]+b[1];break;
case 2 :sum=b[0]-b[1];break;
case 3 :sum=b[0]*b[1];break;
case 4 : sum1=fractDiv2(b[0],b[1]);break;//除号时调用函数,结果显示分数
}
/*if(sum<0)//减法计算结果不能为0
{
j--;
}*/
if(c[0]==4)//如果符号是除号时
{
System.out.println(b[0]+a[c[0]-1]+b[1]+"=");
System.out.print("你的答案是:");
res=in.next();
if(!res.equals(sum1))
{
System.out.println("你的答案错误!正确答案为:"+sum1);
}
else
rshu++;
}
else//如果符号不是除号时
{
System.out.println(b[0]+a[c[0]-1]+b[1]+"=");
System.out.print("你的答案是:");
sum2=in.nextInt();
if(sum2!=sum)
{
System.out.println("你的答案错误!正确答案为:"+sum);
}
else
rshu++;
//System.out.println(sum);
}
System.out.println(r); }
}
else
{}
System.out.println("你一共答对了"+rshu+"道题"); }
static String fracAdd(int first_numerator,int first_denominator,int second_numrator,int second_denominator){
//分数加法
//需要调用求最大公约数的函数 int denominator; //分子
int numerator; //分母 if(first_denominator==second_denominator) //分母相同时加分子
{
denominator=first_denominator;
numerator=first_numerator+second_numrator;
}
else //否则同分比较分子
{
denominator=first_denominator*second_denominator;
numerator=first_numerator*second_denominator+first_denominator*second_numrator;
}
int gcd = gcd(numerator,denominator); //调用gcd方法约分
denominator = denominator / gcd;
numerator = numerator / gcd;
if(0==denominator/numerator)
{
String res="0";
return res;
}
else
{
String zi1=String.valueOf(numerator);//把结果转换成字符串输出
String zi2=String.valueOf(denominator);//把结果转换成字符串输出
String zi3="/";//把结果转换成字符串输出
String res2=zi1+zi3+zi2;//把结果转换成字符串输出 return res2; } }
static String fracSub(int first_numerator,int first_denominator,int second_numrator,int second_denominator){ //需要调用求最大公约数的函数 int denominator;
int numerator; if(first_denominator==second_denominator) //分母相同时加分子
{
denominator=first_denominator;
numerator=first_numerator-second_numrator;
}
else //否则同分比较分子
{
denominator=first_denominator*second_denominator;
numerator=first_numerator*second_denominator-first_denominator*second_numrator;
}
int gcd = gcd(numerator,denominator);
denominator = denominator / gcd;
numerator = numerator / gcd;
if(0==denominator/numerator)
{
String res="0";
return res;
}
else
{
String zi1=String.valueOf(numerator);
String zi2=String.valueOf(denominator);
String zi3="/";
String res2=zi1+zi3+zi2;
return res2; } }
static String fracMul(int first_numerator,int first_denominator,int second_numerator,int second_denominator){ //需要调用求最大公约数的函数
int denominator;
int numerator; denominator=first_denominator*second_denominator;
numerator=first_numerator*second_numerator; int gcd = gcd(numerator,denominator);
denominator = denominator / gcd;
numerator = numerator / gcd;
if(0==denominator/numerator)
{
String res="0";
return res;
}
else
{
String zi1=String.valueOf(numerator);
String zi2=String.valueOf(denominator);
String zi3="/";
String res2=zi1+zi3+zi2;
return res2; } }
static String fractDiv(int first_numerator,int first_denominator,int second_numerator,int second_denominator){ //需要调用求最大公约数的函数 int denominator;
int numerator; numerator = first_numerator*second_denominator;
denominator = first_denominator*second_numerator; int gcd = gcd(numerator,denominator);
denominator = denominator / gcd;
numerator = numerator / gcd;
String zi1=String.valueOf(numerator);
String zi2=String.valueOf(denominator);
String zi3="/";
String res2=zi1+zi3+zi2;
return res2; }
static String fractDiv2(int first,int second){ //需要调用求最大公约数的函数
int denominator= first;
int numerator= second;
int gcd = gcd(numerator,denominator);
denominator = denominator / gcd;
numerator = numerator / gcd;
String zi1=String.valueOf(numerator);
String zi2=String.valueOf(denominator);
String zi3="/";
String res2=zi1+zi3+zi2;
return res2;
}
static int gcd(int x,int y){ //利用辗转相除法求最大公约数
int r;
while( y!= 0)
{
r = x%y;
x = y;
y = r;
}
return x; } }
运行结果:

感想:用了四个小时左右把原来的那个作业一修改成可以自动生成分数加减乘除的算法,虽然还不太完善,但是,基本功能还是实现了。感觉很开心
注:昨天下午已经把程序写好,只是学校网络一直上传不了程序,今天没办法,只能用手机开WiFi电脑连然后发布!T_T
一个简单的加减乘除自动生成小程序升级版(JAVA)的更多相关文章
- 一个简单的加减乘除自动生成小程序(JAVA)
在学习软件工程的时候,遇到一个这样的问题,一个程序员的儿子上小学二年级,老师让家长每天出30道加减题目给学生做,由于家长是个程序员,所以呢,他就自己写了个程序实现,我们可爱的老师于是也叫我们写了一个类 ...
- 使用MFC做一个简单的‘能自动生成小学生四则运算的软件’
这是软件工程的第一次作业!但由于我们python还没入门,所以这次的要求是‘语言不限’. 小学期做过一个关于MFC的‘资金管理系统’,也正好可以有界面,所以就选择了自己很熟悉的MFC来做这个作业! 1 ...
- go语言实现一个简单的登录注册web小程序
最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...
- 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能
#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...
- nodejs + 小程序云函数 生成小程序码
前言:这个东西坑死我了 业务需求要生成小程序码 然后我找了两天的资料 运行 生成一堆的乱码 死活就是不能生成 最后看了一遍博客 套用了一下 自己又简单的改了一下 nodejs 我是刚刚接触 有很多 ...
- .NET生成小程序码,并合自定义背景图生成推广小程序二维码
前言: 对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了.今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种 ...
- 一个简单的猜大小的小游戏 python
初学python,用python写了一个简单的猜大小的小游戏 #!/usr/bin/env python #-*- coding:utf-8 -*- print "------------- ...
- 微信小程序获取Access_token和页面URL生成小程序码或二维码
1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...
- PHP生成小程序二维码
/** * [生成小程序二维码] * @return [type] [description] */ public function makeMiniQrcode_do() { begin: $id ...
随机推荐
- Go语言学习 总结一
1,定义main, package main 一个可独立执行的程序,(类似main方法) 2,import “fmt” fmt 实现格式化IO(输入/输出) (类似system.out.print() ...
- 【转】SVG与HTML、JavaScript的三种调用方式
原文:https://www.cnblogs.com/guohu/p/5085045.html SVG与HTML.JavaScript的三种调用方式 一.在HTMl中访问SVG的DOM 1 2 3 4 ...
- 【commons】Bean工具类——commons-beanutils之BeanUtils
一.起步 引入依赖: <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> < ...
- 20155236范晨歌_MSF基础应用
20155236范晨歌_MSF基础应用 20155236范晨歌_MSF基础应用 目录 概述 MS08-067漏洞攻击 MS11-050漏洞攻击 MS10-087漏洞攻击 辅助模块 概述 MSF的六种模 ...
- [二进制trie][贪心]CSUOJ1216异或最大值
题目传送门 过了好久,终于重新开始写博客了... 这是一道二进制trie树的模板题. 二进制trie树,理解一下就是一颗二叉树,左右儿子为0或1. 然后每插入一个数就进行一次Find操作. Find: ...
- Caffe on Windows (Visual Studio 2015+CUDA8.0+cuDNNv5)
Title : Caffe (Visual Studio15+CUDA8+cuDNN5+python3.5) Author : SURFZJY Logo : True [TITLE] Requirem ...
- codeforces 914 D 线段树+数学
题意 给出一个长度为\(n\)的数列\(a\),两种询问,第一种给出三个数\(l,r,x\),区间\([l,r]\)的\(gcd\)值是否和\(x\)相似,若最多改变区间\([l,r]\)中的一个数使 ...
- Java并发工具类(一):等待多线程完成的CountDownLatch
作用 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行 简介 CountDownLatch是在java1.5被引入的,存在于java.uti ...
- PHP Rabbitmq 报错Broken pipe
fwrite(): send of 13 bytes failed with errno=32 Broken pipe fwrite(): send of 21 bytes failed with e ...
- 五、Django之视图和模板-Part 3
一.概述 一个视图就是一个页面,通常提供特定的功能,使用特定的模版.列如:在一个博客应用中,你可能会看到下列视图: 博客主页:显示最新发布的一些内容 每篇博客的详细页面:博客的永久链接 基于年的博客页 ...