JBTALKS.CC

标题: 用java 写一个program 关于解决游戏分组的问题 [打印本页]

作者: 怪佬独行侠    时间: 2013-12-12 10:14 PM
标题: 用java 写一个program 关于解决游戏分组的问题
我目前会基本的java coding
最近办活动玩游戏想要试试看写个 program 帮忙有效的分组
program 的要求如下:
因为是采用PK 形式所以一个游戏都是两组进行
多少个游戏,多少个场地都是由user 输入
我想做到的是在这个program 可以random 出来每组遇到的对手,但是不能重复
游戏场地设置好几个地方,只是每组到达的次序不同,一次一个地点就只能两组,而且不能重复
谁能教我应该从哪里开始?
我尝试在random 那部分开始可是碰到了很多问题,因为我random 出来的号码会有重复,不知道要怎样去解决重复的问题
求各位的帮忙~小的感激不尽~
作者: Ah Zhe    时间: 2013-12-13 02:18 PM
不懂你要什么,单纯回答你“random不要重复”的问题,把random出来的号码add进arraylist,下一次random时,检查arraylist里面没有这个号码,不然就重新random过
作者: slay_alex92    时间: 2013-12-16 11:08 AM
本帖最后由 slay_alex92 于 2013-12-16 11:11 AM 编辑

我不太知道你的program的架構要怎麼寫
不過照你說的方式
我大概會用以下的方法
  1. String[] player = new String[8]; //做一個array,來放player,length自訂
  2. int[] list = new int[8]//用來儲存已經出現過的號碼,length跟上一個array一樣

  3. int remain = player.length; //取得還剩下多少player還沒被random到
  4. int listIndex = 0; //list的index

  5. public String randomPlayer () //回return random出來的player的名字
  6. {
  7.     while(true)
  8.     {
  9.         int n = (int)(Math.random() * remain);
  10.         boolean check = false; //用來判斷這個random出來的號碼之前有沒有出現過
  11.         for(int i = 0; i < list.length; i++)
  12.         {
  13.             if(n == list[i])
  14.                 check = true; //如果出現過,把check改成true
  15.         }
  16.         if(! check) //如果還沒有出現過
  17.         {
  18.             list[listIndex] = n; //把這個數字加到list裡面,說明他這次出現過了,下次不要再選到
  19.             listindex++;
  20.             return player[n]; //return random出來的player的String
  21.         }
  22.     }
  23. }
复制代码
因為我沒有你的code,所以沒有辦法測試哦~ 不過我寫的應該沒錯
另外這個方法是我臨時想出來的,有點複雜,說不定用ArrayList可以更快做出來


作者: Super-Tomato    时间: 2013-12-20 04:26 PM
可以給你個建議,定義出一個 integer array 之後,使用循環隨機對換 value 值(team[a] <=> team[b]). 循環完畢即可得到不重復的亂數排列了。




欢迎光临 JBTALKS.CC (https://www.jbtalks.cc/) Powered by Discuz! X2.5