如何使用随机数量的值创建数组

时间:2014-01-16 16:18:51

标签: java arrays random

我需要创建一个具有8到12之间随机值的数组,但它表示我的变量不兼容。我需要改变什么? x应该不是int吗?

以下是包含问题的代码的第一部分:

public class Fish {

int min = 8;
int max = 12;
int x = min + (int)(Math.random() * ((max-min) + 1));

static Fish[] myFish = new Fish[x];
static int Fcount=0;
private float weight;

public Fish(float w) { weight = w;
  myFish[Fcount] = this;
  Fcount++;
}
public float getWeight( ) { return weight; } }

我的代码的第二部分是:

public class GoFish {
public static void main(String[] args) {

  float[] myWeights;
  for (int i = 0 ; i < x ; i++){ 
     int min = 1;
     int max = 20;
     myWeights[i] = min + (int)(Math.random() * ((max-min) + 1));
  }

  for ( float w : myWeights ) { new Fish(w); }
  for ( Fish f : Fish.myFish ) { 
     System.out.println( f.getWeight() );
  } } }

你能否解释一下这个问题,因为我想了解我做错了什么。我还必须将权重设为1到20之间的随机数,但我无法使用这种类型的随机数。

编辑:由于我们将x变量设为静态,如何在其他文件中使用它?因为我需要数组值是随机的。

1 个答案:

答案 0 :(得分:2)

x是一个实例变量。您正试图从静态上下文(javac表示同样访问(javac编译器会说“引用”)实例变量(javac会说“非静态变量”)事情)。这不会编译,因为在static Fish[] myFish = new Fish[x];期间没有任何Fish实例。

您可以将代码更改为:

static int min = 8;
static int max = 12;
static int x = min + (int)(Math.random() * ((max-min) + 1));

这将使非静态变量x成为静态。

Here's静态变量的官方解释(官员更喜欢称它们为类变量)。