结对 四则运算
编译环境:eclipse
开发人员:de
开发时间:2015-04-07
实现功能:
1.基本的加减乘除
2.每次出1道题目,提交后会显示是否答对,如果错了,还会出现正确答案
3.题目是随机的
4.能出于分数相关的运算以及可以输入真分数
5.可以控制题目的数量
缺点:
1.分数计算的答案输入分数格式才显示正确
2.不能用户选择做什么运算
3.还不能统计答题的时间
4.不能统计答题正确的数目
......
个人体会:
1.能力还是不足,一些东西想到了却不能实现
2.要多点和伙伴讨论
3.对于Java的基础不够熟
伙伴的博客链接:http://www.cnblogs.com/zsb1/
界面:
测试结果:
源代码:
package rjgc; import java.io.*; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.*; import java.util.regex.Pattern; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.math.*; public class Rj11 { public static void main(String[] args) { MyFrame frame=new MyFrame(); } } class MyFrame extends JFrame{ private JLabel L1=new JLabel("题目数"); private JLabel L2=new JLabel("题目是"); private JLabel L3=new JLabel("答案是"); JTextField T1 = new JTextField(15); JTextField T2 = new JTextField(15); JTextField T3 = new JTextField(5); JTextField T4 = new JTextField(20); JButton B4=new JButton("确定"); JButton B1=new JButton("开始"); JButton B2=new JButton("提交"); JButton B3=new JButton("下一题"); MyFrame(){ this.setTitle("求平方"); this.setSize(400, 250); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.getContentPane().setBackground(Color.white); FlowLayout flow=new FlowLayout(FlowLayout.LEFT,10,15); this.setLayout(flow); B4.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ Pattern pa = Pattern.compile("[0-9]*"); String s1=T1.getText(); if(pa.matcher(s1).matches())//检测用户输入是否正确 { try { int number=Integer.parseInt(s1); File dir=new File("d:number"); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(String.valueOf(s1)); bw.close(); } catch(IOException t) { T4.setText("IO exception thrown:"+t); } } else { T1.setText("输入的格式错误请重新输入!"); } } }); B1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent y){ DecimalFormat df=new DecimalFormat("#.00"); df.setRoundingMode(RoundingMode.HALF_UP); char[]ch={‘+‘,‘-‘,‘*‘,‘/‘}; int c = 0; int d=0; int h=0; int f=0; int e=0; double answer; double ans; int right=0; int number; try { File dir1=new File("d:number"); File afile1=new File(dir1,"data.txt"); BufferedReader br1=new BufferedReader(new InputStreamReader(new FileInputStream(afile1))); String strRead1=br1.readLine(); number=Integer.parseInt(strRead1); if(number>=1) { int n = new Random().nextInt(5);//获取运算的方式0—— + 1—— - 2—— * 3—— / if(n==0 || n==2 || n==3 || n==1)//int型的运算 { double a1 = new Random().nextDouble()*100;//获取式子的运算随机数 double a=Double.parseDouble(df.format(a1)); double b1 =new Random().nextDouble()*100+1;//除数不能为0 double b=Double.parseDouble(df.format(b1)); T2.setText(a+""+ch[n]+""+b+"=");//输出式子 if(n==0)//加法 { answer=a+b; answer=Double.parseDouble(df.format(answer));//保留两位小数 String dirName1="d:MyData"; try { File dir=new File(dirName1); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(String.valueOf(answer)); bw.close(); } catch(IOException t) { T4.setText("IO exception thrown:"+t); } } else if(n==1)//减法 { answer=a-b; answer=Double.parseDouble(df.format(answer));//保留两位小数 String dirName1="d:MyData"; try { File dir=new File(dirName1); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(String.valueOf(answer)); bw.close(); } catch(IOException t) { T4.setText("IO exception thrown:"+t); } } else if(n==2) //乘法 { answer=a*b; answer=Double.parseDouble(df.format(answer));//保留两位小数 String dirName1="d:MyData"; try { File dir=new File(dirName1); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(String.valueOf(answer)); bw.close(); } catch(IOException t) { T4.setText("IO exception thrown:"+t); } } else if(n==3) //除法 { ans=Double.parseDouble(df.format(a/b));//保留两位小数 String dirName1="d:MyData"; try { File dir=new File(dirName1); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(String.valueOf(ans)); bw.close(); } catch(IOException t) { T4.setText("IO exception thrown:"+t); } } } else if(n==4)//含有真分数的运算 { double fm=0; double fz=0; double MaxD; String str1;//最简分式 boolean t = true; while(t==true)//判断并输出真分数 { c = new Random().nextInt(10); d =new Random().nextInt(10);//获取式子的运算随机数 if(c<d) t=false; } t=true; while(t==true)//判断并输出真分数 { e =new Random().nextInt(10)+1; f =new Random().nextInt(10);//获取式子的运算随机数 if(e<f) t=false; } n=new Random().nextInt(4); T2.setText("("+c+"/"+d+")"+ch[n]+"("+e+"/"+f+")"+"="); if(n==0)//加法 { fm=d*f; fz=(c*f)+(e*d); //简化约分 MaxD=getMaxDivi(fz,fm);//最大公约数 fz=fz/MaxD; fm=fm/MaxD; //double不保留小数 //简化完毕 //标准答案 str1=(int)fz+"/"+(int)fm;//得出最简答案 ans=Double.parseDouble(df.format(fz/fm)); String dirName1="d:MyData"; try { File dir=new File(dirName1); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(str1); bw.close(); } catch(IOException t1) { T4.setText("IO exception thrown:"+t); } } else if(n==1)//减法 { fm=d*f; fz=(c*f)-(e*d); MaxD=getMaxDivi(fz,fm); fz=fz/MaxD; fm=fm/MaxD; if(fz<0||fm<0) { fz=-(Math.abs(fz)); fm=Math.abs(fm); } str1=(int)fz+"/"+(int)fm;//正确答案的String String dirName1="d:MyData"; try { File dir=new File(dirName1); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(str1); bw.close(); } catch(IOException t1) { T4.setText("IO exception thrown:"+t); } } else if(n==2)//乘法 { fz=c*e; fm=d*f; MaxD=getMaxDivi(fz,fm); fz=fz/MaxD; fm=fm/MaxD; str1=(int)fz+"/"+(int)fm;//正确答案的String String dirName1="d:MyData"; try { File dir=new File(dirName1); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(str1); bw.close(); } catch(IOException t1) { T4.setText("IO exception thrown:"+t); } } else if(n==3)//除法 { fz=c*f; fm=d*e; MaxD=getMaxDivi(fz,fm); fz=fz/MaxD; fm=fm/MaxD; str1=(int)fz+"/"+(int)fm;//正确答案的String String dirName1="d:MyData"; try { File dir=new File(dirName1); if(!dir.exists()) { dir.mkdir(); } File afile=new File(dir,"data.txt"); afile.createNewFile(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(str1); bw.close(); } catch(IOException t1) { T4.setText("IO exception thrown:"+t); } } } number--; String ss=String.valueOf(number); File dir=new File("d:number"); File afile=new File(dir,"data.txt"); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); bw.write(String.valueOf(ss)); bw.close(); } else { T4.setText(""); } } catch(IOException t) { T4.setText("IO exception thrown:"+t); } } }); B2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int n; int n1; String dirName="d:MyData"; String filename="data.txt"; String filename1="data1.txt"; try{ File dir=new File(dirName); File afile=new File(dir,filename); BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(afile))); String strRead=br.readLine(); if(strRead.equals(T3.getText())) { T4.setText("恭喜,你答对了!"); } else { T4.setText("对不起,你答错了!正确答案为:"+strRead); } } catch(IOException t) { T4.setText("IO exception thrown:"+t); } } }); add(L1);add(T1);add(B4);add(B1);add(L2);add(T2);add(T3);add(B2);add(L3);add(T4); this.setResizable(false); this.setVisible(true); } static double getMaxDivi(double a,double b)//求最大公约数,运用辗转相除法 { double maxdivd=0; if(a==0||b==0) { maxdivd=1; return maxdivd; } else { if(a<b) getMaxDivi(b,a); boolean value=false; if(a==0) { maxdivd=1; value=true; } while(value==false) { int n=(int) (a/b); int m=(int) (a%b); if(m==0) { maxdivd=b; value=true; } else { a=b; b=m; } } } return maxdivd; } }
时间: 2024-11-06 21:58:45