下面的是一个石头剪刀布的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);

}
}
展开
 我来答
邪恶的天使o
2012-09-05 · 超过12用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:30.9万
展开全部
你在主类的主方法里创建了这个主类的对象,
运行起来当然有问题了,
你应该在主类的主方法里创建一个窗口子类的对象,在这个窗口子类里实现你的游戏功能
追问
不是那个的问题
知识阅历积累历程

推荐于2016-06-10 · 影视爱好者、游戏达人、IT 男
知识阅历积累历程
采纳数:10965 获赞数:6547

向TA提问 私信TA
展开全部
错误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);
}}
追问
数组赋值不能在类中的其他方法中完成吗
追答
可以啊。在上面定义的String[] result;
在go()里面:
result=new String[3];
result[0]="石头";
result[1]="剪刀";
result[2]="布";
//或者String str="石头,剪刀,布";result=str.split(",");。。。。。。
你在go里面的
String[] result={"石头","剪刀","布"};这叫数组的初始化。不是赋值,不同的概念,你全局定义的String[] result;那么在actionPerformed调用调用的时候还是空的。没有实例化、赋值。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式