一個簡單的加減乘除自動生成小程序升級版(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM