码迷,mamicode.com
首页 > 其他好文 > 详细

存在不知道是什么问题的程序

时间:2015-03-31 19:29:32      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

  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 }

 

存在不知道是什么问题的程序

标签:

原文地址:http://www.cnblogs.com/Lingchao/p/4381608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!