需求功能裡是能夠出任意個題目,我選擇根據使用者輸入的數目進行while迴圈實現這個功能。為此我將原來主類的六種題型隨意swich()一種遷移到了computer類中,建立了anwser()方法。這個方法就是前面部落格所提到了出六種題目中的一種。
在解決除數為零這個問題上,我在 int count(String a, String b, String e)中設定了一個標誌位int chushu。count這個方法是用來計算字尾表示式的,並把結果返回到棧頂。這裡的引數e就是操作符。如果e是除號的時候,進行接下來的判斷,如果除數b是零,就直接返回chushu=0;如果b不是零就返回a/b。而我接受這個標誌的時候,是在我要出題的時候:題目已經出了,但是有的除數是零,這個時候在主類中就要重新出題,直到把要求的數量出滿為止。
隨機出題:
1 public String anwser(){ 2 computer yl = new computer(); 3 int y1=yl.randomnum(); 4 int y2=yl.randomnum(); 5 int y3=yl.randomnum(); 6 int y4=yl.randomnum(); 7 String sym1=yl.symbol(); 8 String sym2=yl.symbol(); 9 String sym3=yl.symbol(); 10 String zhongshi = ""; 11 int i = 0; 12 i = (int)(Math.random()*6)+1; 13 switch(i) 14 { 15 16 case 1: 17 zhongshi = "("+String.valueOf(y1)+sym1+String.valueOf(y2)+")"+sym2+String.valueOf(y3)+sym3+String.valueOf(y4); 18 break; 19 case 2: 20 zhongshi = "("+String.valueOf(y1)+sym1+String.valueOf(y2)+sym2+String.valueOf(y3)+")"+sym3+String.valueOf(y4); 21 break; 22 case 3: 23 zhongshi = String.valueOf(y1)+sym1+"("+String.valueOf(y2)+sym2+String.valueOf(y3)+")"+sym3+String.valueOf(y4); 24 break; 25 case 4: 26 zhongshi = String.valueOf(y1)+sym1+"("+String.valueOf(y2)+sym2+String.valueOf(y3)+sym3+String.valueOf(y4)+")"; 27 break; 28 case 5: 29 zhongshi = String.valueOf(y1)+sym1+String.valueOf(y2)+sym2+"("+String.valueOf(y3)+sym3+String.valueOf(y4)+")"; 30 break; 31 case 6: 32 zhongshi = String.valueOf(y1)+sym1+String.valueOf(y2)+sym2+String.valueOf(y3)+sym3+String.valueOf(y4); 33 34 }
count方法:
1 public int count(String a, String b, String e) { 2 int temp1 = Integer.parseInt(a); 3 int temp2 = Integer.parseInt(b); 4 if ("+".equals(e)) { 5 return temp1 + temp2; 6 } else if ("-".equals(e)) { 7 return temp1 - temp2; 8 } else if ("*".equals(e)) { 9 return temp1 * temp2; 10 } else { 11 if(temp2==0){ 12 return chushu = 0;//除數為零的標誌 13 } 14 else 15 return temp1 / temp2; 16 } 17 }
主類實現:
1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 computer yl = new computer(); 4 Scanner sc = new Scanner(System.in); 5 int total = sc.nextInt(); 6 int i = 1;//序號為1 7 while(total!=0){ 8 String zhongshi = yl.anwser(); 9 yl.chushu=1; //重置標誌 10 String back = yl.toback(zhongshi); 11 int result = yl.countback(back); //計算字尾表示式結果 12 if(yl.chushu!=0){//接收標誌位 13 14 System.out.print("("+i+")"+zhongshi); 15 i++; 16 System.out.print("\t\t"); 17 System.out.println(result); 18 total--; 19 20 }else{ 21 continue; 22 } 23 24 } 25 }
執行結果: