实验二 四则运算 完成版 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("\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/)

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

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

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

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

PS:接下来完善更多扩展功能后会继续上传新的版本~

你可能感兴趣的:(四则运算)