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

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

运行结果:

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

时间: 2024-08-03 14:02:07

实验二----四则运算--结对的相关文章

实验二:结对编程 第一阶段

一.实验目标: 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容: 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 三.问题描述 四则运算:开发一个自动生成小学四则运算题目的命令行 “软件”.实现 输入你要出题的个数,

实验二 四则运算 未完成版

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.ActionListe

实验二 四则运算 完成版 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.ActionListe

实验二:结对作业4则运算 柏树&amp;奇聪

package main; import java.util.*; import java.io.*; import javax.swing.*; import java.awt.*; import javax.swing.event.*; import java.awt.event.*; class Expression//表达式类,存放表达式 { int a;//第一个数 int b;//第二个数 int c;//正确答案 int d;//输入答案 char operator;//运算符 b

实验二--四则运算-升级版--2

import java.util.*; import java.util.Random; import java.text.DecimalFormat; public class SiZe { public static void main(String[] args) { String[] str_1 = new String[] {"0", "1", "2", "3", "4", "5&quo

实验二 四则运算

import java.util.Scanner; import java.util.*; public class sizeyunsuan { public static void main(String[] args) { Scanner in=new Scanner(System.in); int i=0,j=0,k=0,l=0,n=0,sum=0,result=0; int []num=new int[5]; String []a={"+","-",&quo

实验2四则运算结对

调试环境:Eclipse 代码: package sz;import java.util.*;import java.applet.*; //引入Applet类import java.awt.*; import java.awt.event.*; //引入系统事件类包.public class V11 extends Applet implements ActionListener{//定义类的同时实现动作事件监听接口. Label label1,label2,label3,label4; //

20145301《Java程序设计》实验二报告:Java面向对象程序设计

20145301<Java程序设计>实验二报告:Java面向对象程序设计 课程:Java程序设计 实验名称:Java面向对象程序设计 实验目的与要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容: 使用TDD的方式设计关实现复数类Complex 程序设计思路: 需求分析: 复数运算需要分:实部和虚部. 需要运行四则运算,即加.减.乘.除四种运算.  需要用户有输入,所以调用了Scanner实例,i

201571030319 201571030322 小学四则运算结对项目

GitHub源码地址:https://github.com/nigulasiletai/Demo2 1.需求分析: (1)随机选择20道混合运算: (2)用户输入答案,给出结果: (3)程序检查答案结果,正确计5分,错误不计分: (4)20道测试题结束给出总分: (5)带括号算式,真分数算式: (6)程序允许用户进行多轮测试,给出多轮测试分数柱状图: (7)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次结果,并询问用户可否进行新一轮测试: (8)测试有记时功能,动态显示答题后