level3
伸冤下:老师的评论是有看到!看完我就去修改程序了,忘记回复请原谅!= =
前阵子都在修改功能和思路,但是由于一个细节的错误找不到,导致没有成品可以上传...求谅解。
细心真的很重要 = =!!!
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner (System.in); int number=5; int number2; System.out.println("题目的数量"); number=in.nextInt(); number2=number; System.out.println("数值范围 10 空格 200 ");//先考虑整数的 int up=10,down=1; down=in.nextInt(); up=in.nextInt(); System.out.println("打印时每行的间隔"); int between=2; between=in.nextInt(); String jud1,jud2,jud3; System.out.println("是否有乘除法Y/N"); jud1=in.next(); in.nextLine(); System.out.println("是否支持小数Y/N"); jud2=in.next(); in.nextLine(); System.out.println("加减有无负数Y/N"); jud3=in.next(); in.nextLine(); //上面为基本要求,的录入 //下面的是为运算答案的一系列变量。 String qustion; //用字符串存放整个算式。定义一个class 来计算答案。 float answer;//答案 int score=0;//分数。 int count=0;//题数。 do{ int XB2=0;//下标 int XB=0; float num[]=new float[20];//存放数字,从0 开始; String sign[]=new String[6];//存放符号下标的从0开始; int flag=2; //算式长度 int shuzi; float shuzi2;//数字 int signal=0;//数字正负 int b; //运算符号 String Temp=new String("Y"); flag =(int)(Math.random()*4)+1;//算式长度 if(jud2.equalsIgnoreCase(Temp))//是否有小数点 { if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi2=(float)(Math.random()*(up-down))+down; shuzi2=(int)(shuzi2*100); shuzi2=shuzi2/100;//小数点的位数。 if(signal<3) { num[XB]=shuzi2; XB++; qustion=shuzi2+"";//没有负数的有小数点的。 } else { num[XB]=-shuzi2; XB++; qustion="(-"+shuzi2+")"; } } else{ if(jud3.equalsIgnoreCase(Temp)) signal=(int) (Math.random()*5); shuzi=(int)(Math.random()*(up-down)+down); if(signal<3) { num[XB]=shuzi; XB++; qustion=shuzi+""; } else { num[XB]=-shuzi; XB++; qustion="(-"+shuzi+")"; } } //以上是第一个数 do{ if(jud1.equalsIgnoreCase(Temp))//是否有乘除 b=(int)(Math.random()*4+1); else b=(int)(Math.random()*2+1); switch(b){ case 1://加 if(jud2.equalsIgnoreCase(Temp))//是否小数点 { if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi2=(float)(Math.random()*(up-down))+down; shuzi2=(int)(shuzi2*100); shuzi2=shuzi2/100; if(signal<3) { num[XB]=shuzi2; XB++; sign[XB2]="+"; XB2++; qustion=qustion+"+"+shuzi2; } else { num[XB]=-shuzi2; XB++; sign[XB2]="+"; XB2++; qustion=qustion+"+"+"(-"+shuzi2+")"; } } else{ if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi=(int)(Math.random()*(up-down)+down); if(signal<3) { num[XB]=shuzi; XB++; sign[XB2]="+"; XB2++; qustion=qustion+"+"+shuzi; } else { num[XB]=-shuzi; XB++; sign[XB2]="+"; XB2++; qustion=qustion+"+"+"(-"+shuzi+")"; } } break; case 2://减 if(jud2.equalsIgnoreCase(Temp)) { if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi2=(float)(Math.random()*(up-down))+down; shuzi2=(int)(shuzi2*100); shuzi2=shuzi2/100; if(signal<3){ num[XB]=shuzi2; XB++; sign[XB2]="-"; XB2++; qustion=qustion+"-"+shuzi2; } else { num[XB]=-shuzi2; XB++; sign[XB2]="-"; XB2++; qustion=qustion+"-"+"(-"+shuzi2+")"; } } else{ if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi=(int)(Math.random()*(up-down)+down); if(signal<3) { num[XB]=shuzi; XB++; sign[XB2]="-"; XB2++; qustion=qustion+"-"+shuzi; } else { num[XB]=-shuzi; XB++; sign[XB2]="-"; XB2++; qustion=qustion+"-"+"(-"+shuzi+")"; } } break; case 3://乘 if(jud2.equalsIgnoreCase(Temp)) { if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi2=(float)(Math.random()*(up-down))+down; shuzi2=(int)(shuzi2*100); shuzi2=shuzi2/100; if(signal<3) { num[XB-1]=shuzi2*num[XB-1]; qustion=qustion+"*"+shuzi2; } else { num[XB-1]=-shuzi2*num[XB-1]; qustion=qustion+"*"+shuzi2; } } else{ if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi=(int)(Math.random()*(up-down)+down); if(signal<3) { num[XB-1]=shuzi*num[XB-1]; qustion=qustion+"*"+shuzi; } else { num[XB-1]=-shuzi*num[XB-1]; qustion=qustion+"*"+"(-"+shuzi+")"; } } break; case 4://除 if(jud2.equalsIgnoreCase(Temp)) { if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi2=(float)(Math.random()*(up-down))+down; shuzi2=(int)(shuzi2*100); shuzi2=shuzi2/100; if(signal<3) { num[XB-1]=num[XB-1]/shuzi2; qustion=qustion+"÷"+shuzi2; } else { num[XB-1]=-num[XB-1]/shuzi2; qustion=qustion+"÷"+"(-"+shuzi2+")"; } } else{ if(jud3.equalsIgnoreCase(Temp))//是否有负数 signal=(int) (Math.random()*5); shuzi=(int)(Math.random()*(up-down)+down); if(signal<3) { num[XB-1]=num[XB-1]/shuzi; qustion=qustion+"÷"+shuzi; } else { num[XB-1]=-num[XB-1]/shuzi; qustion=qustion+"÷"+"(-"+shuzi+")"; } } break; } flag--; }while(flag>0); qustion=qustion+"= ? ";//最终等式//此处最好输出num数组还有sign数组的内容找出错误的地方。 System.out.print(qustion+"保留两尾小数点/分数也可以"); String user=null; user=in.nextLine();//录入正确 answer=changeanswer(user); float answer2=calculation(sign,num); // for(int jij=0;jij<sign.length;jij++) // System.out.print(sign[jij]+"*"); // for(int jia=0;jia<num.length;jia++) // System.out.print("-"+num[jia]+"*"); if(answer==answer2) { System.out.println("Right !"); score=score+10; count++; } else System.out.println("The Answer is:"+answer2); number--;//题目数量 for(int k=1;k<=between;k++)//换行 System.out.println(); }while(number>0); System.out.println("You Scores is:"+score); System.out.println( number2+"---"+"Qustions"+"---"+count +"---"+"You are correct !"); } static //计算等式 float calculation(String a[]/*运算符数组*/,float b[]/*数字存放的数组*/){ float answer=0; for(int i=0;i<a.length;i++)//读取传进来的字符串算式a的长度以此来转换计算。 if(a[i]!=null) switch((isoperator(a[i].charAt(0)))){ case 1: b[0]=b[0]+b[1]; for(int j=1;j<b.length-1;j++) if(b[j+1]!=0) b[j]=b[j+1]; else break; break; case 2: b[0]=b[0]-b[1]; for(int j=1;j<b.length-1;j++) if(b[j+1]!=0) b[j]=b[j+1]; else break; break; default : break; } else break; answer=b[0]; answer=Math.round(answer*100); answer=answer/100; return answer;//计算机算出的答案。 } //是否是符号 static int isoperator(char c){ if( c=='+') return 1; else if(c=='-') return 2; else if (c=='/')//为了分数的答案做准备。 return 3; return 0; } static float changeanswer(String a){//用户输入的答案 float Ranswer=0; int i; float temp[]=new float[2]; String abc[]=new String[2]; for(i=0;i<a.length();i++) if(isoperator(a.charAt(i))==3) break; if(i==a.length()) Ranswer=Float.parseFloat(a); else { abc=a.split("\\/"); temp[0]=Float.parseFloat(abc[0].toString()); temp[1]=Float.parseFloat(abc[1].toString()); Ranswer=temp[0]/temp[1]; Ranswer=Math.round(Ranswer*100); Ranswer=Ranswer/100; } return Ranswer; } }
最基本的功能还是可以有的,答案支持分数,小数等多种形态。答案可以出来,希望老师帮忙看看 思路 有没有漏洞.
做真正的自己,活出别人没有的快乐。