?? 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 + -