標籤:
題目
每個同學選一個方向,把程式擴充一下:
1、讓程式能接受使用者輸入答案,並判定對錯。最後給出總共對/錯 的數量。
2、把程式變成一個網頁程式,使用者通過設定參數,就可以得到各種題目。
3、把程式變成一個Windows 圖形介面的程式。
4、把程式變成一個智能手機程式 (你正在用什麼手機, 就寫那個手機的程式)。(可以延期3周后)
5、選一個你從來沒有學過的程式設計語言,試一試實現準系統。
設計思想
本次程式採用數組記錄答案,包含輸入數組和正確結果儲存數組,進行比較
原始碼
package minirisoft;import java.util.Random;import java.util.Scanner;public class SizeYunsuan {public static Random rand=new Random();public static class Qst{static int Operand(int Range)//產生運算元{int Opd=rand.nextInt(Range*2+1)-Range;return Opd;}public static char OperatorKind(char Operator,boolean IfSuppMD)//產生運算子{int OperatorPossible=rand.nextInt(4);if(!IfSuppMD){OperatorPossible/=2;}switch(OperatorPossible) { case 0: Operator=‘+‘; break; case 1: Operator=‘-‘; break; case 2: Operator=‘*‘; break; case 3: Operator=‘/‘; break; default: System.out.print("Error!"); }return Operator;}public static boolean IfRepeated(String str[],int Location)//判斷是否重複{for(int i=0;i<Location;i++){if(str[i].equals(str[Location]))return true;}return false;}public static int Ans(int ans,int Operand1,int Operand2,char Operator)//產生答案{switch(Operator) { case ‘+‘: ans=Operand1+Operand2; break; case ‘-‘: ans=Operand1-Operand2; break; case ‘*‘: ans=Operand1*Operand2; break; case ‘/‘: ans=Operand1/Operand2; break; default: System.out.print("Error!"); }return ans;}//產生一道運算題public static void CreateStr(int Range,char Operator,String str[],int i,int QstNum,int ans[],boolean IfSuppMD){ int answer = 0;Qst.OperatorKind(Operator,IfSuppMD);int Operand1=Qst.Operand(Range);int Operand2=Qst.Operand(Range);str[i]=Integer.toString(Operand1);str[i]+=Operator;str[i]+=Integer.toString(Operand2);str[i]+="=";while(IfRepeated(str,i))//判斷是否重複{Operand1=Qst.Operand(Range);Operand2=Qst.Operand(Range);str[i]=Integer.toString(Operand1);str[i]+=Operator;str[i]+=Integer.toString(Operand2);str[i]+="=";}ans[i]=Qst.Ans(answer,Operand1,Operand2,Operator);}public static void Display(String str[],int Col)//輸出產生的運算題{for(int j=0;j<str.length;j++){System.out.print(str[j]);if(j%Col==Col-1){System.out.println();}else{System.out.print(‘\t‘);}}}public static void Input(int Input[],int QstNum)//輸入問題答案{Scanner sca=new Scanner(System.in);for(int j=0;j<QstNum;j++){Input[j]=sca.nextInt();}}public static void OutAns(int ans[],int QstNum,int Col)//輸出答案{for(int j=0;j<QstNum;j++){System.out.print(ans[j]);if(j%Col==Col-1){System.out.println();}else{System.out.print(‘\t‘);}}}public static void ConfirmAns(int ans[],int Input[],int QstNum,int count){count=0;for(int i=0;i<QstNum;i++){if(ans[i]==Input[i])count++;}System.out.println("答題正確個數:");System.out.print(count);}}public static void main(String args[]){int Range,QstNum=0,Col=0,count=0;boolean IfSuppMD=true;char Operator = ‘+‘;Scanner sca=new Scanner(System.in);System.out.println("請輸入產生題目的數量:");QstNum=sca.nextInt();System.out.println("請輸入算數範圍:");Range=sca.nextInt();System.out.println("請輸入劃分列數:");Col=sca.nextInt();System.out.println("是否支援乘除法:(true/false)");IfSuppMD=sca.nextBoolean();String str[] = new String[QstNum];int ans[]=new int[QstNum];int Input[]=new int[QstNum];for( int i=0;i<QstNum;i++){try{Qst.CreateStr(Range,Qst.OperatorKind(Operator,IfSuppMD),str,i,QstNum,ans,IfSuppMD);}catch(Exception e){i--;};}Qst.Display(str,Col);Qst.Input(Input, QstNum);System.out.println("輸入答案:");System.out.println();Qst.OutAns(Input,QstNum,Col);System.out.println("正確答案:");System.out.println();Qst.OutAns(ans,QstNum,Col);Qst.ConfirmAns(ans,Input,QstNum,count);}}
程式
實驗總結
本次實驗對前面解決該問題的思路進行了梳理,不再意氣用事,採用java語言重新做了一遍,體驗到了java和C++的區別與相似之處,也對模組化演算法的精簡有了一定的提高,程式本身的問題進行了初步的解決,我會再接再厲!
四則運算程式擴充:將程式改為java語言,並允許使用者輸入,對輸入結果進行驗證