我对
的使用有一点疑问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
答案 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