java-四则运算,自动出题(4)
生活随笔
收集整理的這篇文章主要介紹了
java-四则运算,自动出题(4)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
老師對程序又提出了系統性的要求:
1.定義參數生成的個數(完成)。
2.定義參數控制數值的范圍(完成)。
3.運算結果不能產生負數。
4.e1/e2結果是真分數。
5.運算符不得超過3個。
6.檢驗重復。
7.生成的題目儲存到數據庫中。
8.真分數采用3/8形式,假分數采用2‘3/8形式。
9.生成題目時計算答案。
10.支持一萬到題目的生成。
11.支持判定答案的正誤并統計數量。
?
思路整理:
按著以前的實驗思路來,需要將結果儲存到數據庫中。
代碼如下:
package sum3;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.util.Scanner;//1.除法生成真分數 public class sum3 {static int sum2=10;//算數式的個數static int sum1=4;static int R=100;//定義的參數控制題目中數值范圍static int m;//記錄運算符個數//建立動態數組:操作數static int[][]n1;//設置成運算式:數據源static int[][]n2;//結果設置成int型的static int[]m1;//記錄用算過程的數組static int[]m2;//運算符的選擇static String[]r1={"+","-","*","÷"};//運算符的操作:操作符static String[]s1;//運算符的存儲:數據源static String[]s2;//括號的存儲static char[]r3;//鏈接數據庫:static String driverStr = "com.mysql.jdbc.Driver";static String connStr = "jdbc:mysql://127.0.0.1/number";static String dbusername = "root";static String dbpassword = "baohui";static Connection conn = null;static Statement stmt =null;public static void main(String[] args) throws SQLException {try{Class.forName(driverStr);conn = DriverManager.getConnection(connStr, dbusername, dbpassword);stmt = conn.createStatement();System.out.println("數據連接success!");} catch (Exception ex) {System.out.println("數據連接失敗!");} System.out.println("運算式是否需要括號:0 是 1否");Scanner scan3=new Scanner(System.in);int sum3=scan3.nextInt();//二維儲存操作數n1=new int[sum2][sum1];//操作n2=new int[sum2][sum1];//存儲 m1=new int[sum2];m2=new int[sum1];//儲存運算符s1=new String[sum1];//操作s2=new String[sum1];//存儲//儲存括號r3=new char[sum1*2];//初始化for(int i=0;i<sum1*2;i++){r3[i]=' ';}//生成操作數for(int i=0;i<sum2;i++){for(int j=0;j<sum1;j++){n1[i][j]=(int)(1+Math.random()*100); n2[i][j]=n1[i][j];}}//運算開始for(int i=0;i<sum2;i++){int number=0;//結果運算int num2=0;//初始化左括號位置int num3=0;//初始化右括號位置//設置括號位置if(sum3==0){num2=2 + 2*(int)(Math.random()*(sum1*2-6)/2);//2 4 6num3=num2 +3 + 2*(int)(Math.random()*(sum1*2-2-num2)/2);//5 7 9 r3[num2]='(';r3[num3]=')';}int jishu=0;//設置運算符for(int j1=0;j1<sum1;j1++){int num=(int)(0 + Math.random()*4);//運算符的設置s1[j1]=new String(r1[num]);s2[j1]=new String(r1[num]);}//括號內的算法num2=num2/2;//左括號的數位置num3=num3/2;//右括號的數位置//初始化運算符個數m=sum1-1;//num2=num3時 括號消掉while(num2<num3){//括號的乘除法for(int k=num2;k<num3;k++){if(s1[k].equals("*")){number=n1[i][k]*n1[i][k+1];n1[i][k]=number;//System.out.print(number+" ");for(int j1=k;j1<m-1;j1++){s1[j1]=s1[j1+1];n1[i][j1+1]=n1[i][j1+2];}s1[m-1]="+";m--;k--;num3--;}//乘法截至else if(s1[k].equals("÷")){/*//處理括號內除數為0的情況while(n1[i][k+1]==0){n1[i][k+1]=(int)(1+Math.random()*100);n2[i][k+1]=n1[i][k+1];}//除數 被除數大小(待修改)if(n1[i][k]<n1[i][k+1]){n1[i][k+1]=n1[i][k];n2[i][k+1]=n1[i][k+1];}else{n1[i][k]=n1[i][k+1]*(int)(1+Math.random()*(100/n1[i][k+1]-1));}n2[i][k+1]=n1[i][k+1];n2[i][k]=n1[i][k];*/while(s1[k-1].equals("÷")&&n1[i][k]==n1[i][k+1]){n1[i][k+1]=(int)(0+Math.random()*100);n2[i][k+1]=n1[i][k+1];}number=n1[i][k]/n1[i][k+1];n1[i][k]=number;//System.out.print(number+" ");for(int j1=k;j1<m-1;j1++){s1[j1]=s1[j1+1];n1[i][j1+1]=n1[i][j1+2];}s1[m-1]="+";m--;k--;num3--;}//除法截至}//乘除循環截至//括號的加減法for(int k=num2;k<num3;k++){if(s1[k].equals("+")){number=n1[i][k]+n1[i][k+1];n1[i][k]=number;//System.out.print(number+" ");for(int j1=k;j1<m-1;j1++){s1[j1]=s1[j1+1];n1[i][j1+1]=n1[i][j1+2];}s1[m-1]="+";m--;k--;num3--;}//加法截至else if(s1[k].equals("-")){/*//當括號內算式作為被除數結果為0時while(s1[k-1].equals("÷")&&n1[i][k]==n1[i][k+1]){n1[i][k+1]=(int)(0+Math.random()*100);n2[i][k+1]=n1[i][k+1];}//處理括號內減法為負數的情況if(n1[i][k]<n1[i][k+1]){n1[i][k+1]=n1[i][k]-(int)(0+Math.random()*n1[i][k]);n2[i][k+1]=n1[i][k+1];}*/number=n1[i][k]-n1[i][k+1];n1[i][k]=number;//System.out.print(number+" ");for(int j1=k;j1<m-1;j1++){s1[j1]=s1[j1+1];n1[i][j1+1]=n1[i][j1+2];}s1[m-1]="+";m--;k--;num3--;}//減法截止//System.out.print(number+" "); }//加減循環止 }//括號內算法循環止//乘除法的運算for(int k=0;k<sum1-1;k++){//如果加入乘法//進行插入if(s1[k].equals("*")){number=n1[i][k]*n1[i][k+1];n1[i][k]=number;//System.out.print(number+" ");for(int j1=k;j1<m-1;j1++){s1[j1]=s1[j1+1];n1[i][j1+1]=n1[i][j1+2];}s1[m-1]="+";m--;k--;}else if(s1[k].equals("÷")){number=n1[i][k]/n1[i][k+1];n1[i][k]=number;//System.out.print(number+" ");for(int j1=k;j1<m-1;j1++){s1[j1]=s1[j1+1];n1[i][j1+1]=n1[i][j1+2];}s1[m-1]="+";m--;k--;}}//乘除法運算至//加減法的運算for(int k=0;k<m;k++){if(s1[k].equals("+")){number=n1[i][k]+n1[i][k+1];n1[i][k+1]=number;}else if(s1[k].equals("-")){/*//處理括號內減法為負數的情況if(n1[i][k]<n1[i][k+1]){n1[i][k+1]=n1[i][k]-(int)(0+Math.random()*n1[i][k]);n2[i][k+1]=n1[i][k+1];}*/number=n1[i][k]-n1[i][k+1];n1[i][k+1]=number;}//System.out.print(number+" ");}//加減法運算至//運算式的輸出for(int j=0;j<sum1;j++){System.out.print(r3[jishu]);jishu++;System.out.print(n2[i][j]);System.out.print(r3[jishu]);jishu++;if(j<sum1-1){System.out.print(s2[j]);}elseSystem.out.print("="); }//m2[i]=number;//儲存結果System.out.print(number);//輸出結果 System.out.println();//清空數據庫的前N個元素String sql1="delete from number1 where index1="+(i+1);Statement stmt=conn.createStatement();stmt.execute(sql1);try{String sql = "insert into number1 " +"(operator1,operator2,operator3,operator4,end,number1,number2,number3,number4,index1) " +" values (?,?,?,?,?,?,?,?,?,?)";PreparedStatement psmt=null;psmt=conn.prepareStatement(sql);psmt.setString(1,r3[1]+s2[0]+r3[2]);psmt.setString(2,r3[3]+s2[1]+r3[4]);psmt.setString(3,r3[5]+s2[2]+r3[6]);psmt.setString(4,r3[7]+"=");psmt.setInt(5,number);psmt.setInt(6,n2[i][0]);psmt.setInt(7,n2[i][1]);psmt.setInt(8,n2[i][2]);psmt.setInt(9,n2[i][3]);psmt.setInt(10, i+1);psmt.executeUpdate();System.out.println("插入成功!");}catch (Exception ex) {System.out.println(ex);} //清空括號for(int i1=0;i1<sum1*2;i1++){r3[i1]=' ';}}//all運算 }//class }//main?
?
實驗結果:
實驗總結:學會了數據庫的插入和刪除操作,規范了代碼。
轉載于:https://www.cnblogs.com/suifengye/p/6581674.html
總結
以上是生活随笔為你收集整理的java-四则运算,自动出题(4)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat源码调试环境搭建
- 下一篇: 个人项目的设计与分析——类饿了么、美团式