作者LaPass (LaPass)
看板AndroidDev
标题Re: [问题] Android新手 随机取值的问题
时间Wed Nov 18 23:18:49 2015
你这个程式有一个架构上的问题
假设你的数据是「两个一组」
那你应该用个class把他包起来,像是
class Point{
Point(int x,int y){this.x=x;this.y=y;}
int x,y;
}
之类的,这个可以简化很多之後处理这个数据组的问题
第二个问题
是排列组合的问题,这排列组合其实不难,但是加上你的数据组的问题之後
等於是把两个简单的问题,变成一个复杂的问题
但如果你把两个数据包成一个class之後
就可以用很简单的方式做出来
<T> <= 这是泛型
public static <T> List<T> getRand(List<T> t,int num){
//装答案用的List
ArrayList<T> ans=new ArrayList<>(num);
//取num个答案
for (int i=0;i<num;i++){
//乱数从列表中取一个
int key=(int)(Math.random()*t.size());
//从列表中移除选中的目标,并放到答案列表中
ans.add(t.remove(key));
}
return ans;
}
所以是这样用
//生成清单
ArrayList<Point> l=new ArrayList<>();
for (int i=0;i<10;i++){
l.add(new Point(i*2,i*2+1));
}
/随机取3个
List<Point> r=getRand(l,3);
//列印答案
for (Point p:r){
System.out.println("("+p.x+","+p.y+")");
}
※ 引述《gcobc12632 (Ted)》之铭言:
: 假设我有一组阵列
: int i[] = {0, 1, 2, 3, 4, 5, 6, 7};
: 且 01为一组、23为一组、45为一组…以此类推,目前总共四组(可能有变动
: 然後我要从这组阵列当中,随机取出 1~4 组数字
: 例1:随机取出 4 组,随机取出 01, 23, 45, 67
: 例2:随机取出 2 组,随机取出 23, 67
: 例3:随机取出 3 组,随机取出 01, 23, 67
: 大概是这样…
: 这该怎麽写呢?卡在这卡好久了
: -
: 原本我的写法是:
: private int random1 = 0; //奇数
: private int random2 = 0; //偶数
: do {
: random1 = Utils.getRandomNumber(1, i.length);
: random2 = Utils.getRandomNumber(0, i.length);
: if (random1 % 2 == 0) {
: random1--;
: }
: if (random2 % 2 != 0) {
: random2++;
: }
: } while (random1 < random2);
: for (int i = random2; i < random1 + 1 ;i++) {
: Log.d("test", i);
: }
: 但是,这样的话没办法得到我想要的结果:
: 因为这只会抓到连号(01, 23, 45),而不会抓到跳号(01, 45, 67)
: 而且机率也不会相同(抓到中间值的机率远大於其他)
: 所以才上来发问,该怎麽写呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.38.65.246
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1447859932.A.8C2.html