import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.math.*; import java.text.DecimalFormat; import java.util.Scanner; import java.math.*; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JRadioButtonMenuItem; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.swing.JOptionPane;//消息提示框 import javax.swing.UIManager; class MyWindow extends JFrame implements ActionListener{ JTextField text;//提示输入的个数 JTextField t;//随机题目 JTextField at;//用于输入答案 JTextField st;//判断对错 JTextField tt;//显示时间 JTextField lt;//设置时间 private Timer tmr; JLabel L1; JLabel L2; JLabel L3; JLabel L4; JLabel L5; JLabel L6; JButton B1,B2; JPanel p1,p2,p3; String parten="0.00";//设置格式为“0.00” DecimalFormat decimal=new DecimalFormat(parten); String str; double seconds;//时间“秒” long startTime,endTime; char[]ch={'+','-','*','÷'};//存放加减乘除的符号数组 float sum=0;//程序判断的答案 int timushu;//用户输入的题目 int count=0;//已经 出的题目 int right=0;//计算答对的题目数 int wrong=0;//计算答错的题目数 MyWindow() { super("四则运算"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(400,230); L1=new JLabel("选择题数(不能超过5个)"); L2=new JLabel("时间:"); L3=new JLabel("设置时间(时间不超过120秒):"); L4=new JLabel("随机题目:"); L5=new JLabel("输入答案:"); L6=new JLabel("判断对错:"); text=new JTextField(15); B1=new JButton("开始"); t=new JTextField(23); at=new JTextField(23); at.addActionListener(this); st=new JTextField(23); tt=new JTextField(15); tt.addActionListener(this); lt=new JTextField(5); lt.addActionListener(this); Timer tmr = new Timer(1000, this);//间隔1秒 this.tmr = tmr;//添加时间 B2=new JButton("下一题");B2.addActionListener(this); text.addActionListener(this);B1.addActionListener(this); p1=new JPanel();p2=new JPanel();p3=new JPanel(); getContentPane().add(p1,"North");getContentPane().add(p2,"Center");getContentPane().add(p3,"South"); p1.add(L3);p1.add(lt);p2.add(L1);p2.add(text);p2.add(B1); p2.add(L4);p2.add(t);p2.add(L5);p2.add(at);p2.add(L6);p2.add(st); p3.add(L2);p3.add(tt);p3.add(B2); this.setResizable(false);//设置不可以改变大小 this.setVisible(true);//设置窗口可见 } public void actionPerformed(ActionEvent e) { if(e.getSource()==B1)//当获取的资源是按钮1时 { try { tt.setText(String.valueOf(lt.getText()));//在显示时间框里显示以获取的时间 int n1=120,n2=5; if(n1<(Integer.parseInt(tt.getText()))) {//当设置时间超过120秒,弹出对话框 JOptionPane.showMessageDialog(null, "时间不能超过120秒!"); this.setVisible(false); } if(n2<(Integer.parseInt(text.getText()))) {//当选择题目个数超过5个,弹出对话框 JOptionPane.showMessageDialog(null, "选择题数不能超过五个!"); this.setVisible(false); } tmr.start();//开始计时 } catch(NullPointerException o) { } suijishu();//调用产生随机数题目 // startTime= System.currentTimeMillis(); //获取开始时间 tt.setText(String.valueOf(lt.getText())); } else{ int m = Integer.parseInt(tt.getText()); m--; tt.setText("" + m); if (m <= 0) { tmr.stop(); JOptionPane.showMessageDialog(null, "超出答题时间!"); this.setVisible(false); } if(e.getSource()==at)//当获取的资源是输入答案时 { str=decimal.format(sum); if(Float.parseFloat(str)==Float.parseFloat(at.getText()))//判断输入的答案对错 { right++; st.setText("输入的答案正确!"); st.setForeground(Color.red); } else { wrong++; st.setText("输入的答案不正确!正确答案为"+Float.parseFloat(str)); st.setForeground(Color.red);//当判断答案对错时,字体显示红色 } } else if(e.getSource()==B2)//当获取的资源是按钮2 { count++;//当未超过题目数时,继续出随机题 if(count!=Integer.parseInt(text.getText())) { t.setText(null); at.setText(null); st.setText(null); suijishu(); } else {//当超过输入的题目数时,弹出结束的消息框 tmr.stop(); //double endTime= System.currentTimeMillis() ;//获取结束时间 seconds=Double.parseDouble(lt.getText())-Double.parseDouble(tt.getText());//计算时间 //tt.setText(String.valueOf(seconds)+"s");//输出时间 JOptionPane.showMessageDialog(null, "答题结束!一共答对"+right+"道题目,答错"+wrong+"道题目!"+"答题时间为:"+seconds+"秒"); this.setVisible(false); } } } } private void suijishu() { int x=(int)(Math.random()*4); switch(x) { case 0: fun0();//一个运算符,整数,整数 break; case 1: fun1();//一个运算符,整数,分数 break; case 2: fun2();//一个运算符,分数,分数 break; case 3: fun3();//两个运算符 break; case 4: fun4();//求阶乘 break; case 5: fun5();//题目出现负数 break; //case 4: //、 fun1(); //、case 5: //、 fun1(); //、case 6: // fun1(); } } private void fun0() { int a=(int)(Math.random()*10+1); int b=(int)(Math.random()*10+1); int x1=(int)(Math.random()*4);//表示加减乘除 switch(x1) { case 0: { t.setText(a+" "+String.valueOf(ch[0])+" "+b); sum=a+b; } break; case 1: { t.setText(a+" "+String.valueOf(ch[1])+" "+b); sum=a-b; } break; case 2: { t.setText(a+" "+String.valueOf(ch[2])+" "+b); sum=a*b; } break; case 3: { t.setText(a+" "+String.valueOf(ch[3])+" "+b); sum=(float)a/(float)b; } break; } } private void fun1() { int a=(int)(Math.random()*10+1); int b=(int)(Math.random()*10+1); int c=(int)(Math.random()*10+1); int x1=(int)(Math.random()*4);//表示加减乘除 switch(x1) { case 0: { t.setText(a+" "+String.valueOf(ch[0])+" "+b+"/"+c); sum=a+((float)b/(float)c); }break; case 1: { t.setText(a+" "+String.valueOf(ch[1])+" "+b+"/"+c); sum=a-((float)b/(float)c); }break; case 2: { t.setText(a+" "+String.valueOf(ch[2])+" "+b+"/"+c); sum=a*((float)b/(float)c); }break; case 3: { t.setText(a+" "+String.valueOf(ch[3])+" "+b+"/"+c); sum=(float)a/(float)b/(float)c; }break; } } private void fun2() { int a=(int)(Math.random()*10+1); int b=(int)(Math.random()*10+1); int c=(int)(Math.random()*10+1); int d=(int)(Math.random()*10+1); int x1=(int)(Math.random()*4);//表示加减乘除 switch(x1) { case 0: { t.setText(a+"/"+d+" "+String.valueOf(ch[0])+" "+b+"/"+c); sum=((float)a/(float)d)+((float)b/(float)c); }break; case 1: { t.setText(a+"/"+d+" "+String.valueOf(ch[1])+" "+b+"/"+c); sum=((float)a/(float)d)-((float)b/(float)c); }break; case 2: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c); sum=((float)a/(float)d)*((float)b/(float)c); }break; case 3: { t.setText(a+"/"+d+" "+String.valueOf(ch[3])+" "+b+"/"+c); sum=((float)a/(float)d)/((float)b/(float)c); }break; } } private void fun3() { int a=(int)(Math.random()*10+1); int b=(int)(Math.random()*10+1); int c=(int)(Math.random()*10+1); int x1=(int)(Math.random()*3);//表示加减乘除 switch(x1) { case 0: fun31();//两个运算符,三个整数 break; case 1: fun32();//两个运算符,两个整数,一个分数 break; case 2: fun33();//两个运算符,一个整数,两个分数 break; // case 3: // fun34(); // break; } } private void fun31() { int a=(int)(Math.random()*10+1); int b=(int)(Math.random()*10+1); int c=(int)(Math.random()*10+1); int x1=(int)(Math.random()*11);//表示加减乘除 switch(x1) { case 0: { t.setText(a+" "+String.valueOf(ch[0])+" "+b+" "+String.valueOf(ch[0])+" "+c); sum=a+b+c; }break; case 1: { t.setText(a+" "+String.valueOf(ch[0])+" "+b+" "+String.valueOf(ch[1])+" "+c); sum=a+b-c; }break; case 2: { t.setText(a+" "+String.valueOf(ch[1])+" "+b+" "+String.valueOf(ch[1])+" "+c); sum=a-b-c; }break; case 3: { t.setText(a+" "+String.valueOf(ch[2])+" "+b+" "+String.valueOf(ch[0])+" "+c); sum=a*b+c; }break; case 4: { t.setText(a+" "+String.valueOf(ch[2])+" "+b+" "+String.valueOf(ch[1])+" "+c); sum=a*b-c; }break; case 5: { t.setText(a+" "+String.valueOf(ch[2])+" "+b+" "+String.valueOf(ch[2])+" "+c); sum=a*b*c; }break; case 6: { t.setText(a+" "+String.valueOf(ch[0])+" "+b+" "+String.valueOf(ch[1])+" "+c); sum=a+b-c; }break; case 7: { t.setText(a+" "+String.valueOf(ch[3])+" "+b+" "+String.valueOf(ch[0])+" "+c); sum=((float)a/(float)b)+c; }break; case 8: { t.setText(a+" "+String.valueOf(ch[3])+" "+b+" "+String.valueOf(ch[1])+" "+c); sum=((float)a/(float)b)-c; }break; case 9: { t.setText(a+" "+String.valueOf(ch[3])+" "+b+" "+String.valueOf(ch[3])+" "+c); sum=((float)a/(float)b)/(float)c; }break; } } private void fun32() { int a=(int)(Math.random()*10+1); int b=(int)(Math.random()*10+1); int c=(int)(Math.random()*10+1); int d=(int)(Math.random()*10+1); int x1=(int)(Math.random()*4);//表示加减乘除 switch(x1) { case 0: { t.setText(a+"/"+d+" "+String.valueOf(ch[0])+b+" "+String.valueOf(ch[0])+" "+c); sum=((float)a/(float)d)+b+c; }break; case 1: { t.setText(a+"/"+d+" "+String.valueOf(ch[0])+b+" "+String.valueOf(ch[1])+" "+c); sum=((float)a/(float)d)+b-c; }break; case 2: { t.setText(a+"/"+d+" "+String.valueOf(ch[1])+b+" "+String.valueOf(ch[1])+" "+c); sum=((float)a/(float)d)-b-c; }break; case 3: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+b+" "+String.valueOf(ch[0])+" "+c); sum=((float)a/(float)d)*b+c; }break; case 4: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+b+" "+String.valueOf(ch[1])+" "+c); sum=((float)a/(float)d)*b-c; }break; case 5: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+b+" "+String.valueOf(ch[2])+" "+c); sum=((float)a/(float)d)*b*c; }break; case 6: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+b+" "+String.valueOf(ch[3])+" "+c); sum=((float)a/(float)d)*b/(float)c; } case 7: { t.setText(a+"/"+d+" "+String.valueOf(ch[3])+b+" "+String.valueOf(ch[0])+" "+c); sum=((float)a/(float)d)/(float)b+c; }break; case 8: { t.setText(a+"/"+d+" "+String.valueOf(ch[3])+b+" "+String.valueOf(ch[1])+" "+c); sum=((float)a/(float)d)/(float)b-c; }break; case 9: { t.setText(a+"/"+d+" "+String.valueOf(ch[3])+b+" "+String.valueOf(ch[3])+" "+c); sum=((float)a/(float)d)/(float)b/(float)c; }break; } } private void fun33()//一个整数,两个分数 { int a=(int)(Math.random()*10+1); int b=(int)(Math.random()*10+1); int c=(int)(Math.random()*10+1); int d=(int)(Math.random()*10+1); int e=(int)(Math.random()*10+1); int x1=(int)(Math.random()*4);//表示加减乘除 switch(x1) { case 0: { t.setText(a+"/"+d+" "+String.valueOf(ch[0])+" "+b+"/"+c+" "+String.valueOf(ch[0])+" "+e); sum=((float)a/(float)d)+((float)b/(float)c)+e; }break; case 1: { t.setText(a+"/"+d+" "+String.valueOf(ch[0])+" "+b+"/"+c+" "+String.valueOf(ch[1])+" "+e); sum=((float)a/(float)d)+((float)b/(float)c)-e; }break; case 2: { t.setText(a+"/"+d+" "+String.valueOf(ch[1])+" "+b+"/"+c+" "+String.valueOf(ch[1])+" "+e); sum=((float)a/(float)d)-((float)b/(float)c)-e; }break; case 3: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c+" "+String.valueOf(ch[0])+" "+e); sum=((float)a/(float)d)*((float)b/(float)c)+e; }break; case 4: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c+" "+String.valueOf(ch[1])+" "+e); sum=((float)a/(float)d)*((float)b/(float)c)-e; }break; case 5: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c+" "+String.valueOf(ch[2])+" "+e); sum=((float)a/(float)d)*((float)b/(float)c)*e; }break; case 6: { t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c+" "+String.valueOf(ch[3])+" "+e); sum=((float)a/(float)d)*((float)b/(float)c)/(float)e; } case 7: { t.setText(a+"/"+d+" "+String.valueOf(ch[3])+" "+b+"/"+c+" "+String.valueOf(ch[0])+" "+e); sum=((float)a/(float)d)/((float)b/(float)c)+e; }break; case 8: { t.setText(a+"/"+d+" "+String.valueOf(ch[3])+" "+b+"/"+c+" "+String.valueOf(ch[1])+" "+e); sum=((float)a/(float)d)/((float)b/(float)c)-e; }break; case 9: { t.setText(a+"/"+d+" "+String.valueOf(ch[3])+" "+b+"/"+c+" "+String.valueOf(ch[3])+" "+e); sum=((float)a/(float)d)/((float)b/(float)c)/(float)e; }break; } } private void fun4() { int a=(int)(Math.random()*10+1);//求1~10的阶乘 t.setText(a+"!"); for(int i=1;i<=a;i++) { sum=1; sum=sum*i; } } private void fun5() { int a=(int)(Math.random()*99+1)*-1;//随机生成-1~-99的负整数 int b=(int)(Math.random()*10+1); int x1=(int)(Math.random()*4); switch(x1) { case 0: { t.setText("("+a+") "+String.valueOf(ch[0])+" "+b); sum=a+b; } break; case 1: { t.setText("("+a+") "+String.valueOf(ch[1])+" "+b); sum=a-b; } break; case 2: { t.setText("("+a+") "+String.valueOf(ch[2])+" "+b); sum=a*b; } break; case 3: { t.setText("("+a+") "+String.valueOf(ch[3])+" "+b); sum=(float)a/(float)b; } break; } } } public class Size { public static void main(String[] args) { new MyWindow(); } }
同伴的学号姓名及博客地址:陈江焕,http://www.cnblogs.com/c-19/
实现的时间:10个小时左右
运行环境:Eclipse
分工详细:
一共做了7个方向,本人做4个方向,分别是1,2,4,6.陈江焕做了2个方向,分别是3,7,8.
界面是共同设计的,我主要负责随机出题和判断对错,陈江焕主要负责设置时间和时间滚动,其余共同完成。
总结:
一开始我们就分好谁做哪几个方向,接着我们就开始设计界面,然后编写界面。在编写界面花了较长时间,因为总是觉得不够好,改了又改。弄好界面后,我就先开始编程出随机题目,把我的四个方向先完成,在这个过程,出现很多差错,例如结果不能输入小数点,我把它转换成浮点型,然后又出现新的问题,当遇到除不尽的数时,分数的结果有很多个小数点,小伙伴在设置时间方面功能的时候,程序执行时间的显示与输出是没有问题的,但最大的问题就是实现时间滚动的功能。然而,通过我们共同商讨,查阅了相当多的资料,以及共同协作,最终一一的解决了所有问题。
我觉得结对合作这个方法很好,因为一个人编写太烦闷,憋屈了。两个人编程可以交换想法,我们不仅仅把自己会的只是展示出来,同时也掌握对方会的知识。在我看来结对合作有利于提高学生分析问题和解决问题的能力,提高学生学习的积极性。