📄 test.java
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame
{
int[] number=new int[4]; //四个数
String en=""; //答案
JButton b1,b2;
JTextField[] txt=new JTextField[4];
JTextArea txtarea=new JTextArea(10,20);
JScrollPane scro=new JScrollPane(txtarea);
JPanel p1=new JPanel();
int result=24;
String[] sg={" + "," - "," * "," / "};
int[][] numberOrder=new int[24][4]; //四个数的排列顺序,有24种可能性
{ //初始化四个数的排列顺序
int t=0;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j!=i)
for(int k=0;k<4;k++)
{
if(k!=i && k!=j)
for(int l=0;l<4;l++)
{
if(l!=i && l!=j && l!=k)
{
numberOrder[t][0]=i;
numberOrder[t][1]=j;
numberOrder[t][2]=k;
numberOrder[t][3]=l;
t++;
}
}
}
}
}
}
public Test()
{
b1=new JButton("电脑出题");
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
en="";
randomNumber();
for(int i=0;i<4;i++)
{
txt[i].setText(""+number[i]);
}
txtarea.setText("");
}
}
);
b2=new JButton("显示答案");
b2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if( txt[0].getText().equals(""+number[0]) && txt[1].getText().equals(""+number[1]) &&
txt[2].getText().equals(""+number[2]) && txt[3].getText().equals(""+number[3]) )
{
txtarea.setText(en);
}
else
{
en="";
try
{
int n1,n2,n3,n4;
n1=(int)Integer.parseInt(txt[0].getText());
n2=(int)Integer.parseInt(txt[1].getText());
n3=(int)Integer.parseInt(txt[2].getText());
n4=(int)Integer.parseInt(txt[3].getText());
if( (""+n1).equals(txt[0].getText() ) && //是否是整数
(""+n2).equals(txt[1].getText() ) &&
(""+n3).equals(txt[2].getText() ) &&
(""+n4).equals(txt[3].getText() ) &&
n1<=13 && n1>0 && //是否在有效范围内
n2<=13 && n2>0 &&
n3<=13 && n3>0 &&
n4<=13 && n4>0
)
{
number[0]=n1;
number[1]=n2;
number[2]=n3;
number[3]=n4;
if(testSign())
{
txtarea.setText(en);
}
else
{
txtarea.setText("您输入的四个整数不能运算为24!"); //没有答案
}
}
else
{
throw(new Exception());
}
}
catch (Exception ex) //用户输入的不是整数
{
txtarea.setText("请输入四个1到13之间的整数!");
}
}
}
}
);
randomNumber(); //生成可运算的随机数
for(int i=0;i<4;i++)
{
txt[i]=new JTextField(4);
txt[i].setHorizontalAlignment( JTextField.CENTER );
txt[i].setText(""+number[i]);
p1.add(txt[i]);
}
p1.add(b2);
p1.add(b1);
this.getContentPane().add(p1,BorderLayout.NORTH);
this.getContentPane().add(scro);
this.getContentPane().add(new JLabel(" 可以自己输入数字,也可以由电脑随机出数"),BorderLayout.SOUTH);
pack();
setVisible(true);
}
//生成四个结果可为24的随机数
private void randomNumber()
{
boolean ok=false;
while(! ok)
{
number[0]=(int)(Math.random()*12)+1;
number[1]=(int)(Math.random()*12)+1;
number[2]=(int)(Math.random()*12)+1;
number[3]=(int)(Math.random()*12)+1;
ok=testSign();
}
}
private boolean testSign() //在三个位置上编历四种符号( + - * / )
{
int[] sign=new int[3]; // 三个符号
boolean ok=false;
for(int s1=0;s1<4;s1++)
{
for(int s2=0;s2<4;s2++)
{
for(int s3=0;s3<4;s3++)
{
for(int r=0;r<24;r++)
{
if( testIfResult( number[numberOrder[r][0]] ,
number[numberOrder[r][1]] ,
number[numberOrder[r][2]] ,
number[numberOrder[r][3]] ,
s1,s2,s3 )
)
ok=true;
}
}
}
}
return ok;
}
private double compute(int sign,double n1,double n2)
{
switch(sign)
{
case 0:
return n1+n2;
case 1:
return n1-n2;
case 2:
return n1*n2;
case 3:
return n1/n2;
}
return n2;
}
public boolean testIfResult(double n1,double n2,double n3,double n4,
int s1,int s2,int s3)
{
String en="";
//尝试不同的运算顺序
// ((n1+n2)+n3)+n4
if(Math.abs( compute(s3,compute(s2,compute(s1,n1,n2),n3),n4) -result)<1e-6)
en+= " ( ( "+n1+sg[s1]+n2+ " ) " +sg[s2]+n3+ " ) " + sg[s3] +n4 +"\n";
// (n1+n2)+(n3+n4)
if(Math.abs( compute(s2,compute(s1,n1,n2),compute(s3,n3,n4)) -result)<1e-6)
en+=" ( " +n1+sg[s1]+n2+" ) "+ sg[s2] +" ( "+ n3 + sg[s3] +n4+" ) " +"\n";
// (n1+(n2+n3))+n4
if(Math.abs( compute(s3,compute(s1,n1,compute(s2,n2,n3)),n4) -result)<1e-6)
en+=" ( " +n1+sg[s1]+" ( "+n2+ sg[s2] + n3 + " ) ) " + sg[s3] +n4 +"\n";
// n1+((n2+n3)+n4)
if(Math.abs( compute(s1,n1,compute(s3,compute(s2,n2,n3),n4)) -result)<1e-6)
en+=" " +n1+sg[s1]+" ( ( "+n2 +sg[s2]+n3+ " ) " + sg[s3] +n4+ " ) " +"\n";
// n1+(n2+(n3+n4))
if(Math.abs( compute(s1,n1,compute(s2,n2,compute(s3,n3,n4))) -result)<1e-6)
en+=" "+ n1 +sg[s1]+" ( "+n2+ sg[s2] + " ( " +n3 + sg[s3] +n4 + " ) ) " +"\n";
if(en.length()>0)
{
this.en=this.en+en;
return true;
}
else
{
return false;
}
}
public static void main(String[] args)
{
Test f=new Test();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -