黑马程序员技术交流社区
标题:
代码问题,帮忙改改
[打印本页]
作者:
邱成
时间:
2012-9-8 00:06
标题:
代码问题,帮忙改改
本帖最后由 邱成 于 2012-9-8 07:41 编辑
有三张卡,其中两张银卡,一张黄金卡,放在把背面提供给竞猜者来猜,让竞猜者随机三
选一,用图形用户界面设竞猜过程,下面是我写的代码可是提示找不到符号,为什么?
import java.awt.*;
import java.awt.event.*;
class Guess extends Frame
{
Label label1,label2;
Button buttonbegin;
String[] strs ={"1","2","3"};
Guess(String s)
{
setTitle(s);
setLayout(new FlowLayout());
buttonbegin=new Button("开始猜测或重新猜测");
buttonbegin.addActionListener(new B());
label1=new Label(" 请点击按钮开始猜测 ");
label2=new Label("看看您是否猜对了!",Label.CENTER);
label2.setBackground(Color.red);
Button[] b=new Button[strs.length];
for(int i=0;i<strs.length;i++)
{
b
=new Button("卡片"+strs
);
b
.addActionListener(new B());
}
label1.setBackground(Color.red);
add(buttonbegin);
add(label1);
for(int i=0;i<strs.length;i++)
add(b
);
add(label2);
setBackground(Color.green);
setBounds(500,200,220,150);
setVisible(true);
}
class B implements ActionListener
{
public void actionPerformed(ActionEvent e2)
{
if(e2.getSource()==buttonbegin)
{
int num=(int)(Math.random()*3);
label1.setText(" 请选择卡片进行猜测 ");
}
else if(e2.getSource()==b[num]) //编译报错
{
label2.setText("恭喜您,答对了!");
}
}
}
}
public class YellowGeuss
{
public static void main(String args[])
{
Guess guess=new Guess("黄金竞猜");
}
}
作者:
创出一片辉煌
时间:
2012-9-8 00:36
兄弟!你还是没有把局部变量和成员变量的作用域和生命周期没搞明白! 首先:
else if(e2.getSource()==b[num]) //编译报错
{
label2.setText("恭喜您,答对了!");
}
其中的b按钮的对象数组定义在Guess的构造方法中,内部内只能访问外部类的成员变量,而构造方法中的变量为局部变量,只作用在构造方法中,
其次:"num"此变量是在 if(e2.getSource()==buttonbegin)
{
int num=(int)(Math.random()*3);
label1.setText(" 请选择卡片进行猜测 ");
}
这段代码中声明并定义的它的作用域是在if语句中有作用,
你试试把: Button[] b=new Button[strs.length];
的声明不分放在成员位置上,实例部分放在构造方法中,
再把 int num=(int)(Math.random()*3);
的声明部分放在 actionPerformed(ActionEvent e2)方法中的局部变量,赋值不分放在if语句中!
回答有点乱,希望LZ把变量的作用域好好理一理!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2