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次),最好是将项目列表随机放置,如果生成该项目,将其从列表中删除,重新输入随机种子以考虑新的列表大小,以避免索引超出范围异常