Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在数组中每次生成随机选择,在android中不重复_Android - Fatal编程技术网

在数组中每次生成随机选择,在android中不重复

在数组中每次生成随机选择,在android中不重复,android,Android,我正在开发多项选择题游戏。它有四个整数选择。选项存储在数组列表中。我想以随机顺序显示数组中元素的选择,每次都不重复。请给我答案 int ans[] = new int[] { sum, sum + 1, sum + 2, sum - 1 }; ArrayList<Integer> number = new ArrayList<Integer>(); for (int i : number) { number.add(ans[i]);

我正在开发多项选择题游戏。它有四个整数选择。选项存储在数组列表中。我想以随机顺序显示数组中元素的选择,每次都不重复。请给我答案

int ans[] = new int[] { sum, sum + 1, sum + 2, sum - 1 };

    ArrayList<Integer> number = new ArrayList<Integer>();
    for (int i : number) {
        number.add(ans[i]);
    }

    Collections.shuffle(number);

    but1.setText("" + number.get(0));
    but2.setText("" + number.get(1));
    but3.setText("" + number.get(2));
    but4.setText("" + number.get(3));
intans[]=新的int[]{sum,sum+1,sum+2,sum-1};
ArrayList编号=新的ArrayList();
for(int i:编号){
编号。添加(ans[i]);
}
收藏。洗牌(数字);
但是1.setText(“+number.get(0));
但是2.setText(“+number.get(1));
但是3.setText(“+number.get(2));
但是4.setText(“+number.get(3));

makeRandomArray返回大小输入之间的随机整数数组。因此,如果传递size=4,它将返回一个从0到3的随机数组,然后使用随机输出处理问题。希望这有帮助

 /**
 * Make an int random array with value from 0 to max
 * @param size: size = max + 1
 * @return result: an int array
 */
private int[] makeRandomArray(int size) {
    int result[] = new int[size];
    List<Integer> ascesdingArray = new ArrayList<>();
    for (int i = 0; i < size; i++) {
        ascesdingArray.add(i);
    }
    for (int i = 0; i < size; i++) {
        int randomValue = random(ascesdingArray);
        result[i] = randomValue;
    }
    return result;
}

/**
 * Get random value in input array
 * @param ascesdingArray
 * @return randomValue: random element from input array
 */
private int random(List<Integer> ascesdingArray) {
    int max = ascesdingArray.size() - 1;
    int randomValue = 0;
    if (max > 0) {
        // get random index and it's value
        int index = new Random().nextInt(max);
        randomValue = ascesdingArray.get(index);
        // remove value got from array so it will not be duplicated
        ascesdingArray.remove(index);
    } else if (max == 0) {
        randomValue = ascesdingArray.get(0);
    }
    return randomValue;
}
/**
*创建一个值为0到最大值的int随机数组
*@param size:size=max+1
*@return result:一个int数组
*/
私有int[]生成随机数组(int大小){
整数结果[]=新整数[大小];
List ascesdingArray=new ArrayList();
对于(int i=0;i0){
//获取随机索引及其值
int index=new Random().nextInt(最大值);
randomValue=ascesdingArray.get(索引);
//删除从数组中获取的值,使其不会重复
上升方向。移除(索引);
}else if(max==0){
randomValue=ascesdingArray.get(0);
}
返回随机值;
}

首先,您的代码将产生一个IndexOutOfBoundsException,因为您正在迭代一个空列表,使结果列表为空,然后您将从该空列表中选择四项

最后,针对您的具体情况回答您的问题,下一个代码将起作用:

它是您的代码的简化和更正的工作版本(已测试):

List number=Arrays.asList(sum,sum+1,sum+2,sum-1);
收藏。洗牌(数字);
但是1.setText(“+number.get(0));
但是2.setText(“+number.get(1));
但是3.setText(“+number.get(2));
但是4.setText(“+number.get(3));

希望有帮助

您尝试过此代码吗?
List<Integer> number = Arrays.asList(sum, sum + 1, sum + 2, sum - 1);

Collections.shuffle(number);  

but1.setText("" + number.get(0));
but2.setText("" + number.get(1));
but3.setText("" + number.get(2));
but4.setText("" + number.get(3));