实验二 四则运算 完成版 ver.1

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("u56DBu5219u8FD0u7B97");
        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("u786Eu8BA4");
        vvvv.getContentPane().add(yes);
        yes.addActionListener(this);

        no = new JButton("u6E05u7A7A");
        no.addActionListener(this);
        vvvv.getContentPane().add(no);

        huan = new JButton("u6362u80A4");
        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("欢迎使用四则运算练习系统
请输入题目的数量(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:接下来完善更多扩展功能后会继续上传新的版本~

原文地址:https://www.cnblogs.com/SiPine/p/4419901.html