自己练习写了一个...有问题...(问号处)
class Pai {
char c ; //花色
int n ; //面值
Pai() {
}
public String toString(){
return ""+c+n+" ";
}
}public class FaiPai {
Pai[] total = new Pai[52]; //52张牌,无大小鬼
ArrayList[] player = new ArrayList[4]; //四个玩家
FaiPai() {
//total = new Pai[52];
for (int i=0;i<52;i++)
total[i] = new Pai(); for(int i = 0;i<4;i++) {
for (int j = 0;j<13;j++) {
switch(i){
case 0: total[i*13+j].c = 'f'; //方片
total[i*13+j].n = j+1;break;
case 1: total[i*13+j].c = 'c';//草花
total[i*13+j].n = j+1;break;
case 2: total[i*13+j].c = 'h';//黑桃
total[i*13+j].n = j+1;break;
case 3: total[i*13+j].c = 'r';//红桃
total[i*13+j].n = j+1;break;
}
}
}
}
public void send() { //发牌
int numberPai = 52 ;
int k = 0;
while(numberPai-->0) {
int j = (int)(Math.random()*52);
player[k].add(total[j]); ??????????//提示这个地方空指针异常,偶看不出来
k++;
if (k == 4)
k = 0;
total[j] = total[numberPai];
}
}
public static void main(String[] args) {
FaiPai one = new FaiPai();
System.out.println("开始发牌 :");
one.send();
for (int i=0;i<4;i++) {
System.out.println("玩家"+i+"的牌 :");
for(int j = 0;j<one.player[i].size();j++)
System.out.print(one.player[i]);
}
}
}问题就在那里了,我看不出来有什么指针异常
class Pai {
char c ; //花色
int n ; //面值
Pai() {
}
public String toString(){
return ""+c+n+" ";
}
}public class FaiPai {
Pai[] total = new Pai[52]; //52张牌,无大小鬼
ArrayList[] player = new ArrayList[4]; //四个玩家
FaiPai() {
//total = new Pai[52];
for (int i=0;i<52;i++)
total[i] = new Pai(); for(int i = 0;i<4;i++) {
for (int j = 0;j<13;j++) {
switch(i){
case 0: total[i*13+j].c = 'f'; //方片
total[i*13+j].n = j+1;break;
case 1: total[i*13+j].c = 'c';//草花
total[i*13+j].n = j+1;break;
case 2: total[i*13+j].c = 'h';//黑桃
total[i*13+j].n = j+1;break;
case 3: total[i*13+j].c = 'r';//红桃
total[i*13+j].n = j+1;break;
}
}
}
}
public void send() { //发牌
int numberPai = 52 ;
int k = 0;
while(numberPai-->0) {
int j = (int)(Math.random()*52);
player[k].add(total[j]); ??????????//提示这个地方空指针异常,偶看不出来
k++;
if (k == 4)
k = 0;
total[j] = total[numberPai];
}
}
public static void main(String[] args) {
FaiPai one = new FaiPai();
System.out.println("开始发牌 :");
one.send();
for (int i=0;i<4;i++) {
System.out.println("玩家"+i+"的牌 :");
for(int j = 0;j<one.player[i].size();j++)
System.out.print(one.player[i]);
}
}
}问题就在那里了,我看不出来有什么指针异常
for (int i=0;i<4;i++)
player[i] = new ArrayList();
你的Arraylist没有初始化
另外你发牌也不对
应该是这样public void send() { //发牌
int numberPai = 52 ;
int k = 0;
Pai tempCard;
while(numberPai-->0) {
int j = (int)(Math.random()*numberPai);
//System.out.println(numberPai+": "+j);
player[k].add(total[j]);
k++;
if (k == 4) k = 0;
//System.out.println(k);
tempCard=total[j];
total[j] = total[numberPai];
total[numberPai]=tempCard;
}
for(int j = 0;j<one.player[i].size();j++)
也是多余的
public void send() { //发牌
int numberPai = 52 ;
int k = 0;
while(numberPai-->0) {
int j = (int)(Math.random()*numberPai);
player[k].add(total[j]);
k++;
if (k == 4)
k = 0;
total[j] = total[numberPai];
}
----------------------------------------~~~
java就不要说是指针异常了,而是Null Point Exception~