zoukankan      html  css  js  c++  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                    else
    104                        rshu++;
    105                     //System.out.println(sum);
    106                 }
    107                 System.out.println(r);
    108                 
    109             }
    110         }
    111         else
    112         {}
    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         else
    142         {
    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             else
    177             {
    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             else
    204             {
    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

  • 相关阅读:
    InstallShield 2010集成.net Framework 4的安装包制作
    linux之稀疏文件
    linux之od命令
    Python多线程
    GCC编译器和GDB调试器常用选项
    Linux GDB Debug
    Linux Core Dump
    linux 通过 ulimit 改善系统性能
    linux的ulimit命令
    字符编码笔记:ASCII,Unicode和UTF-8
  • 原文地址:https://www.cnblogs.com/Lingchao/p/4373569.html
Copyright © 2011-2022 走看看