看板 AndroidDev 關於我們 聯絡資訊
你這個程式有一個架構上的問題 假設你的數據是「兩個一組」 那你應該用個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://www.ptt.cc/bbs/AndroidDev/M.1447859932.A.8C2.html