Android随机但重复2次

Android随机但重复2次,android,random,Android,Random,我有一个关于这个词用法的小问题 我已在此处建立随机选取的图像,使用: @Override public void onClick(View v) { Log.d("MYAPP", "Like-Button clicked"); /*imageViewMeasurement.setImageResource(R.drawable.p13);*/ TypedArray images = g

我有一个关于这个词用法的小问题

我已在此处建立随机选取的图像,使用:

        @Override
        public void onClick(View v) {

            Log.d("MYAPP", "Like-Button clicked");

            /*imageViewMeasurement.setImageResource(R.drawable.p13);*/

            TypedArray images = getResources().obtainTypedArray(R.array.images_primes);
            int chosenImageNumber = (int) (Math.random() * images.length());

            // setImageResource to the random chosenImageNumber
            imageViewMeasurement.setImageResource(images.getResourceId(chosenImageNumber, R.color.colorPrimaryDark));
            images.recycle();

            // Confirmation if the random generator picked a Number from the array
            String chosenImageNumberTest = String.valueOf(chosenImageNumber);
            Log.d("MYAPP Choice Number", chosenImageNumberTest);
        }
这将贯穿40个图像的数组,并将重复一次。因此,每个图像将显示两次(?)

这就是问题所在: 当我使用一个40张图片的池随机抽取80张图片时,我是每一张图片都抽取两次(带封面抽取),还是每一次都从这40张图片中随机抽取一张(抽取而不替换),所以reult可以是1号4次,38号0次?是否有其他功能可防止此类行为的发生

最好的,
tigercode

据我所知,您不会两次获得每个图像,您会多次获得一些图像,有些图像甚至可能根本不会出现

如果你实际上不想要随机,就不要使用随机。根据概率定律,你只可能获得两次相同的图像,这不是确定的。

你可以使用一个布尔数组来跟踪哪些数字已经被使用过(如果索引n为真,这意味着该数字已经被使用过,例如)

编辑:下面来自vims liu的评论是正确的。从运行时的角度来看,定义一个索引列表并洗牌该列表要有效得多

因此,最好使用以下解决方案,即使考虑到您的数字非常小,这不会产生很大的差异

 List<Integer> indexes = Arrays.asList(1,2,3,4,5,6,7,8,9,10); //...
 Collections.shuffle(indexes);
List index=Arrays.asList(1,2,3,4,5,6,7,8,9,10);/。。。
集合。无序排列(索引);

然后,您可以遍历索引列表,并使用当前编号作为当前索引。

很抱歉回答得太晚,也很抱歉回答了一个初学者的问题,我是android开发新手

我更改了我的代码(并按照我的理解编写了注释):

    @Override
    public void onClick(View v)

        Log.d("MYAPP", "Like-Button clicked");

        // 1. Get the array of images in the images_primes XML-List AS int (number of every image in array)
        TypedArray images = getResources().obtainTypedArray(R.array.images_primes);

        // 2. Takes an array-list and shuffles it
        List<Integer> indexes = Arrays.asList(1,2,3,4,5,6,7,8,9,10); //...
        Collections.shuffle(indexes);

        // Great, it shuffles! ;-)
        Log.d("MYAPP", indexes);

        // 3. takes the number from the shuffled image list
        int chosenImageNumber = (int) (indexes);


        // 2. Old code: picks a number out of the image array from 1. / commented out
        //int chosenImageNumber = (int) (Math.random() * images.length());

        // 4. setImageResource to the random chosenImageNumber
        imageViewMeasurement.setImageResource(images.getResourceId(chosenImageNumber, R.color.colorPrimaryDark));
        images.recycle();

        // Confirmation if the random generator picked a Number from the array
        String chosenImageNumberTest = String.valueOf(chosenImageNumber);
        Log.d("MYAPP Choice Number", chosenImageNumberTest);
    }
@覆盖
公共void onClick(视图v)
Log.d(“MYAPP”,“单击类似按钮”);
//1.将images_primes XML列表中的图像数组获取为int(数组中每个图像的数量)
TypedArray images=getResources().obtainTypedArray(R.array.images\u primes);
//2.获取数组列表并将其洗牌
列表索引=数组.asList(1,2,3,4,5,6,7,8,9,10);/。。。
集合。无序排列(索引);
//太好了,它可以洗牌!;-)
Log.d(“MYAPP”,索引);
// 3. 从无序图像列表中获取数字
int chosenImageNumber=(int)(索引);
// 2. 旧代码:从图像数组中从1中选取一个数字。/注释掉
//int chosenImageNumber=(int)(Math.random()*images.length());
// 4. 将ImageResource设置为随机选择的ImageNumber
setImageResource(images.getResourceId(chosenImageNumber,R.color.colorPrimaryDark));
image.recycle();
//确认随机生成器是否从数组中拾取了一个数字
String chosenImageNumberTest=String.valueOf(chosenImageNumber);
Log.d(“MYAPP选择编号”,chosenImageNumberTest);
}
步骤1:打开图像列表(作为项目),将其用作数组(1,2,3)

第2步:拥有第二个数组(可能连接1和2),随机播放!:-)

第三步:这是我的问题。如果我做对了,我会从步骤2中得到一个字符串列表,其中的数字不能用作Int(错误“Integer to Int”不起作用)->结果应该是一个数字(?)

步骤4:应使用3中的数字从1中的列表/数组中选择图像

我想,我这边有一个思维错误

提前感谢您的帮助, tigercode

如果获取的数字太多,此代码可能会变慢(可能会挂起一段时间)(例如:1-10被获取,只剩下11个,随机生成器可能在生成11个之前生成1-10次),最好是将项目列表随机放置,如果生成该项目,将其从列表中删除,重新输入随机种子以考虑新的列表大小,以避免索引超出范围异常