随机发生器没有确定价值

时间:2015-05-19 12:56:52

标签: java random

public void actionPerformed(ActionEvent e) {
     String inData;
     int tal, slump=0, forsok=0;
     if(e.getSource()==random){
         slump=(int) (Math.random()*100+1);
     }
     //slumpar ett tal mellan 0 och 100
     if(e.getSource()==ok){
         forsok++;
         try{
             inData=tGissa.getText();
             tal = Integer.parseInt(inData);
             if(tal==slump){
                 JOptionPane.showMessageDialog(null, "Det är rätt! "+forsok+" försök.");
             }
             else if(tal<slump && tal>0){
                 JOptionPane.showMessageDialog(null, "För lågt!");
             }
             else if(tal>slump && tal<101){
                 JOptionPane.showMessageDialog(null, "För högt!");
             }
             else{
                 JOptionPane.showMessageDialog(null, "Felaktig inmatning!");
             }
         }
         catch(Exception ex){
             JOptionPane.showMessageDialog(null, "Felaktig inmatning!");
         }
     }
}

您应该猜测1到100之间的正确数字,如果您是对或错,程序会给出反馈以及您做了多少尝试。

int&#34;颓势&#34;似乎总是为0,即使它应该被赋予随机函数的值。需要任何帮助。

1 个答案:

答案 0 :(得分:0)

让我们描述一下这段代码的含义。

调用按钮时调用方法actionPerformed。你没有显示其余的代码,但我会假设你的代码中有两个按钮,一个'随机'按钮和一个'ok'按钮。

首先声明并初始化一些局部变量

 int tal, slump=0, forsok=0;

然后,如果按下“随机”按钮,则为变量slump分配一个随机数。

 if(e.getSource()==random){
     slump=(int) (Math.random()*100+1);
 }

然后,如果按下“确定”按钮,则将输入的内容与变量slump中的内容进行比较。

 if(e.getSource()==ok){
     // etc...
 }

请注意,slump和其他变量是局部变量。每次调用方法时都会创建它们,并在方法完成时再次消失。所以,这就是发生的事情:

  • 点击“随机”。调用actionPerformed方法。
  • 分配新的局部变量。随机值分配给slump
  • 该方法返回并丢弃局部变量。您保存的随机数现已消失。

  • 点击“确定”。再次调用actionPerformed方法。

  • 分配新的局部变量。请注意,slump已初始化为0
  • 然后您将输入的内容与slump进行比较。

你现在看到为什么这不起作用?每次调用该方法时都会有一个新变量slump

您必须将其他地方的随机数保存在类的成员变量中,而不是保存在本地变量中。