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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yuhongzhen 中级黑马   /  2015-11-7 15:21  /  660 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题(需求):我想弄一个扑克牌发牌的方法,类似四个人打升级,没人一次随机得到12张牌,留下底牌6张。但是总是不对,下标出界异常。
是在黑马基础班的课程练习基础上增加的

源码如下:

package test;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Random;
//定义一个扑克类
class Poker{
String color;
String num;
//定义带参数的构造方法
public Poker(String color,String num){
  this.color=color;
  this.num=num;
}
@Override
//重写了toString方法
public String toString() {
  // TODO Auto-generated method stub
  return "{"+this.color+"-"+this.num+"}";
}

}
public class Demo2 {
// static LinkedList pokers=new LinkedList();
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  LinkedList pokers=new LinkedList();
  pokers=createPoker();//创建52张牌的扑克
  pokers.add(new Poker("大王","红色"));
  pokers.add(new Poker("小王","黑色"));//加入大小王
  shufferPoker(pokers);//重新洗牌
  System.out.println("第一人得到的牌是:"+getPoker(pokers)+getPoker(pokers).size());
  //System.out.println(pokers+""+pokers.size());
  System.out.println("第二人得到的牌是:"+getPoker(pokers)+getPoker(pokers).size());
  System.out.println("第三人得到的牌是:"+getPoker(pokers)+getPoker(pokers).size());
  System.out.println("第四人得到的牌是:"+getPoker(pokers)+getPoker(pokers).size());
  System.out.println("底牌是:"+pokers);
}
//创建扑克牌方法
public static LinkedList createPoker(){
  LinkedList list=new LinkedList();
  String[] colors={"黑桃","红桃","梅花","方块"};//花色
  //点数
  String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
  //创建扑克牌52张
  for(int i=0;i<colors.length;i++){
   for(int j=0;j<nums.length;j++){
    list.add(new Poker(colors[i],nums[j]));
   }
  }
  return list;//返回集合
}
//洗牌方法
public static void shufferPoker(LinkedList pokers ){
  Random random=new Random();
  //随机交换两种牌,交换100次
  for(int i=0;i<100;i++){
   int index1=random.nextInt(pokers.size());
   int index2=random.nextInt(pokers.size());
   Poker poker1=(Poker) pokers.get(index1);
   Poker poker2=(Poker) pokers.get(index2);
   pokers.set(index1, poker2);
   pokers.set(index2, poker1);
  }
}
//输出扑克牌方法
public static void showPoker(LinkedList pokers){
  for(int i=0;i<pokers.size();i++){
   System.out.print(pokers.get(i));
   //10张牌一组输出
   if(i%10==9){
    System.out.println();
   }
  }
}


这里是发牌方法,出错是在这里,初学者提问,大神莫笑!!!


//发牌方法,每组12张牌,剩余6张
public static LinkedList getPoker(LinkedList pokers){
  LinkedList list =new LinkedList();
  try{
   for(int i=0;i<12;i++){
    list.add(pokers.get(i));
    pokers.remove(i);
   }
  }catch(IndexOutOfBoundsException e){
   e.getMessage();
  }
  return list;
}
}


输出的结果是:

第一人得到的牌是:[{方块-8}, {方块-6}, {梅花-K}, {梅花-2}, {方块-K}, {黑桃-J}, {方块-A}, {红桃-5}, {方块-4}, {黑桃-K}, {黑桃-4}, {黑桃-2}]12
第二人得到的牌是:[{方块-3}, {梅花-6}, {红桃-7}, {小王-黑色}, {方块-7}, {梅花-4}, {红桃-Q}, {红桃-3}, {红桃-A}, {方块-5}, {梅花-J}, {方块-Q}]9
第三人得到的牌是:[{方块-10}, {方块-J}, {黑桃-7}, {黑桃-3}, {黑桃-10}]2
第四人得到的牌是:[{梅花-3}]1
底牌是:[]


1 个回复

倒序浏览
终于想到一个解决的办法,使用ArrayList可以解决问题,但是还是编译有问题,但是可以正常输出了。请大神指教!!!

输出结果:

第一个人的牌--[{梅花J}, {红桃7}, {红桃9}, {红桃Q}, {黑桃K}, {方块7}, {梅花10}, {黑桃6}, {方块K}, {梅花6}, {方块J}, {红桃A}]
第二个人的牌--[{方块4}, {方块6}, {梅花5}, {梅花2}, {梅花A}, {红桃3}, {黑桃5}, {方块5}, {黑桃9}, {梅花K}, {梅花4}, {红桃8}]
第三个人的牌--[{梅花3}, {黑桃A}, {红桃J}, {黑桃3}, {梅花7}, {红桃6}, {红桃10}, {红桃5}, {方块8}, {黑桃8}, {梅花9}, {黑桃Q}]
第四个人的牌[--{梅花Q}, {方块10}, {黑桃J}, {方块A}, {黑桃4}, {方块Q}, {黑桃10}, {红桃K}, {黑桃2}, {方块9}, {方块2}, {红桃4}]
底牌--[{黑桃7}, {方块3}, {梅花8}, {红桃2}]



源码如下:

package com.yuhongzhen;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;


//扑克类
class Poker{
       
        String  color; //花色
       
        String num;        //点数
        //扑克类初始化参数
        public Poker(String color, String num) {
                super();
                this.color = color;
                this.num = num;
        }

        //重写toString方法
        @Override
        public String toString() {
                return "{"+color+num+"}";
        }
}

public class Demo2 {
       
        public static void main(String[] args) {
                ArrayList pokers = createPoker();
                shufflePoker(pokers);
                //showPoker(pokers);
                /*System.out.print("第一个人的牌--");
                getPoker(pokers);
                System.out.println();
                System.out.print("第二个人的牌--");
                getPoker(pokers);
                System.out.println();
                System.out.print("第三个人的牌--");
                getPoker(pokers);
                System.out.println();
                System.out.print("第四个人的牌--");
                getPoker(pokers);
                System.out.println();
                System.out.print("底牌--");
                System.out.println(pokers);
                System.out.println(pokers.size());*/
               
                System.out.println("第一个人的牌"+getPoker(pokers));
                System.out.println("第二个人的牌"+getPoker(pokers));
                System.out.println("第三个人的牌"+getPoker(pokers));
                System.out.println("第四个人的牌"+getPoker(pokers));
                System.out.println("底牌"+pokers);
               
        }
       
       
        //洗牌的功能
        public static void shufflePoker(ArrayList pokers){
                //创建随机数对象
                Random random = new Random();
                for(int i = 0 ; i <100; i++){
                        //随机产生两个索引值
                        int index1 = random.nextInt(pokers.size());
                        int index2 = random.nextInt(pokers.size());
                        //根据索引值取出两张牌,然后交换两张牌的顺序
                        Poker poker1 = (Poker) pokers.get(index1);
                        Poker poker2 = (Poker) pokers.get(index2);
                        pokers.set(index1, poker2);
                        pokers.set(index2, poker1);
                }
               
        }
       
       
       
        //显示扑克牌
        public static void showPoker(ArrayList pokers){
                for(int i = 0 ; i<pokers.size() ; i++){
                        System.out.print(pokers.get(i));
                        //换行
                        if(i%10==9){
                                System.out.println();
                        }
                }
       
        }
       
       
       
       
        //生成扑克牌的方法
        public static ArrayList createPoker(){
                //该集合用于存储扑克对象。
                ArrayList list = new ArrayList();               
                //定义数组存储所有的花色与点数
                String[] colors = {"黑桃","红桃","梅花","方块"};
                String[] nums = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
                for(int i = 0 ; i < nums.length ; i++){
                        for(int j = 0 ; j<colors.length ; j++){
                                list.add(new Poker(colors[j], nums[i]));
                        }
                }
                return list;
        }
        //发牌方法
        public static ArrayList getPoker(ArrayList pokers){
                ArrayList list=new ArrayList();
                Iterator itr=pokers.iterator();
                for(int i=0;i<12;i++){
                        list.add(i, itr.next());
                        itr.remove();
                }
                return list;
                /*Iterator it=list.iterator();
                while(it.hasNext()){
                        System.out.print(it.next());
                }
                */
        }
       
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马