这一周,老师有提出了新的要求。
1、生成随机数,整数的和分数的,分数的用字符串表示,单独写一个分数类,分子分母,写出分数加减乘除的方法。
2、生成随机运算符数组,每道题最多有10个运算数,所以最多有9个运算符。
3、生成表达式,用控制语句选择要生成的表达式。
3、结果的处理,是分数的要化简。
package demo;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Random;import java.util.Scanner;import java.util.Stack; public class Main2 { public static void main(String[] args) throws ClassNotFoundException, SQLException{ Scanner sc = new Scanner (System.in); System.out.println("请选择 1.整数运算 2.分数运算"); int t = sc.nextInt(); switch(t) { case 1: { Integer(sc); break; } case 2: { fenshu(sc); } } } public static int simple(int a,int b) //求最大公约数 { while(a%b!=0){ int temp=a%b; a=b; b=temp; } return b; } public static int gongbei(int a,int b) //求最小公倍数 { int t=simple(a,b); return a*b/t; } public static String liangfenshujisuan(String a,String b,char c) //两个真分数的计算 { int t=0; int t1=0,t2=0; int p1=0,p2=0; String s=""; String d[]=a.split("\\/"); String d1[]=b.split("\\/"); int da[]=new int [d.length]; int db[]=new int [d1.length]; for(int i=0;inum=new Stack (); Stack fuhao=new Stack (); a+="#"; fuhao.push("#"); char ch; int i=0; int s=0; int y=0; ch=a.charAt(i); while(!(ch+"").equals("#")||(!(fuhao.peek().equals("#")))) { if(ch==' ') //如果ch=" ",则说明接下来是数字 { String rn=""; while(true) { ch=a.charAt(++i); if(ch==' ') { break; } rn+=ch; } if((i+1) ') //优先级高,弹出两个数和一个运算符,进行运算 { String st1=num.pop(); String st2=num.pop(); String fuh1=fuhao.pop(); char fuh2=fuh1.charAt(0); //将String类型转为char类型 String sz=""; sz=liangfenshujisuan(st2,st1,fuh2); if(sz.equals("error")) //如果运算中有问题,就结束运算 { return "error"; } else { num.push(sz+""); //将两数结果压入栈中 } } else //优先级比较低,把运算符压入栈中 { fuhao.push(ch+""); if((i+1) =b[i+1])||(b[i+1]==0)||(b[i]==0)) //如果分子大于分母或分子、分母为0,重新赋值 { i=i-2; } } for(int j=0;j =b[i+1])||(b[i+1]==0)) //如果分子大于分母或分母为0,重新赋值 { i=i-2; } } for(int j=0;j ','>','<','<','<','>','>'}, { '>','>','<','<','<','>','>'}, { '>','>','>','>','<','>','>'}, { '>','>','>','>','<','>','>'}, { '<','<','<','<','<','=',' '}, { '>','>','>','>',' ','>','>'}, { '<','<','<','<','<',' ','='} }; String a="+-*/()#"; int a11=a.indexOf(f); //找出运算符在表格中的行坐标 int a12=a.indexOf(s); //找出运算符在表格中的行坐标 // System.out.println(f+" "+s); return a1[a11][a12]; } public static int [] chansheng(int num) //随机产生括号 { int []b=new int[num]; for(int i=0;i =0&&b[j+i-1]<=0) { int c=0; for(int k=j;k 0) { t+=a5[i]+" "+a1[i]+" "+a4[a2[i]]; } else { t+=" "+a1[i]+" "+a5[i]+a4[a2[i]]; } } if(a3[num-1]>0) { t+=a5[num-1]+" "+a1[num-1]+" "; } else { t+=" "+a1[num-1]+" "+a5[num-1]; } return t; } public static int[] tys(int a,int b,char c) //两个数的运算 { int []a1=new int [2]; //a1[0]用来记录两数运算结果,a1[1]用来记录两数能否继续算下去 a1[0]=a1[1]=0; int d=0; if(c=='+') { d=a+b; } else if(c=='-') { if(a num=new Stack (); Stack fuhao=new Stack (); a+="#"; fuhao.push("#"); char ch; int i=0; int s=0; int y=0; ch=a.charAt(i); while(!(ch+"").equals("#") || !fuhao.peek().equals("#")) { if(ch==' ') //如果遇到字符为空,说明遇到数字 { String rn=""; //用来记录数据 while(true) { ch=a.charAt(++i); if(ch==' ') { break; } rn+=ch; } if((i+1) ') //优先级高,弹出两个数和一个运算符,进行运算 { String st1=num.pop(); String st2=num.pop(); int ai1 = Integer.parseInt(st1); int ai2 = Integer.parseInt(st2); String fuh1=fuhao.pop(); char fuh2=fuh1.charAt(0); //将String类型转为char类型 int []sz=new int[2]; sz=tys(ai2,ai1,fuh2); if(sz[1]==1) //如果运算中有问题,就结束运算 { return "error"; } else { num.push(sz[0]+""); //将两数结果压入栈中 } } else //优先级比较低,把运算符压入栈中 { fuhao.push(ch+""); if((i+1) =0;j--) { if(str1[i]==str1[j]) //判断是否重复 { flag=false; break; } else if((n1==0)&&((d[0]==0)||(d[0]==2))&& //乘法或加法交换同样重复 ((b[i][0]==b[j][1])&&(b[i][1]==b[j][0]))) { flag = false; break; } } for(int z=0;z =0;j--) { if(str[i].equals(str[j])) { z=0; break; } //else if() } if((z==0)||(s[i].equals("error"))) { i--; } else { String b1[] =new String [2]; //对运算结果进行化简 int b[]=new int [2]; b1=s[i].split("\\/"); b[0]=Integer.parseInt(b1[0]); b[1]=Integer.parseInt(b1[1]); int t=simple(b[0],b[1]); b[0] /=t; b[1] /=t; int a=(int)(b[0]/b[1]); int c=b[0]%b[1]; if(b[0]>b[1]) //判断结果格式 { if(b[0]%b[1]==0) { s1[i]+=a; System.out.println("第"+(i+1)+"道题目:"+str[i]+" ="+a); } else { s1[i]+=a+"'"+c+"/"+b[1]; System.out.println("第"+(i+1)+"道题目:"+str[i]+" ="+s1[i]); } } if(b[1]>b[0]) { s1[i]+=b[0]+"/"+b[1]; System.out.println("第"+(i+1)+"道题目:"+str[i]+" ="+s1[i]); } else if(b[0]==b[1]) { s1[i]+="1"; System.out.println("第"+(i+1)+"道题目:"+str[i]+" ="+s1[i]); } } } lianjiefenshu(str1,s1); //连接数据库,将表达式和结果导入数据库 System.out.println("导入成功!"); } //分数连接数据库 public static void lianjiefenshu(String a[],String b[]) throws ClassNotFoundException, SQLException { Connection conn = null; PreparedStatement pstmt = null; String driverName = "com.mysql.jdbc.Driver"; String userName = "root"; String userPwd = "123456789"; String ur11 = "jdbc:mysql://localhost:3306/size03"; String ur12 = "?user=" + userName + "&password=" + userPwd; String ur13 = "&useUnicode=true&characterEncoding=UTF-8"; String ur1 = ur11 + ur12 + ur13; Class.forName(driverName); conn = DriverManager.getConnection(ur1); String sql = "insert into text03fenshu(表达式,结果) values(?,?)"; pstmt = conn.prepareStatement(sql); for(int i=0;i
但是数据库的问题没有解决,还没查出自己的问题,总是连接失败。