import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Calendar; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPasswordField; import javax.swing.JTextField; import java.io.IOException; import java.util.Timer; public class ss { static int time1; static Timer timer = new Timer(); public static void main(String[] args) { JFrame jFrame = new JFrame("四则运算"); jFrame.setSize (500, 230); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Label l1=new Label("生成数量:"); final Label l3=new Label(""); final Label l4=new Label(""); final Label l5=new Label("答题时间:"); final Label l2=new Label("请输入答案:"); final TextField t1= new TextField(""); final TextField t2= new TextField(""); final TextField t3= new TextField(""); JButton b1 = new JButton("开始生成"); JButton b2 = new JButton("确认"); l1.setBounds(20, 20, 50, 20); l2.setBounds(10,120, 60, 20); l3.setBounds(40,40, 400, 60); l4.setBounds(40,140, 200, 60); l5.setBounds(150,20, 60, 20); l3.setFont(new Font("宋体",Font.PLAIN,20)); l4.setFont(new Font("宋体",Font.PLAIN,20)); //l5.setFont(new Font("宋体",Font.PLAIN,20)); t1.setBounds(80, 20, 50, 20); t2.setBounds(80, 120, 50, 20); t3.setBounds(220, 20, 50, 20); b1.setBounds(300, 20, 90, 20); b2.setBounds(140, 120, 90, 20); jFrame.setLayout(null); jFrame.add(l1); jFrame.add(t1); jFrame.add(l2); jFrame.add(b1); jFrame.add(b2); jFrame.add(l3); jFrame.add(t2); jFrame.add(l4); jFrame.add(l5); jFrame.add(t3); jFrame.setVisible(true); final C c=new C(); b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Calendar Cld = Calendar.getInstance(); //C c=new C(Integer.valueOf(t1.getText())); if(Integer.valueOf(t1.getText())>5) { JOptionPane.showMessageDialog(null, "题目数大于5"); } else { // time1=Cld.get(Calendar.HOUR)*3600+Cld.get(Calendar.MINUTE)*60+Cld.get(Calendar.SECOND); System.out.print(t3.getText()); if(!t3.getText().equals("")) { timer.schedule( new java.util.TimerTask() { public void run() { JOptionPane.showMessageDialog(null, "时间已经过"); t1.setText(null); t2.setText(null); l3.setText(null); l4.setText(null); t3.setText(null); timer.cancel(); } },Integer.valueOf(t3.getText())*1000 ); } l4.setText(null); c.initialize(Integer.valueOf(t1.getText())); l3.setText(c.next()); } } }); b2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int cuo; int dui; System.out.print(c.i); System.out.print(Integer.valueOf(t1.getText())); if(c.i<=Integer.valueOf(t1.getText())&&c.j==0) { if(c.check(Integer.valueOf(t2.getText()))==true) l4.setText("答对了"); else l4.setText("答错了"+" 结果为"+(int)c.d); l3.setText(c.next()); } } }); } public static void stopTime(Timer timer) { timer.cancel(); } } class C{ static int max; static int i=0; static int j=0; int a[]=new int [6]; int g; int c[]=new int [4]; String res=new String(""); static double d=0; static int cuo=0; static int dui=0; static int time2; String str=new String("+-*/"); public C(){ } public void initialize(int max){ i=0; this.max=max; } public String next(){ if(i<max) { res=""; for(int k=0;k<5;k++) a[k]=(int)(Math.random()*100); for(int k=0;k<4;k++) c[k]=(int)(Math.random()*4); g=(int) (2+Math.random()*4); i++; for(int k=0;k<g;k++) System.out.print(a[k]); boolean fu=false; int x; x=(int) (Math.random()*3); for(int k=0;k<g;k++) if(k!=g-1) { if(x>=2) { a[k]=-a[k]; res=res+"("+a[k]+")"+" "+str.charAt(c[k]); } else res=res+a[k]+" "+str.charAt(c[k]); } else res=res+a[k]+" "; res=res+" ="; return res; } Calendar Cld1 = Calendar.getInstance(); time2=Cld1.get(Calendar.HOUR)*3600+Cld1.get(Calendar.MINUTE)*60+Cld1.get(Calendar.SECOND)-ss.time1; //System.out.print(time2); JOptionPane.showMessageDialog(null, "使用时间"+time2); time2=0; ss.stopTime(ss.timer); return "答对了"+dui+"题"+" "+"答错了"+cuo+"题"; //System.out.print(a+" "+str.charAt(c)+" "+b+"="); } public boolean check(double result) { double t1[]=new double[6]; int y1[]=new int[5]; int k=g,k2; int m; d=0; k2=g; int flag=0; for(int i=0;i<k;i++) t1[i]=a[i]; for(int i=0;i<k-1;i++) y1[i]=c[i]; while(flag==0){ flag=1; for(int i=0;i<k;i++) { if(y1[i]==2 || y1[i]==3) { t1[i]=jisuan(t1[i],t1[i+1],y1[i]); for(m=(i+1);m<k-1;m++) { t1[m]=t1[m+1]; } for(int n=i;n<k-1;n++) y1[n]=y1[n+1]; k2--; flag=0; } } } System.out.print("公式:"+t1[0]+y1[0]+" "+t1[1]+y1[1]+" "+t1[2]+y1[2]+" "+t1[3]+y1[3]+" "+t1[4]+y1[4]); for(int i=0;i<k2;i++) if(y1[i]==1) t1[i+1]=0-t1[i+1]; for(int i=0;i<k2;i++) d=d+t1[i]; System.out.println("答案"+d+"k="+k+" k2="+k2); if(result==(int)(d)) { dui++; return true; } else { cuo++; return false; } } public double jisuan(double a,double b,int ysf) //ysf运算符 { if(ysf==2) return a*b; else if(ysf==3) return (int)a/b; else if(ysf==0) return a+b; else return a-b; } }
开发环境:eclipse
结对同伴 :25 廖焯燊
同伴博客:http://home.cnblogs.com/u/liaozhuoshen/
实现的时间:10个小时左右
程序介绍:
生成单机带用户界面(不是控制台)的程序,单个题目最多不能超过4个运算符,操作数-100--100。
若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。
分工详细:一共做了4个方向,廖焯燊做3个方向,分别是3,4,7.本人做了1个方向,2,还有界面和四则混合运算的计算
扩展的方向:
1.用户答题结束以后,程序可以显示用户答题所用的时间
2.用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
3.程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
4.可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。
运行结果:
总结:我本来以为四则混合运算是比较容易完成的,但是当我做的时候就发现原来这并我没我之前以为的那么容易实现,在实现这个功能的时候遇到过很多麻烦,比如遇到乘数法的时候还要考虑到它们的优先级比加减法高,所以对于这个问题,我绞尽脑汁,想了很多方法,但是最后都以失败告终,后来我跟队友廖焯燊的配合下,想出了一种方法 利用循环跟数组先将乘除法的先运算,然后再到减法 最后把剩下的结果相加起来就是最后的答案。还有界面的基本知识,有很多已经忘了,在这个时候只能去翻书和百度解决了。通过这次实验,我学会了如何跟队友合作解决问题还有学会了很多知识