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






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