zoukankan      html  css  js  c++  java
  • 存在不知道是什么问题的程序

      1 import java.util.InputMismatchException;
      2 import java.util.Scanner;
      3 public class Suan {
      4     public static void main(String[] args) {    
      5         int []b;//设置数组来存放随机产生数
      6         b=new int [4];int num=0;boolean panduan = true;int xuanze=1;
      7         Scanner in=new Scanner(System.in);
      8         do {
      9             try {
     10                 
     11                 System.out.println("请选择你想练习的题型:");
     12                 System.out.println(" 1、分数的加减乘数法练习!");
     13                 System.out.println(" 2、整数的加减乘数法练习!");
     14                 xuanze=in.nextInt();
     15                  
     16                  if(xuanze==1||xuanze==2){
     17                      panduan = false;  }
     18                  else
     19                  System.out.println("你输入选项错误,请重新输入!");
     20             } catch (InputMismatchException e) {
     21                 System.out.println("你输入了错误的类型,请重新输入!");
     22                 panduan = true;
     23                 
     24             }
     25         } while (panduan);
     26         panduan = false;
     27         do {
     28             try {
     29                 
     30                 
     31                 
     32                 System.out.println("你想输出四则运算的个数是:");
     33                  num=in.nextInt();  
     34                 panduan = false;
     35             } catch (InputMismatchException e) {
     36                 System.out.println("你输入了错误的类型,请重新输入!");
     37                 panduan = true;
     38             }
     39         } while (panduan);
     40         
     41         String []a={"+","-","*","/"};//整数运算存放符号的数组
     42         String res,res1 = null, sum1=null;//res为你输入的答案,res1为分数运算和整数运算除法中的正确答案
     43         int []c;//符号的代数
     44         int j=0,sum2=0;//sum2为整数运算中加减除的用户输入答案
     45         int rshu = 0;//用户计算正确数
     46         c=new int [4];
     47         if(1==xuanze)//选择应该输出怎样类型的算式
     48         {
     49         for(int i=0;i<4;i++)//产生符号的代数
     50         {
     51             c[i]=(int)(Math.random()*14/3);    
     52         }
     53         for( j=0;j<num;j++)//不够num个数就继续输出算式
     54         {
     55         for(int i=0;i<4;i++)//产生1到10的随机数
     56         {
     57             b[i]=(int)( Math.random()*10);            
     58         }    
     59         
     60         if(b[0]>b[1]&&b[2]>b[3]&&b[0]!=0&&b[1]!=0&&b[2]!=0&&b[3]!=0)//真分数的前提
     61             {
     62                System.out.println("("+b[1]+"/"+b[0]+")"+  a[c[0]]+"("+   b[3]+"/"+b[2]+")");
     63                System.out.print("你的答案是:");
     64                res=in.next();
     65               switch(c[0]){//调用成员方法计算
     66                      case 0:res1=fracAdd(b[1],b[0],b[3],b[2]);break;
     67                      case 1:res1=fracSub(b[1],b[0],b[3],b[2]);break;
     68                      case 2:res1=fracMul(b[1],b[0],b[3],b[2]);break;
     69                      case 3:res1=fractDiv(b[1],b[0],b[3],b[2]);break;
     70                           }
     71               if(!res.equals(res1))//比较答案
     72               {
     73                   System.out.println("你的答案错误!正确答案为:"+res1);      
     74               }
     75               else 
     76               {
     77                   rshu++;//用户计算正确数
     78               }
     79             }
     80         else
     81             j--;
     82         }
     83         }
     84         if  (2==xuanze)//选择整型数算式
     85         {
     86             
     87             for( int r=0;r<num;r++)//不够num个数就继续输出算式
     88             {
     89                 int sum = -1;//真正的结果
     90             for(int i=0;i<4;i++)
     91             {
     92                 b[i]=(int)( Math.random()*100);            
     93             }        
     94             for(int i=0;i<4;i++)
     95             {
     96                 c[i]=(int)(Math.random()*11/3);    
     97             }    
     98             c[0]+=1;
     99             switch(c[0])//判断应该用什么符号
    100             {
    101             case 0 :
    102             case 1 :sum=b[0]+b[1];break;
    103             case 2 :sum=b[0]-b[1];break;
    104             case 3 :sum=b[0]*b[1];break;
    105             case 4 : sum1=fractDiv2(b[0],b[1]);break;//除号时调用函数,结果显示分数
    106             }
    107                 /*if(sum<0)//减法计算结果不能为0
    108                 {
    109                     j--;
    110                 }*/
    111                 if(c[0]==4)//如果符号是除号时
    112                 {
    113                     System.out.println(b[0]+a[c[0]-1]+b[1]+"=");
    114                     System.out.print("你的答案是:");
    115                        res=in.next();
    116                        if(!res.equals(sum1))
    117                           {
    118                               System.out.println("你的答案错误!正确答案为:"+sum1);      
    119                           }
    120                        else
    121                            rshu++;
    122                 }
    123                 else//如果符号不是除号时
    124                 {
    125                     System.out.println(b[0]+a[c[0]-1]+b[1]+"=");
    126                     System.out.print("你的答案是:");
    127                     sum2=in.nextInt();
    128                     if(sum2!=sum)
    129                       {
    130                           System.out.println("你的答案错误!正确答案为:"+sum);      
    131                       }
    132                    else
    133                    {
    134                      System.out.println("答案正确!");
    135                        rshu++;
    136                    }
    137                     //System.out.println(sum);
    138                 }
    139                 //System.out.println(r);
    140                 
    141             }
    142         }
    143         /*else
    144         {
    145             System.out.println("你输入的选项有误,请重新输入:");
    146             main( args);
    147         }*/
    148         System.out.println("你一共答对了"+rshu+"道题");
    149 
    150     }
    151     static String fracAdd(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);  //调用gcd方法约分
    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         
    183         return res2; }      
    184   
    185     }  
    186      static String fracSub(int first_numerator,int first_denominator,int second_numrator,int second_denominator){  
    187               
    188             //需要调用求最大公约数的函数  
    189               
    190             int denominator;  
    191             int numerator;  
    192               
    193             if(first_denominator==second_denominator)  //分母相同时加分子       
    194             {        
    195                  denominator=first_denominator;        
    196                  numerator=first_numerator-second_numrator;        
    197             }        
    198             else  //否则同分比较分子       
    199             {        
    200                 denominator=first_denominator*second_denominator;        
    201                 numerator=first_numerator*second_denominator-first_denominator*second_numrator;        
    202             }      
    203             int gcd = gcd(numerator,denominator);  
    204             denominator = denominator / gcd;  
    205             numerator = numerator / gcd;   
    206             if(0==denominator/numerator)
    207             {
    208                 String res="0";
    209                 return res;
    210             }
    211             else
    212             {
    213             String zi1=String.valueOf(numerator);
    214             String zi2=String.valueOf(denominator);
    215             String zi3="/";
    216             String res2=zi1+zi3+zi2;  
    217             return res2;   }     
    218       
    219         }  
    220         static String fracMul(int first_numerator,int first_denominator,int second_numerator,int second_denominator){  
    221               
    222             //需要调用求最大公约数的函数     
    223             int denominator;  
    224             int numerator;  
    225               
    226              
    227                 denominator=first_denominator*second_denominator;        
    228                 numerator=first_numerator*second_numerator;   
    229                 
    230             int gcd = gcd(numerator,denominator);  
    231             denominator = denominator / gcd;  
    232             numerator = numerator / gcd;  
    233             if(0==denominator/numerator)
    234             {
    235                 String res="0";
    236                 return res;
    237             }
    238             else
    239             {
    240             String zi1=String.valueOf(numerator);
    241             String zi2=String.valueOf(denominator);
    242             String zi3="/";
    243             String res2=zi1+zi3+zi2;   
    244             return res2;      }
    245       
    246         }  
    247         static String fractDiv(int first_numerator,int first_denominator,int second_numerator,int second_denominator){  
    248            
    249             //需要调用求最大公约数的函数  
    250               
    251             int denominator;  
    252             int numerator;  
    253               
    254             numerator = first_numerator*second_denominator;  
    255             denominator = first_denominator*second_numerator;  
    256               
    257                   
    258                 
    259             int gcd = gcd(numerator,denominator);  
    260             denominator = denominator / gcd;  
    261             numerator = numerator / gcd;          
    262             String zi1=String.valueOf(numerator);
    263             String zi2=String.valueOf(denominator);
    264             String zi3="/";
    265             String res2=zi1+zi3+zi2;
    266             return res2;         
    267       
    268         }
    269         static String fractDiv2(int first,int second){  
    270            
    271             //需要调用求最大公约数的函数       
    272             int denominator= first;  
    273             int numerator= second;        
    274             int gcd = gcd(numerator,denominator);  
    275             denominator = denominator / gcd;  
    276             numerator = numerator / gcd;          
    277             String zi1=String.valueOf(numerator);
    278             String zi2=String.valueOf(denominator);
    279             String zi3="/";
    280             String res2=zi1+zi3+zi2;
    281             return res2;           
    282         }
    283     static int gcd(int x,int y){  //利用辗转相除法求最大公约数
    284         int r;        
    285            while( y!= 0)        
    286            {        
    287                r = x%y;        
    288                x = y;        
    289                y = r;        
    290            }        
    291        return x;  
    292          
    293    }  
    294      
    295 
    296 }
  • 相关阅读:
    JavaScript 格式化数字
    浅析C#中单点登录的原理和使用
    从银行转账失败到分布式事务:总结与思考
    计算机网络资料
    阿里巴巴Java开发规约插件p3c详细教程及使用感受
    程序员如何打造属于自己的云笔记服务
    sql server2016里面的json功能
    mac pro 开启三只滑动选中文本
    技术网站
    idea gradle项目导入
  • 原文地址:https://www.cnblogs.com/Lingchao/p/4381608.html
Copyright © 2011-2022 走看看