package size; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JTextField; import javax.swing.JTextArea; import java.awt.Color; import java.util.*; import java.util.regex.*; import java.lang.*; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.JButton; import javax.swing.JScrollPane; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.io.*; public class vvvv extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; int x;//题目个数 int y=0; int n; int i=1; char[] op = { '+', '-', '*', '/' }; int[] nov = new int[4]; int zf;//控制正负 int zz;//题型控制 String str = new String(); String str1 = new String(); int[] num1 = new int[5]; String s[] = new String[5]; int num2=0; int[] anser=new int[5];//用户的答案 int[] trueanser=new int[5];//正确答案 File file; int a = 0; int b = 0; // int c = 0; public JFrame vvvv; JTextArea ck; private JTextField xmt; private JButton yes; private JButton no; private JButton start; private JButton huan; private JPanel panel; private JScrollPane scrollPane; /** * Launch the application. */ public static void main(String[] args)// 主方法 { EventQueue.invokeLater(new Runnable() { public void run() { try { vvvv window = new vvvv(); window.vvvv.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public vvvv() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { vvvv = new JFrame(); vvvv.getContentPane().setEnabled(false); vvvv.getContentPane().setBackground(Color.GRAY); vvvv.setTitle("\u56DB\u5219\u8FD0\u7B97"); vvvv.setBounds(100, 100, 494, 270); vvvv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); vvvv.setResizable(false); vvvv.getContentPane() .setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); panel = new JPanel(); vvvv.getContentPane().add(panel); ck = new JTextArea(10, 40); // panel.add(ck); // ck.setEditable(false); scrollPane = new JScrollPane(ck); panel.add(scrollPane); xmt = new JTextField(); vvvv.getContentPane().add(xmt); xmt.addActionListener(this); xmt.setColumns(10); yes = new JButton("\u786E\u8BA4"); vvvv.getContentPane().add(yes); yes.addActionListener(this); no = new JButton("\u6E05\u7A7A"); no.addActionListener(this); vvvv.getContentPane().add(no); huan = new JButton("\u6362\u80A4"); huan.addActionListener(this); vvvv.getContentPane().add(huan); start = new JButton("开始"); start.addActionListener(this); vvvv.getContentPane().add(start); } public void actionPerformed(ActionEvent e) { if (e.getSource() == yes) { if(b==1) { if(xmt.getText().length()!=0) try { x=Integer.parseInt(xmt.getText()); b++; } catch(NumberFormatException x) { ck.setText("输入有误!"); } else ck.setText("输入有误!"); } if(b==2) { if(n!=0)anser[i-2]=Integer.parseInt(xmt.getText()); str1="第"+i+"条题目为:"; n=(int)(Math.random() * 4 + 2);//随机出运算符的数量 zz=(int)(Math.random()*2); for(int j=0;j<n;j++) { //zf=(int)(Math.random()*2); //if(zf==0)//负 // num1[j]=-(int)(Math.random()*100);//产生随机数 //else //正 num1[j]=(int)(Math.random()*100); if(zz==1)num1[j]=(int)(Math.random()*10+1); } for(int k=0;k<n-1;k++) { nov[k]=(int)(Math.random()*4); if(nov[k]==3&&num1[k+1]==0) { do { num1[k+1]=(int)(Math.random()*100); }while(num1[k+1]==0); } } str=""; if(zz==0) { for(int j=0;j<n;j++) { //if(num1[j]<0)str=str+"("+String.valueOf(num1[j])+")"; str=str+String.valueOf(num1[j]); if(j==n-1) { //try //{ //int ii=0; trueanser[i-1]=opt(str); //} /*catch (Exception e1) { System.out.println(e1); //e1.printStackTrace(); }*/ str=str+"="; //str=str+String.valueOf(trueanser[i-1]); ck.setText(str1+str); break; } str=str+op[nov[j]]; } } if(zz==1) { trueanser[i-1]=1; str=String.valueOf(num1[0])+"!="; for(int j=1;j<=num1[0];j++) trueanser[i-1]=trueanser[i-1]*j; //str=str+String.valueOf(trueanser[i-1]); ck.setText(str1+str); } if(i==x+1) { b=3; anser[i-2]=Integer.parseInt(xmt.getText()); } else i++; } if(b==3) { y=0; for(int j=0;j<x;j++) { if(anser[j]==(int)trueanser[j])y++; } ck.setText("答题完成!答对"+y+"道!"); b=0; } } if (e.getSource() == no) { xmt.setText(null); } if (e.getSource() == huan) { if (a == 0) { vvvv.getContentPane().setBackground(Color.blue); a++; } else if (a == 1) { vvvv.getContentPane().setBackground(Color.yellow); a++; } else if (a == 2) { vvvv.getContentPane().setBackground(Color.gray); a = 0; } } if (e.getSource() == start) { ck.setText("欢迎使用四则运算练习系统\n请输入题目的数量(1-5)"); n=0; i=1; b=1; } } public int opt(String str){ String[] operater =new String[20]; String[] number = new String[20]; Stack countStack1 = new Stack(); Stack countStack2 = new Stack(); int result =0; number = str.split("\\/|\\*|\\+|\\-"); operater= str.split("\\d+"); for(int i = 0; i<number.length;i++) { countStack1.push(number[i]); if(i!=number.length-1) { countStack1.push(operater[i+1]); } } while(!countStack1.isEmpty()) countStack2.push(countStack1.pop()); String op; while(!countStack2.isEmpty()) { result=0; op = countStack2.pop().toString(); if(op.equals("*")) { result=Integer.parseInt(countStack1.pop().toString())*Integer.parseInt(countStack2.pop().toString()); countStack1.push(result); continue; } if(op.equals("/")) { result=Integer.parseInt(countStack1.pop().toString())/Integer.parseInt(countStack2.pop().toString()); countStack1.push(result); continue; } countStack1.push(op); } while(!countStack1.isEmpty()) countStack2.push(countStack1.pop()); while(!countStack2.isEmpty()) { result=0; op = countStack2.pop().toString(); if(op.equals("+")) { result=Integer.parseInt(countStack1.pop().toString())+Integer.parseInt(countStack2.pop().toString()); countStack1.push(result); continue; } if(op.equals("-")) { result=Integer.parseInt(countStack1.pop().toString())-Integer.parseInt(countStack2.pop().toString()); countStack1.push(result); continue; } countStack1.push(op); } return result; } /*public static int opt(int[] num1,int[] nov,int n,int i) { if(i>=n)return num1[i]; int sum=0; if(nov[0]==0 && i<n) { sum=num1[i]+opt(num1,nov,n,i+1); } if(nov[0]==1 && i<n) { sum=num1[i]-opt(num1,nov,n,i+1); } if(nov[0]==2 && i<n) { sum=num1[i]*opt(num1,nov,n,i+1); } if(nov[0]==3 && i<n) { sum=num1[i]/opt(num1,nov,n,i+1); } return sum; }*/ }
相比之前的未完成版,这个去掉一些功能简化一下先做一个初版放上来了.
已完成的扩展方向:
A.换肤
B.user选择题目数量
C.阶乘
任务分配:
我负责的是出题以及计算两个部分,界面换肤以及其他功能是同伴莫俊宇负责的,最后两个人一起进行整合以及调试
感想:
结队作业比起以往我一个人干要效率不少,这样我可以把我不擅长的部分交给队友,两个人各施其职,效率非常高,而且也能互相帮忙解决问题,程序的容错也比以往要好,两个人结队的时候注重的是交流,这样才能融合两个人不同的编码风格,让程序的质量进一步提升
这一次结队让我受益良多,也让我认识到编程队的重要性,期待与伙伴的下一次合作
开发环境:Eclipse
结对伙伴:201306114408 林达 (http://www.cnblogs.com/SiPine/)
201306114405 莫俊余 (http://www.cnblogs.com/mjysok/)
PS:接下来完善更多扩展功能后会继续上传新的版本~