簡體   English   中英

避免在不同的函數中生成隨機整數

[英]Avoid generating random integer in different functions

我的功能:

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個整數的不同數組。 我該如何避免這個問題? 我只想使用從上面的函數生成的數組。

任何幫助都會得到滿足!

只生成一次,並始終使用它。

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;
    }
}

如果你想讓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;
}

您可以在創建隨機實例時使用種子。 如果使用相同的種子創建的每個隨機實例將以相同的順序對它們進行調用,則返回相同的結果。 但我同意Rohit Jain的說法,你可能想要保留陣列的一個實例。

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;
}

您可以用這種方式定義單例實例

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;
  }
}

使用ArrayIntGenerator.getInstance().getArray()訪問int[] ArrayIntGenerator.getInstance().getArray()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM