Android随机但重复2次

时间:2017-02-19 22:26:00

标签: android random

我对

的使用有一点疑问

Android Resouce by ID / Change image onClick / no change of imageView

我已经建立了我在这里随机挑选的图像,使用:

        @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

3 个答案:

答案 0 :(得分:2)

由于我理解你的代码,你不会得到每一次图像两次,你会多次得到一些图像,有些图像可能根本不会出现。

如果您实际上不想要随机,请不要使用Random。根据概率定律,您只有两次获得相同图像的机会,而不是确定性。

答案 1 :(得分:1)

您可以使用布尔数组来跟踪已使用的数字(如果索引n为真,则表示已经采用了数字)。

编辑:以下来自vims liu的评论是对的。通过定义索引列表并对列表进行随机播放,可以更加高效地运行时间。

所以最好使用以下解决方案,即使考虑到你的数字很小也不会产生很大的差异。

 List<Integer> indexes = Arrays.asList(1,2,3,4,5,6,7,8,9,10); //...
 Collections.shuffle(indexes);

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

答案 2 :(得分:0)

很抱歉回答迟到,对于初学者问题感到抱歉,我是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);
    }

步骤1:打开图像列表(作为项目),将其用作数组(1,2,3)

步骤2:拥有第二个数组(可以连接1和2),SHUFFLE! : - )

第3步:这是我的问题。如果我做对了,我会从第2步获得一个字符串列表,这些数字我不能用作Int(错误&#34;整数到int&#34;赢了工作) - &gt;结果应该是数字(?)

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

我认为,我的思维错误。

感谢您的帮助, tigercode