你的位置:首页 > Java教程

[Java教程]一个简单的加减乘除自动生成小程序升级版(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