洗牌列表/运行 通过数组项/一分为二的方法

Shuffle list / run through array items / divide method in two

我正在编写一个函数,通过随机列表显示图像。

private int measurementCount = 0;

public int createShuffledList(){
    List<Integer> indexes = new ArrayList< >();
    for (int i = 1; i <= MEASUEREMENTREPEATS; i++) {
        indexes.add(i);
    }
    Collections.shuffle(indexes);

    Log.d("QD", "Shuffled index: " + indexes);

    int randomPrimeNumber = (int) indexes.get(measurementCount);

    Log.d("QD", "Value from index: " + randomPrimeNumber);

    primeindex = randomPrimeNumber;

    Log.d("QD", "Vale of primeindex index: " + primeindex);

    return primeindex;
}

会发生什么?

  1. 已创建随机列表 "indexes"
  2. randomPrimenumber 是位置 0 上的项目的编号。
  3. primeindexreturns数量

另一种方法是将 +1 添加到 "measurementCount"。现在应该返回混洗列表 "indexes" 的第二项 (primeindex)。

再次调用该方法会再次打乱 "indexes" 数组(无意)。

所以我想把方法分成两部分。 "shuffle index" 的部分应该被调用一次(onCreate),"get the next item" 的部分应该被调用多次(在一个循环中取决于测量计数)。所以我写错了代码应该发生什么:

调用一次(oncreate):

public int createShuffledList(){
    List<Integer> indexes = new ArrayList< >();
    for (int i = 1; i <= MEASUEREMENTREPEATS; i++) {
        indexes.add(i);
    }
    Collections.shuffle(indexes);

    Log.d("QD", "Shuffled index: " + indexes);

    handoverIndex = indexes;
    return handoverIndex;
}

调用多次,measurementCount +1:

public int getNextShuffledListItem(){    
    int randomPrimeNumber = (int) handoverIndex.get(measurementCount);

    Log.d("QD", "Value from index: " + randomPrimeNumber);

    primeindex = randomPrimeNumber;

    Log.d("QD", "Vale of primeindex index: " + primeindex);

    return primeindex;
}

是否可以将打乱后的数组交给下一个遍历数组项的方法?

最好,提前致谢 老虎代码

是的,你可以做到,你的方法(函数)需要return整数列表

public List<Integer> createShuffledList(){
    List<Integer> indexes = new ArrayList< >();
    for (int i = 1; i <= MEASUEREMENTREPEATS; i++) {
        indexes.add(i);
    }
    Collections.shuffle(indexes);
    Log.d("QD", "Shuffled index: " + indexes);
    return indexes;
}

在您的 getNextShuffledListItem() 方法中调用列表的特定元素

indexes.get(yourIndex);

注意 IndexOutOfBoundsException,您不能调用超出列表大小的索引。

=============更新 一些class如何使用你的方法

public class ExampleShuffledList {
    private static final int MEASUEREMENTREPEATS = 10;
    List<Integer> yourList;
    int measurementCount;

    public List<Integer> createShuffledList(){
        List<Integer> indexes = new ArrayList<>();
        for (int i = 1; i <= MEASUEREMENTREPEATS; i++) {
            indexes.add(i);
        }
        Collections.shuffle(indexes);
        return indexes;
    }

    public void someMethodWhereYouWantToUseList(){
        yourList = createShuffledList();
        measurementCount = 0; //you declere it somehow
        Integer yourShuffledIndex = yourList.get(measurementCount); //just call get to get the index from list
    }
}