关于局部变量与成员变量的一个问题

getlow 2006-03-22 02:41:18
我在程序的"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("窗口");
}
}
...全文
188 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lqshadan 2006-03-22
  • 打赏
  • 举报
回复
我原来做过猜数字的游戏 不初始化 每次游戏开始后 的值都是固定的 比如第一次运行出现的值是13
那么关掉程序 再跑 第一次出现的值还是13
liang8305 2006-03-22
  • 打赏
  • 举报
回复
Math.random()不用初始化

是局部变量的问题...

你可以在插入一行输出测试一下就知道了,如:
if(e.getSource()==buttonGetNumber)
{
number1 =(int)(Math.random()*100)+1;
System.out.println(number1);
提示条.setText("输入你的猜测: ");
}

当你按"得到一个随机数"按钮的时候就会在控制台打印出这个值了
因为他是局部变量,所以退出方法则收回内存...

pigengler 2006-03-22
  • 打赏
  • 举报
回复
重新编译一下
liang8305 2006-03-22
  • 打赏
  • 举报
回复
局部变量推出actionPerformed方法就收回了...
getlow 2006-03-22
  • 打赏
  • 举报
回复
随机数生成器:"Math.random()"是怎样初始化的?
navy7148 2006-03-22
  • 打赏
  • 举报
回复
up
lqshadan 2006-03-22
  • 打赏
  • 举报
回复
1.使用Math.random()时请初始化 随机数生成器 不然执行N次都有可能产生同一个数

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧