首页 > 学院 > 开发设计 > 正文

一个简单的加减乘除自动生成小程序升级版(JAVA)

2019-11-14 23:29:52
字体:
来源:转载
供稿:网友
一个简单的加减乘除自动生成小程序升级版(java
  1 import java.util.Scanner;  2 public class Suan {  3     public static void main(String[] args) {      4         int []b;//设置数组来存放随机产生数  5         b=new int [4];  6         Scanner in=new Scanner(System.in);  7         System.out.PRintln("请选择你想练习的题型:");  8         System.out.println(" 1、分数的加减乘数法练习!");  9         System.out.println(" 2、整数的加减乘数法练习!"); 10         int xuanze=in.nextInt(); 11         System.out.println("你想输出四则运算的个数是:"); 12         int num=in.nextInt(); 13         String []a={"+","-","*","/"};//整数运算存放符号的数组 14         String res,res1 = null, sum1=null;//res为你输入的答案,res1为分数运算和整数运算除法中的正确答案 15         int []c;//符号的代数 16         int j=0,sum2=0;//sum2为整数运算中加减除的用户输入答案 17         int rshu = 0;//用户计算正确数 18         c=new int [4]; 19         if(1==xuanze)//选择应该输出怎样类型的算式 20         { 21         for(int i=0;i<4;i++)//产生符号的代数 22         { 23             c[i]=(int)(Math.random()*14/3);     24         } 25         for( j=0;j<num;j++)//不够num个数就继续输出算式 26         { 27         for(int i=0;i<4;i++)//产生1到10的随机数 28         { 29             b[i]=(int)( Math.random()*10);             30         }     31          32         if(b[0]>b[1]&&b[2]>b[3]&&b[0]!=0&&b[1]!=0&&b[2]!=0&&b[3]!=0)//真分数的前提 33             { 34                System.out.println("("+b[1]+"/"+b[0]+")"+  a[c[0]]+"("+   b[3]+"/"+b[2]+")"); 35                System.out.print("你的答案是:"); 36                res=in.next(); 37               switch(c[0]){//调用成员方法计算 38                      case 0:res1=fracAdd(b[1],b[0],b[3],b[2]);break; 39                      case 1:res1=fracSub(b[1],b[0],b[3],b[2]);break; 40                      case 2:res1=fracMul(b[1],b[0],b[3],b[2]);break; 41                      case 3:res1=fractDiv(b[1],b[0],b[3],b[2]);break; 42                           } 43               if(!res.equals(res1))//比较答案 44               { 45                   System.out.println("你的答案错误!正确答案为:"+res1);       46               } 47               else  48               { 49                   rshu++;//用户计算正确数 50               } 51             } 52         else 53             j--; 54         } 55         } 56         if  (2==xuanze)//选择整型数算式 57         { 58              59             for( int r=0;r<num;r++)//不够num个数就继续输出算式 60             { 61                 int sum = -1;//真正的结果 62             for(int i=0;i<4;i++) 63             { 64                 b[i]=(int)( Math.random()*100);             65             }         66             for(int i=0;i<4;i++) 67             { 68                 c[i]=(int)(Math.random()*14/3);     69             }     70             switch(c[0])//判断应该用什么符号 71             { 72             case 0 : 73             case 1 :sum=b[0]+b[1];break; 74             case 2 :sum=b[0]-b[1];break; 75             case 3 :sum=b[0]*b[1];break; 76             case 4 : sum1=fractDiv2(b[0],b[1]);break;//除号时调用函数,结果显示分数 77             } 78                 /*if(sum<0)//减法计算结果不能为0 79                 { 80                     j--; 81                 }*/ 82                 if(c[0]==4)//如果符号是除号时 83                 { 84                     System.out.println(b[0]+a[c[0]-1]+b[1]+"="); 85                     System.out.print("你的答案是:"); 86                        res=in.next(); 87                        if(!res.equals(sum1)) 88                           { 89                               System.out.println("你的答案错误!正确答案为:"+sum1);       90                           } 91                        else 92                            rshu++; 93                 } 94                 else//如果符号不是除号时 95                 { 96                     System.out.println(b[0]+a[c[0]-1]+b[1]+"="); 97                     System.out.print("你的答案是:"); 98                     sum2=in.nextInt(); 99                     if(sum2!=sum)100                       {101                           System.out.println("你的答案错误!正确答案为:"+sum);      102                       }103                    else104                        rshu++;105                     //System.out.println(sum);106                 }107                 System.out.println(r);108                 109             }110         }111         else112         {}113         System.out.println("你一共答对了"+rshu+"道题");114 115     }116     static String fracAdd(int first_numerator,int first_denominator,int second_numrator,int second_denominator){  117         //分数加法118         //需要调用求最大公约数的函数  119         120         int denominator;  //分子121         int numerator;  //分母122           123         if(first_denominator==second_denominator)  //分母相同时加分子       124         {        125              denominator=first_denominator;        126              numerator=first_numerator+second_numrator;        127         }        128         else  //否则同分比较分子       129         {        130             denominator=first_denominator*second_denominator;        131             numerator=first_numerator*second_denominator+first_denominator*second_numrator;        132         }      133         int gcd = gcd(numerator,denominator);  //调用gcd方法约分134         denominator = denominator / gcd;  135         numerator = numerator / gcd;       136         if(0==denominator/numerator)137         {138             String res="0";139             return res;140         }141         else142         {143         String zi1=String.valueOf(numerator);//把结果转换成字符串输出144         String zi2=String.valueOf(denominator);//把结果转换成字符串输出145         String zi3="/";//把结果转换成字符串输出146         String res2=zi1+zi3+zi2;//把结果转换成字符串输出  147         148         return res2; }      149   150     }  151      static String fracSub(int first_numerator,int first_denominator,int second_numrator,int second_denominator){  152               153             //需要调用求最大公约数的函数  154               155             int denominator;  156             int numerator;  157               158             if(first_denominator==second_denominator)  //分母相同时加分子       159             {        160                  denominator=first_denominator;        161                  numerator=first_numerator-second_numrator;        162             }        163             else  //否则同分比较分子       164             {        165                 denominator=first_denominator*second_denominator;        166                 numerator=first_numerator*second_denominator-first_denominator*second_numrator;        167             }      168             int gcd = gcd(numerator,denominator);  169             denominator = denominator / gcd;  170             numerator = numerator / gcd;   171             if(0==denominator/numerator)172             {173                 String res="0";174                 return res;175             }176             else177             {178             String zi1=String.valueOf(numerator);179             String zi2=String.valueOf(denominator);180             String zi3="/";181             String res2=zi1+zi3+zi2;  182             return res2;   }     183       184         }  185         static String fracMul(int first_numerator,int first_denominator,int second_numerator,int second_denominator){  186               187             //需要调用求最大公约数的函数     188             int denominator;  189             int numerator;  190               191              192                 denominator=first_denominator*second_denominator;        193                 numerator=first_numerator*second_numerator;   194                 195             int gcd = gcd(numerator,denominator);  196             denominator = denominator / gcd;  197             numerator = numerator / gcd;  198             if(0==denominator/numerator)199             {200                 String res="0";201                 return res;202             }203             else204             {205             String zi1=String.valueOf(numerator);206             String zi2=String.valueOf(denominator);207             String zi3="/";208             String res2=zi1+zi3+zi2;   209             return res2;      }210       211         }  212         static String fractDiv(int first_numerator,int first_denominator,int second_numerator,int second_denominator){  213            214             //需要调用求最大公约数的函数  215               216             int denominator;  217             int numerator;  218               219             numerator = first_numerator*second_denominator;  220             denominator = first_denominator*second_numerator;  221               222                   223                 224             int gcd = gcd(numerator,denominator);  225             denominator = denominator / gcd;  226             numerator = numerator / gcd;          227             String zi1=String.valueOf(numerator);228             String zi2=String.valueOf(denominator);229             String zi3="/";230             String res2=zi1+zi3+zi2;231             return res2;         232       233         }234         static String fractDiv2(int first,int second){  235            236             //需要调用求最大公约数的函数       237             int denominator= first;  238             int numerator= second;        239             int gcd = gcd(numerator,denominator);  240             denominator = denominator / gcd;  241             numerator = numerator / gcd;          242             String zi1=String.valueOf(numerator);243             String zi2=String.valueOf(denominator);244             String zi3="/";245             String res2=zi1+zi3+zi2;246             return res2;           247         }248     static int gcd(int x,int y){  //利用辗转相除法求最大公约数249         int r;        250            while( y!= 0)        251            {        252                r = x%y;        253                x = y;        254                y = r;        255            }        256        return x;  257          258    }  259      260 261 }

运行结果:

感想:用了四个小时左右把原来的那个作业一修改成可以自动生成分数加减乘除的算法,虽然还不太完善,但是,基本功能还是实现了。感觉很开心

注:昨天下午已经把程序写好,只是学校网络一直上传不了程序,今天没办法,只能用手机开WiFi电脑连然后发布!T_T


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表