我在程序的"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("窗口");
}
}

解决方案 »

  1.   

    1.使用Math.random()时请初始化 随机数生成器 不然执行N次都有可能产生同一个数
      

  2.   

    随机数生成器:"Math.random()"是怎样初始化的?
      

  3.   

    局部变量推出actionPerformed方法就收回了...
      

  4.   

    Math.random()不用初始化是局部变量的问题...你可以在插入一行输出测试一下就知道了,如:
    if(e.getSource()==buttonGetNumber)

    number1 =(int)(Math.random()*100)+1;
                               System.out.println(number1);
    提示条.setText("输入你的猜测: ");
    }当你按"得到一个随机数"按钮的时候就会在控制台打印出这个值了
    因为他是局部变量,所以退出方法则收回内存...