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


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

     运行结果:

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

     
  • 相关阅读:
    MetaWeblog API
    序列化Hashtable
    贴几个CodeDOM的链接
    Summing it all up: 35 blog entries in 2 days from the BCL Team [Kit George] --from BCLTeam's Weblog
    上海在下尘土
    PSP升级速度令然惊喜!(update:2007.10.13)
    Linkin Park林肯公园上海演唱会(2007年11月18日)
    STARCRAFT2 / 星际争霸2
    Enterprise Library 3.0 April 2007
    《The Devil Wears Prada / 穿布拉达的女王》很有意思.
  • 原文地址:https://www.cnblogs.com/383237360q/p/4411017.html
Copyright © 2020-2023  润新知