避免在不同的函数中生成随机整数

时间:2013-08-28 18:29:56

标签: java arrays

我的功能:

public int[] generateRandomInteger(){
    int[] arr = new int[100];
    Random randomGenerator = new Random();

    for (int i = 0; i < 100; i++){
        int randomInt = randomGenerator.nextInt(16) + 10;
        arr[i] = randomInt;
    }        
    return arr;
}

问题是:当我在另一个函数中使用 arr 时,它将生成一个包含100个整数的不同数组。我该如何避免这个问题?我只想使用从上面的函数生成的数组。

任何帮助都会得到满足!

5 个答案:

答案 0 :(得分:1)

只需生成一次,并始终使用它。

int[] array = generateRandomInteger();
// operate on it...
// or pass it to another function
modifyArray(array);
System.out.println(Arrays.toString(array));

其中

public void modifyArray(int[] array)
{
    for (int i = 0; i < array.length; ++i)
    {
        array[i] += 10;
    }
}

答案 1 :(得分:1)

如果您想让arr变量对所有对象都通用。那么使用静态变量

static int[] arr = new int[100];
public void setRandomIntegerArray(){
  Random randomGenerator = new Random();
  for (int i = 0; i < 100; i++){
      int randomInt = randomGenerator.nextInt(16) + 10;
      arr[i] = randomInt;
  }
}
public int[] getRandomIntegerArray(){
    return arr;
}

如果您希望arr变量与每个对象分开。然后使用实例变量

int[] arr = new int[100];
public void setRandomIntegerArray(){
  Random randomGenerator = new Random();
  for (int i = 0; i < 100; i++){
      int randomInt = randomGenerator.nextInt(16) + 10;
      arr[i] = randomInt;
  }
}
public int[] getRandomIntegerArray(){
    return arr;
}

答案 2 :(得分:0)

您可以在创建随机实例时使用种子。如果使用相同的种子创建的每个随机实例将以相同的顺序对它们进行调用,则返回相同的结果。但我同意Rohit Jain的说法,你可能想要保留阵列的一个实例。

答案 3 :(得分:0)

private int[] generatedArray = null; //This keeps the array you generated
private int randomIdx = 0; //This keeps track of where you are

//This function controls access to your random numbers.
public int getNextInt() {
  if (this.generatedArray == null) {
    this.generatedArray = generateRandomInteger();
    randomIdx = 0;
  }

  return generatedArray[randomIdx++];
}

//Technically this doesn't need to be in the same class
//We keep it untouched, though, in case you need the functionality as-is
public int[] generateRandomInteger(){
    int[] arr = new int[100];
    Random randomGenerator = new Random();

    for (int i = 0; i < 100; i++){
        int randomInt = randomGenerator.nextInt(16) + 10;
        arr[i] = randomInt;
    }        
    return arr;
}

答案 4 :(得分:0)

您可以用这种方式定义单例实例

public class ArrayIntGenerator {
  private int[] array;
  private ArrayIntGenerator()
  {
      this.array = new int[100];
      Random randomGenerator = new Random();
        for (int i = 0; i < 100; i++){
            int randomInt = randomGenerator.nextInt(16) + 10;
            this.array[i] = randomInt;
        }
  }
  private static ArrayIntGenerator instance = null;

  public final static ArrayIntGenerator getInstance() {
    if(null == instance) instance = new ArrayIntGenerator();
    return instance;
  }

  public int[] getArray() {
    return this.array;
  }
}

并使用int[]

访问ArrayIntGenerator.getInstance().getArray()