下面的是一个石头剪刀布的java代码,可以运行出用户图形界面,但是老是出现按键异常
importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;importjava.util.Random;pu...
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
public class Shi_T implements ActionListener{
JFrame frame;
JTextArea Jta;
JTextField tf;
JButton b1,b2,b3,b4;
Random random;
String[] result;
public static void main(String[] args){
Shi_T shitou=new Shi_T();
shitou.go();
}
void go(){
frame=new JFrame("石头剪刀布—你赢我就输");
tf=new JTextField("欢迎进入游戏,接下来即将开始打发你的无聊时间");
Jta=new JTextArea();
b1=new JButton("石头");
b2=new JButton("剪刀");
b3=new JButton("布");
b4=new JButton("退出");
//b5=new JButton("重开");
//random=new Random().nextInt(3);
String[] result={"石头","剪刀","布"};
Container cp=frame.getContentPane();
JPanel p1=new JPanel(new GridLayout(2,1));
p1.add(tf);
p1.add(Jta);
JPanel p2=new JPanel(new GridLayout());
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
//p2.add(b5);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
//b5.addActionListener(this);
cp.add(p1,BorderLayout.CENTER);
cp.add(p2,BorderLayout.SOUTH);
frame.setVisible(true);
frame.setSize(350,300);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
int i=random.nextInt(3);
if(e.getActionCommand()=="石头"){
if(result[i].equals(result[0]))
Jta.append("您:石头 VS 许仕永:石头,本局平手");
if(result[i].equals(result[1]))
Jta.append("您:石头 VS 许仕永:剪刀,本局您胜出");
if(result[i].equals(result[2]))
Jta.append("您:石头 VS 许仕永:布,本局您败北");
}
if(e.getActionCommand()=="剪刀"){
if(result[i].equals(result[0]))
Jta.append("您:剪刀 VS 许仕永:石头,本局败北");
if(result[i].equals(result[1]))
Jta.append("您:剪刀 VS 许仕永:剪刀,本局平局");
if(result[i].equals(result[2]))
Jta.append("您:剪刀 VS 许仕永:布,本局您胜出");
}
if(e.getActionCommand()=="布"){
if(result[i].equals("石头"))
Jta.append("您:布 VS 许仕永:石头,本局败北");
if(result[i].equals("剪刀"))
Jta.append("您:布 VS 许仕永:剪刀,本局平局");
if(result[i].equals("布"))
Jta.append("您:布 VS 许仕永:布,本局您胜出");
}
if(e.getSource()==b4)
System.exit(0);
}
} 展开
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
public class Shi_T implements ActionListener{
JFrame frame;
JTextArea Jta;
JTextField tf;
JButton b1,b2,b3,b4;
Random random;
String[] result;
public static void main(String[] args){
Shi_T shitou=new Shi_T();
shitou.go();
}
void go(){
frame=new JFrame("石头剪刀布—你赢我就输");
tf=new JTextField("欢迎进入游戏,接下来即将开始打发你的无聊时间");
Jta=new JTextArea();
b1=new JButton("石头");
b2=new JButton("剪刀");
b3=new JButton("布");
b4=new JButton("退出");
//b5=new JButton("重开");
//random=new Random().nextInt(3);
String[] result={"石头","剪刀","布"};
Container cp=frame.getContentPane();
JPanel p1=new JPanel(new GridLayout(2,1));
p1.add(tf);
p1.add(Jta);
JPanel p2=new JPanel(new GridLayout());
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
//p2.add(b5);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
//b5.addActionListener(this);
cp.add(p1,BorderLayout.CENTER);
cp.add(p2,BorderLayout.SOUTH);
frame.setVisible(true);
frame.setSize(350,300);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
int i=random.nextInt(3);
if(e.getActionCommand()=="石头"){
if(result[i].equals(result[0]))
Jta.append("您:石头 VS 许仕永:石头,本局平手");
if(result[i].equals(result[1]))
Jta.append("您:石头 VS 许仕永:剪刀,本局您胜出");
if(result[i].equals(result[2]))
Jta.append("您:石头 VS 许仕永:布,本局您败北");
}
if(e.getActionCommand()=="剪刀"){
if(result[i].equals(result[0]))
Jta.append("您:剪刀 VS 许仕永:石头,本局败北");
if(result[i].equals(result[1]))
Jta.append("您:剪刀 VS 许仕永:剪刀,本局平局");
if(result[i].equals(result[2]))
Jta.append("您:剪刀 VS 许仕永:布,本局您胜出");
}
if(e.getActionCommand()=="布"){
if(result[i].equals("石头"))
Jta.append("您:布 VS 许仕永:石头,本局败北");
if(result[i].equals("剪刀"))
Jta.append("您:布 VS 许仕永:剪刀,本局平局");
if(result[i].equals("布"))
Jta.append("您:布 VS 许仕永:布,本局您胜出");
}
if(e.getSource()==b4)
System.exit(0);
}
} 展开
2个回答
展开全部
错误1、数组定义错误,需要把数组内容放在最上面,String[] result={"石头","剪刀","布"};
错误2、random没有实例化,调用的时候需要实例化。random=new Random();
完整代码:
public class Shi_T implements ActionListener{
JFrame frame;
JTextArea Jta;
JTextField tf;
JButton b1,b2,b3,b4;
Random random;
String[] result={"石头","剪刀","布"};
public static void main(String[] args){
Shi_T shitou=new Shi_T();
shitou.go();
}
void go(){
frame=new JFrame("石头剪刀布—你赢我就输");
tf=new JTextField("欢迎进入游戏,接下来即将开始打发你的无聊时间");
Jta=new JTextArea();
b1=new JButton("石头");
b2=new JButton("剪刀");
b3=new JButton("布");
b4=new JButton("退出");
//b5=new JButton("重开");
//random=new Random().nextInt(3);
Container cp=frame.getContentPane();
JPanel p1=new JPanel(new GridLayout(2,1));
p1.add(tf);
p1.add(Jta);
JPanel p2=new JPanel(new GridLayout());
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
//p2.add(b5);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
//b5.addActionListener(this);
cp.add(p1,BorderLayout.CENTER);
cp.add(p2,BorderLayout.SOUTH);
frame.setVisible(true);
frame.setSize(350,300);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
random=new Random();
int i=random.nextInt(3);
if(e.getActionCommand()=="石头"){
if(result[i].equals(result[0]))
Jta.append("您:石头 VS 许仕永:石头,本局平手");
if(result[i].equals(result[1]))
Jta.append("您:石头 VS 许仕永:剪刀,本局您胜出");
if(result[i].equals(result[2]))
Jta.append("您:石头 VS 许仕永:布,本局您败北");
}
if(e.getActionCommand()=="剪刀"){
if(result[i].equals(result[0]))
Jta.append("您:剪刀 VS 许仕永:石头,本局败北");
if(result[i].equals(result[1]))
Jta.append("您:剪刀 VS 许仕永:剪刀,本局平局");
if(result[i].equals(result[2]))
Jta.append("您:剪刀 VS 许仕永:布,本局您胜出");
}
if(e.getActionCommand()=="布"){
if(result[i].equals("石头"))
Jta.append("您:布 VS 许仕永:石头,本局败北");
if(result[i].equals("剪刀"))
Jta.append("您:布 VS 许仕永:剪刀,本局平局");
if(result[i].equals("布"))
Jta.append("您:布 VS 许仕永:布,本局您胜出");
}
if(e.getSource()==b4)System.exit(0);
}}
错误2、random没有实例化,调用的时候需要实例化。random=new Random();
完整代码:
public class Shi_T implements ActionListener{
JFrame frame;
JTextArea Jta;
JTextField tf;
JButton b1,b2,b3,b4;
Random random;
String[] result={"石头","剪刀","布"};
public static void main(String[] args){
Shi_T shitou=new Shi_T();
shitou.go();
}
void go(){
frame=new JFrame("石头剪刀布—你赢我就输");
tf=new JTextField("欢迎进入游戏,接下来即将开始打发你的无聊时间");
Jta=new JTextArea();
b1=new JButton("石头");
b2=new JButton("剪刀");
b3=new JButton("布");
b4=new JButton("退出");
//b5=new JButton("重开");
//random=new Random().nextInt(3);
Container cp=frame.getContentPane();
JPanel p1=new JPanel(new GridLayout(2,1));
p1.add(tf);
p1.add(Jta);
JPanel p2=new JPanel(new GridLayout());
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
//p2.add(b5);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
//b5.addActionListener(this);
cp.add(p1,BorderLayout.CENTER);
cp.add(p2,BorderLayout.SOUTH);
frame.setVisible(true);
frame.setSize(350,300);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
random=new Random();
int i=random.nextInt(3);
if(e.getActionCommand()=="石头"){
if(result[i].equals(result[0]))
Jta.append("您:石头 VS 许仕永:石头,本局平手");
if(result[i].equals(result[1]))
Jta.append("您:石头 VS 许仕永:剪刀,本局您胜出");
if(result[i].equals(result[2]))
Jta.append("您:石头 VS 许仕永:布,本局您败北");
}
if(e.getActionCommand()=="剪刀"){
if(result[i].equals(result[0]))
Jta.append("您:剪刀 VS 许仕永:石头,本局败北");
if(result[i].equals(result[1]))
Jta.append("您:剪刀 VS 许仕永:剪刀,本局平局");
if(result[i].equals(result[2]))
Jta.append("您:剪刀 VS 许仕永:布,本局您胜出");
}
if(e.getActionCommand()=="布"){
if(result[i].equals("石头"))
Jta.append("您:布 VS 许仕永:石头,本局败北");
if(result[i].equals("剪刀"))
Jta.append("您:布 VS 许仕永:剪刀,本局平局");
if(result[i].equals("布"))
Jta.append("您:布 VS 许仕永:布,本局您胜出");
}
if(e.getSource()==b4)System.exit(0);
}}
追问
数组赋值不能在类中的其他方法中完成吗
追答
可以啊。在上面定义的String[] result;
在go()里面:
result=new String[3];
result[0]="石头";
result[1]="剪刀";
result[2]="布";
//或者String str="石头,剪刀,布";result=str.split(",");。。。。。。
你在go里面的
String[] result={"石头","剪刀","布"};这叫数组的初始化。不是赋值,不同的概念,你全局定义的String[] result;那么在actionPerformed调用调用的时候还是空的。没有实例化、赋值。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询