实验二----四则运算--结对

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)的题目,且负数需要带括号,用户输入的结果不用带括号。

 运行结果:

实验二----四则运算--结对实验二----四则运算--结对

实验二----四则运算--结对实验二----四则运算--结对

实验二----四则运算--结对实验二----四则运算--结对

总结:我本来以为四则混合运算是比较容易完成的,但是当我做的时候就发现原来这并我没我之前以为的那么容易实现,在实现这个功能的时候遇到过很多麻烦,比如遇到乘数法的时候还要考虑到它们的优先级比加减法高,所以对于这个问题,我绞尽脑汁,想了很多方法,但是最后都以失败告终,后来我跟队友廖焯燊的配合下,想出了一种方法 利用循环跟数组先将乘除法的先运算,然后再到减法 最后把剩下的结果相加起来就是最后的答案。还有界面的基本知识,有很多已经忘了,在这个时候只能去翻书和百度解决了。通过这次实验,我学会了如何跟队友合作解决问题还有学会了很多知识

 

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