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

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

 运行结果:

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

 
原文地址:https://www.cnblogs.com/383237360q/p/4411017.html