A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 彼岸花 于 2012-10-17 11:23 编辑

用集合给扑克牌洗牌
class Test
{
        public static void main(String[] args)
        {
                String[] numall={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
                String[] hsall={"黑桃","红桃","方块","梅花"};
                List li=new ArrayList();
                for(int i=0;i<4;i++){
                        for(int j=0;j<13;j++){
                               Poker po=new Poker(hsall,numall[j]);
                  li.add(po);
                        }
                        
                }
                Random ran=new Random();
                List li1=li.subList(0,26);  
                List li2=li.subList(26,52);          //把集合分成两个li1和li2,每个的元素各26个
                for(int l=0;l<100;l++){
                        int i=ran.nextInt(26);
                        int j=ran.nextInt(26);
                        int k=ran.nextInt(26);   
                        Object p1=li1.get(i);        //从li1中随机位置取一个元素p1
                        Object p2=li2.set(j,p1);       //把p1和li2中随机位置的p2交换
                        li1.remove(p1);                       //把p1从原集合li1移除
                        li1.add(k,p2);                   //把p2插入li1随机位置

                }
                List list=new ArrayList();
                list.addAll(li1);
                list.addAll(li2);
                System.out.println(list);
        }
}
class Poker
{
        String num;
        String hs;
        public Poker(String hs,String num){
                this.num=num;
                this.hs=hs;
        }
        public String toString(){
                return hs+num;
        }
}
编译时没错,运行时报异常:
Exception in thread "main" java.util.ConcurrentModificationException
已知问题出在红字部分
求解决

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
  1. package itheima.com.liang;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;

  5. public class TestPuker {

  6.         /**
  7.          * @param args
  8.          */
  9.         public static void main(String[] args) {
  10.                 // TODO Auto-generated method stub
  11.                 //创建扑克
  12.                 Puker p=new Puker();
  13.                 List<Card> list=p.getCards();//获取纸牌
  14.                 //洗牌之前
  15.                 System.out.println("洗牌之前:");
  16.                 for(Card c:list){
  17.                         System.out.println(c);
  18.                 }
  19.                 //洗牌之后
  20.                 System.out.println("洗牌之后");
  21.                 list=xiPai(list);
  22.                 for(Card c : list)
  23.                 {
  24.                         System.out.println(c);
  25.                 }
  26.         }
  27.         private static List<Card> xiPai(List<Card> list){
  28.                 List<Card> temp=null;
  29.                 if (list!=null)
  30.                 {
  31.                         temp=new ArrayList<Card>();
  32.                         Random rand=new Random();
  33.                        
  34.                         while(list.size()!=0){
  35.                                 //循环抽出一张牌放到临时集合temp中
  36.                                 Card c=list.remove(rand.nextInt(list.size()));
  37.                                 temp.add(c);
  38.                         }
  39.                 }
  40.                 return temp;
  41.         }
  42. }


  43. class Puker{
  44.         public Puker(){}
  45.         private List<Card> puker=new ArrayList<Card>();
  46.         public List<Card> getCards(){
  47.                 return puker;
  48.         }
  49.         //初始化纸牌
  50.         {
  51.                 for(int i=1;i<=13;i++){
  52.                         for(int j=1;j<=4;j++)
  53.                         {
  54.                                 Card c=new Card(i,j);
  55.                                 puker.add(c);
  56.                         }
  57.                 }
  58.                 puker.add(new Card(14,0));
  59.                 puker.add(new Card(14,1));
  60.         }
  61. }
  62. class Card{
  63.         private int Ds;
  64.         private int Hs;
  65.        
  66.         private String[] hs={"黑桃","红桃","梅花","方块"};
  67.         private String[] ds={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
  68.         public Card(int ds,int hs){
  69.                 this.setDs(ds);
  70.                 this.setHs(hs);
  71.         }
  72.        
  73.         public String toString(){
  74.                 if (Ds==14&&Hs==0)
  75.                         return "大王";
  76.                 else if(Ds==14&&Hs==1)
  77.                         return "小王";
  78.                 else
  79.                         return hs[Hs-1]+ds[Ds-1];
  80.         }
  81.        
  82.        
  83.         /**
  84.          * @return the ds
  85.          */
  86.         public int getDs() {
  87.                 return Ds;
  88.         }
  89.         /**
  90.          * @param ds the ds to set
  91.          */
  92.         public void setDs(int ds) {
  93.                 Ds = ds;
  94.         }
  95.         /**
  96.          * @return the hs
  97.          */
  98.         public int getHs() {
  99.                 return Hs;
  100.         }
  101.         /**
  102.          * @param hs the hs to set
  103.          */
  104.         public void setHs(int hs) {
  105.                 Hs = hs;
  106.         }
  107.        
  108.        
  109. }
复制代码
这是我写的。请指教

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我的异常出在哪?
回复 使用道具 举报
本帖最后由 马镱洵 于 2012-10-14 22:45 编辑
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Random;

  4. public class PokerTest {
  5.         public static void main(String[] args) {
  6.                 String[] numall = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",
  7.                                 "Q", "K", "A" };
  8.                 String[] hsall = { "黑桃", "红桃", "方块", "梅花" };
  9.                 List li = new ArrayList();
  10.                 for (int i = 0; i < 4; i++) {
  11.                         for (int j = 0; j < 13; j++) {
  12.                                 Poker po = new Poker(hsall[i], numall[j]);
  13.                                 li.add(po);
  14.                         }

  15.                 }
  16.                 Random ran = new Random();

  17.                 // List li1 = li.subList(0, 26);
  18.                 // List li2 = li.subList(26, 52); // 把集合分成两个li1和li2,每个的元素各26个

  19.                <FONT color=red> // 注意了, 通过li.subList()方法返回的是li的一个子List,不能对子List调用add()与remove()
  20.                 // 方法,否则就会抛出并发异常.所以要对List进行add与remove操作的话,就要重新构造集合 对象.
  21. </FONT>                List li1 = new ArrayList(li.subList(0, 26));
  22.                 List li2 = new ArrayList(li.subList(0, 26));                for (int l = 0; l < li1.size(); l++) {
  23.                         int i = ran.nextInt(26);
  24.                         int j = ran.nextInt(26);
  25.                         int k = ran.nextInt(26);
  26.                         Object p1 = li1.get(i); // 从li1中随机位置取一个元素p1
  27.                         Object p2 = li2.set(j, p1); // 把p1和li2中随机位置的p2交换
  28.                         li1.remove(p1); // 把p1从原集合li1移除
  29.                         li1.add(k, p2); // 把p2插入li1随机位置
  30.                 }
  31.                 List list = new ArrayList();
  32.                 list.addAll(li1);
  33.                 list.addAll(li2);
  34.                 System.out.println(list);
  35.         }
  36. }

  37. class Poker {
  38.         String num;
  39.         String hs;

  40.         public Poker(String hs, String num) {
  41.                 this.num = num;
  42.                 this.hs = hs;
  43.         }

  44.         public String toString() {
  45.                 return hs + num;
  46.         }
  47. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
马镱洵 发表于 2012-10-14 22:35

多谢你的指导
回复 使用道具 举报
  1. import java.util.ArrayList;
  2. import java.util.*;
  3. class TestPoker
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 String[] numall={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
  8.                 String[] hsall={"黑桃","红桃","方块","梅花"};
  9.                 List li=new ArrayList();
  10.                                 List list=new ArrayList();
  11.                 for(int i=0;i<4;i++){
  12.                         for(int j=0;j<13;j++){
  13.                                Poker po=new Poker(hsall[i],numall[j]);
  14.                   li.add(po);
  15.                         }
  16.                         
  17.                 }
  18.                                 //System.out.println(li);
  19.                 Random ran=new Random();
  20.                 List li1=li.subList(0,26);  
  21.                 for(int l=0;l<10;l++)
  22.                                         {
  23.                                           
  24.                         int i=ran.nextInt(26);
  25.                         int j=ran.nextInt(26);
  26.                         Object p1=li1.get(i);        //从li1中随机位置取一个元素p1
  27.                         Object p2=li1.set(j,p1);       //把p1和li2中随机位置的p2交换
  28.                                                 li1.remove(i);                       //把p1从原集合li1移除
  29.                                                 li1.add(j,p2);                 //把p2插入li1随机位置                                                    
  30.                                  }
  31.                                          list.addAll(li1);
  32.                                          List li2=li.subList(26,52);          //把集合分成两个li1和li2,每个的元素各26个
  33.                            for(int l=0;l<100;l++)
  34.                                 {
  35.                                             int i=ran.nextInt(26);
  36.                         int j=ran.nextInt(26);
  37.                                             Object p3=li2.get(i);
  38.                                                 Object p4=li2.set(j,p3);
  39.                                                 li2.remove(i);
  40.                                                 li2.add(j,p3);
  41.                                 }
  42.                                 list.addAll(li2);
  43.                 System.out.println(list);
  44.         }
  45. }
  46. class Poker
  47. {
  48.         String num;
  49.         String hs;
  50.         public Poker(String hs,String num){
  51.                 this.num=num;
  52.                 this.hs=hs;
  53.         }
  54.         public String toString(){
  55.                 return hs+num;
  56.         }
  57. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马