在做斗地主发牌案例时 我先定义了54张牌,存储到一个集合里
ArrayList<String>Pai=new ArrayList<>();
ArrayList<String>HuaSe=new ArrayList<>();
ArrayList<String>DaXiao=new ArrayList<>();
public ArrayList<String> maiPai(){
HuaSe.add("♥");
HuaSe.add("♠");
HuaSe.add("♦");
HuaSe.add("♣");
DaXiao.add("2");
DaXiao.add("3");
DaXiao.add("4");
DaXiao.add("5");
DaXiao.add("6");
DaXiao.add("7");
DaXiao.add("8");
DaXiao.add("9");
DaXiao.add("10");
DaXiao.add("J");
DaXiao.add("Q");
DaXiao.add("K");
DaXiao.add("A");
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 13; k++) {
Pai.add(HuaSe.get(i)+DaXiao.get(k));
}
}
Pai.add("小王");
Pai.add("大王");
return Pai;
}
然后写了洗牌和发牌的代码 每个人一共发十七张 最后留三张底牌用叫地主的代码实现
public void xiPai(ArrayList<String> list){
Collections.shuffle(list);
}
public ArrayList<String> faPai(ArrayList<String> A){
ArrayList<String> P =new ArrayList<>();
for (int i1 = 0; i1 < 17; i1++) {
P.add(A.get(i1));
A.remove(i1);
}
return P;
}
public ArrayList<String> jiaoDiZhu(ArrayList<String>A){
ArrayList<String>Q=new ArrayList<>();
for (int i = 0; i < 3; i++) {
Q.add(A.get(i));
A.remove(i);
}
return Q;
}
上面的代码 我都写在一个Poker类里
并在主程序中new了一个DuChang;
然后程序运行 定义了三个ArrayList进行接收扑克;
public static void main(String[] args) {
Poker DuChang = new Poker();
ArrayList<String> lbs = new ArrayList<>();
ArrayList<String> zsy = new ArrayList<>();
ArrayList<String> lzq = new ArrayList<>();
ArrayList<String> XiYang = DuChang.maiPai();
DuChang.xiPai(XiYang);
lbs = DuChang.faPai(XiYang);
System.out.println(lbs);
lzq = DuChang.faPai(XiYang);
System.out.println(lzq);
zsy=DuChang.faPai(XiYang);
System.out.println(zsy);
然后告诉我在最后一个人发牌的时候索引越界异常
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 10 out of bounds for length 10
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:458)
at cn.cm.DouDiZhu.Poker.faPai(Poker.java:46)
at cn.cm.DouDiZhu.YouXi.main(YouXi.java:24)
可是最后一个人发牌的时候还有20张牌在Pai的集合里啊 我只发17张,怎么会越界异常呢 而且在给前两个人发牌的时候为什么没有出现越界异常呢 后来我吧发17 张牌改成发13张 异常消失 想了两个小时 是在想不出来为什么了 求大神解惑