关于局部变量与成员变量的一个问题
我在程序的"WindowButton"类中定义了一个成员变量:number1,程序就正常运行,但我把成员变量:number1注释了,然后在方法:"actionPerformed(ActionEvent e)"中定义一个局部变量number1来取代注释部分,并初始化后,就不能通过Math.random()方法得到随机数了,局部变量:number1始终还是初始化的那个值.请帮我解释一下这其中的原由. 具体程序如下:
import java.awt.*;
import java.awt.event.*;
class WindowButton extends Frame implements ActionListener
{
//int number1;
TextField 提示条,文本框;
Button buttonGetNumber,buttonEnter;
WindowButton(String s)
{
super(s);
setLayout(new FlowLayout());
buttonGetNumber = new Button("得到一个随机数");
add(buttonGetNumber);
提示条 = new TextField("输入你的猜测:",10);
提示条.setEditable(false);
文本框=new TextField("0",10);
add(提示条);
add(文本框);
buttonEnter = new Button("确定");
add(buttonEnter);
buttonEnter.addActionListener(this);
buttonGetNumber.addActionListener(this);
setBounds(100,100,150,150);
setVisible(true);
validate();
}
public void actionPerformed(ActionEvent e)
{
int number1=0;
if(e.getSource()==buttonGetNumber)
{
number1 =(int)(Math.random()*100)+1;
提示条.setText("输入你的猜测: ");
}
else if(e.getSource()==buttonEnter)
{
int guess=0;
try
{
guess=Integer.parseInt(文本框.getText());
if(guess==number1)
{
提示条.setText("猜对了!");
}
else if(guess>number1)
{
提示条.setText("猜大了!");
文本框.setText(null);
}
else if(guess<number1)
{
提示条.setText("猜小了!");
文本框.setText(null);
}
}
catch(NumberFormatException ee)
{
提示条.setText("请输入数字字符");
}
}
}
}
class Example7
{
public static void main(String [] args)
{
WindowButton win = new WindowButton("窗口");
}
}
问题点数:50、回复次数:7Top
1 楼lqshadan(强)回复于 2006-03-22 15:15:18 得分 10
1.使用Math.random()时请初始化 随机数生成器 不然执行N次都有可能产生同一个数Top
2 楼navy7148(飞尘)回复于 2006-03-22 15:30:31 得分 0
upTop
3 楼getlow()回复于 2006-03-22 15:33:01 得分 0
随机数生成器:"Math.random()"是怎样初始化的?Top
4 楼liang8305(换工作的时间到了...)回复于 2006-03-22 15:35:34 得分 0
局部变量推出actionPerformed方法就收回了...Top
5 楼pigengler(en)回复于 2006-03-22 15:39:28 得分 0
重新编译一下Top
6 楼liang8305(换工作的时间到了...)回复于 2006-03-22 15:39:57 得分 40
Math.random()不用初始化
是局部变量的问题...
你可以在插入一行输出测试一下就知道了,如:
if(e.getSource()==buttonGetNumber)
{
number1 =(int)(Math.random()*100)+1;
System.out.println(number1);
提示条.setText("输入你的猜测: ");
}
当你按"得到一个随机数"按钮的时候就会在控制台打印出这个值了
因为他是局部变量,所以退出方法则收回内存...
Top
7 楼lqshadan(强)回复于 2006-03-22 17:46:01 得分 0
我原来做过猜数字的游戏 不初始化 每次游戏开始后 的值都是固定的 比如第一次运行出现的值是13
那么关掉程序 再跑 第一次出现的值还是13Top




