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)的更多相关文章

  1. 一个简单的加减乘除自动生成小程序(JAVA)

    在学习软件工程的时候,遇到一个这样的问题,一个程序员的儿子上小学二年级,老师让家长每天出30道加减题目给学生做,由于家长是个程序员,所以呢,他就自己写了个程序实现,我们可爱的老师于是也叫我们写了一个类 ...

  2. 使用MFC做一个简单的‘能自动生成小学生四则运算的软件’

    这是软件工程的第一次作业!但由于我们python还没入门,所以这次的要求是‘语言不限’. 小学期做过一个关于MFC的‘资金管理系统’,也正好可以有界面,所以就选择了自己很熟悉的MFC来做这个作业! 1 ...

  3. go语言实现一个简单的登录注册web小程序

    最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...

  4. 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

    #!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...

  5. nodejs + 小程序云函数 生成小程序码

    前言:这个东西坑死我了 业务需求要生成小程序码 然后我找了两天的资料 运行 生成一堆的乱码 死活就是不能生成 最后看了一遍博客 套用了一下 自己又简单的改了一下  nodejs 我是刚刚接触  有很多 ...

  6. .NET生成小程序码,并合自定义背景图生成推广小程序二维码

    前言: 对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了.今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种 ...

  7. 一个简单的猜大小的小游戏 python

    初学python,用python写了一个简单的猜大小的小游戏 #!/usr/bin/env python #-*- coding:utf-8 -*- print "------------- ...

  8. 微信小程序获取Access_token和页面URL生成小程序码或二维码

    1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...

  9. PHP生成小程序二维码

    /** * [生成小程序二维码] * @return [type] [description] */ public function makeMiniQrcode_do() { begin: $id ...

随机推荐

  1. h5声音录制/播放

    html代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  2. delphi7 TRichView 安装

    下载: 链接: https://pan.baidu.com/s/1gfMYeGF 密码: 45bn 打开目录:E:\Delphi7\TRichView.v.16.10.3 ScaleRichView. ...

  3. Hexo+Github博客搭建

    一.准备 1.安装git 点击下载:链接:https://pan.baidu.com/s/1eToStns 密码:r93r 安装参考之前随笔:http://www.cnblogs.com/jiangb ...

  4. WPF 扩大,回弹效果

    原文:WPF 扩大,回弹效果 <Window x:Class="Fish.AccountBook.View.Test.PanelWindow" xmlns="htt ...

  5. 洛谷 P2563 [AHOI2001]质数和分解

    洛谷  P2563 [AHOI2001]质数和分解 题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能 ...

  6. 【HNOI2013】比赛

    题面 题解 \(n \leq 9 \to\)爆搜 对每一场的结果进行搜索,最后进行\(\mathrm{check}\) 然后会发现没有什么分 搜索最重要的就是剪枝 接下来就列出一些剪枝 搜索时,强制每 ...

  7. 巧用 Python 找工作(资料在文末)

    前言 近年来 Python 之火大家都有感而知,那亲们知道北京的 Python 开发岗位.运维开发岗位招聘地域都是如何分布的吗?薪水如何?是否有前景等等,这些数据呢直接通过招聘信息来了解到企业用人是最 ...

  8. Form,选择并转移导航菜单

    1.代码实例 <!DOCTYPE html> <html> <head> <title>选择并转移导航菜单</title> <meta ...

  9. Winfrom Panel Scroll End 的实现

    场景:在一个panel里面有非常多的自定义绘制的控件,在拖拉滚动条的时候,控件的画面上有残影 不知道大家遇到过这种情况没,一直做web的winform经验太少,有更好的解决办法请贡献 首先放出我的解决 ...

  10. javaweb学习1——加密

    声明:本文只是自学过程中,记录自己不会的知识点的摘要,如果想详细学习JavaWeb,请到孤傲苍狼博客学习,JavaWeb学习点此跳转 本文链接:https://www.cnblogs.com/xdp- ...