JAVA中不同类中List的取值问题,到底哪里错了?

这是Player类,三个属性,CountCards是Card类里面的一个方法具体如下:这是主函数里的调用;MakeUp()方法是给newList赋值;BuidPlayer... 这是Player类,三个属性,CountCards是Card类里面的一个方法具体如下:

这是主函数里的调用;MakeUp()方法是给newList赋值;

BuidPlayer方法可以无视。
但是每次都报错,就是Test()方法这里出错

小弟自学,求各位前辈不吝赐教!
展开
 我来答
匿名用户
2015-01-23
展开全部
空指针异常,JAVA十大低级错误之尾
myCard为null



import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

/**
 * 发牌游戏
 */
public class PokerGame
{
/**
 * 共有1幅扑克牌,不包括大王和小王共52张牌。
 */
public static final int POKER_NUMBER = 52;

/**
 * 特殊分隔符 _
 */
private static final String T = "_";

/**
 * 52张牌<br />
 * 顺序为黑桃、红心、草花、方块
 */
public static final String[] POKERS = 
{
"A" + T + "0", "A" + T + "1", "A" + T + "2", "A" + T + "3",
"2" + T + "0", "2" + T + "1", "2" + T + "2", "2" + T + "3",
"3" + T + "0", "3" + T + "1", "3" + T + "2", "3" + T + "3",
"4" + T + "0", "4" + T + "1", "4" + T + "2", "4" + T + "3",
"5" + T + "0", "5" + T + "1", "5" + T + "2", "5" + T + "3",
"6" + T + "0", "6" + T + "1", "6" + T + "2", "6" + T + "3",
"7" + T + "0", "7" + T + "1", "7" + T + "2", "7" + T + "3",
"8" + T + "0", "8" + T + "1", "8" + T + "2", "8" + T + "3",
"9" + T + "0", "9" + T + "1", "9" + T + "2", "9" + T + "3",
"10" + T + "0", "10" + T + "1", "10" + T + "2", "10" + T + "3",
"J" + T + "0", "J" + T + "1", "J" + T + "2", "J" + T + "3",
"Q" + T + "0", "Q" + T + "1", "Q" + T + "2", "Q" + T + "3",
"K" + T + "0", "K" + T + "1", "K" + T + "2", "K" + T + "3"
};

/**
 * 原始的扑克牌
 */
public static final String[] ORIAL_POKERS = POKERS.clone ();

/**
 * 发到哪张牌 0
 */
public static int currentIndex = 0;

/**
 * 四种花色
 */
public static final String POKER_COLOR = "黑桃" + T + "红心" + T + "草花" + T + "方块";

/**
 * 发牌
 * @param n int 一共几个人玩牌
 * @param results 储存发牌结果的数组
 */
public static void drawPoker (int n, String[][] results)
{
int m = n - 1;
if (n == 0)
{
return;
}
int number = (POKER_NUMBER - currentIndex) / n;
while (number > 0)
{
String current = POKERS[currentIndex++];
String pk = current.split ("\\" + T)[0].trim ();
int col = Integer.parseInt (current.split ("\\" + T )[1].trim ());
if (null == results[m][col])
{
results[m][col] = pk + " ";
}
else 
{
results[m][col] += pk + " ";
}
number--;
}
for ( int i = 0; i < results.length; i++ )
{
for ( int j = 0; j < results[i].length; j++ )
{
if (null == results[i][j])
{
results[i][j] = "";
}
}
}
drawPoker (--n, results);
}

/**
 * 给牌排序
 * @param orialPokers String 原始扑克牌
 * @param temp String[] 每张花色的扑克牌数组
 */
private static void sortPokers ( final String orialPokers, String[] temp )
{
Arrays.sort (temp, new Comparator<String> ()
{
@Override
public int compare ( String o1, String o2 )
{
int index1 = orialPokers.indexOf (o1 + T);
int index2 = orialPokers.indexOf (o2 + T);
if (index1 > index2)
{
return -1;
}
else if (index1 < index2)
{
return 1;
}
else
{
return 0;
}
}
});
}

/**
 * 洗牌
 */
private static void shufflePokers ( String[] POKERS )
{
Collections.shuffle (Arrays.asList (POKERS));
}

public static void main ( String[] args )
{
System.out.print ("输入人数:");

Scanner scanner = new Scanner (System.in);
int n = scanner.nextInt ();
scanner.close ();

String[] pColors = POKER_COLOR.split ("\\" + T );
String[][] results = new String[n][pColors.length];
shufflePokers (POKERS);
drawPoker (n, results);

final String poker = Arrays.toString (ORIAL_POKERS);

System.out.println ("\n输出如下:\n");
for (int i = 0; i < results.length; i++)
{
System.out.println ("第" + ( i + 1 ) + "个人:");

for ( int j = 0; j < results[i].length; j++ )
{
String[] temp = results[i][j].trim ().split ("\\s+");
sortPokers (poker, temp);
System.out.println (pColors[j] + ":" + Arrays.toString (temp).replaceAll ("[\\,\\[\\]]", ""));
}
System.out.println ();
}
}
}
追问
谢谢,1楼和你基本看法一致,只是我是初学者,不太懂问题出在哪里,以及解决办法,并不是要完整的程序。
追答
  1. debug

  2. 查看这个myCard的对象初始化到底在什么地方???

黄健兴4
2015-01-23 · TA获得超过146个赞
知道小有建树答主
回答量:128
采纳率:50%
帮助的人:64.8万
展开全部
Player py = new Player();//调用的是无参构造函数,你仅仅提供有参,故你的myCard没有初始化

报错的地方是27行,也就是myCard是空的,没有初始化,你想打印出空的对象就会报空指针异常。
你可以先打印System.out.println("myCard:"+myCard);//看是不是空的
在Test()方法的第一行加
追问
是的 ,是空的,输出的是null, 这里该如何解决?  如何让myCard里面的值和newList的一样,也就是CountCards传出的值赋给myCard?
追答
你直接完全的贴出代码,贴出全部,你这样截图有点难看懂。
你把myCard赋值之后,就可以调用Test()了。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在一起心就宁静
2015-01-23
知道答主
回答量:25
采纳率:0%
帮助的人:9.1万
展开全部
Card 是个对象,不是list或数组,不能用for循环。还有就是main方法好像只能调static方法吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风_之_愿
2015-01-23
知道答主
回答量:10
采纳率:0%
帮助的人:5.3万
展开全部
py.test()处没有传值
应当改为 py.Test( myCard);

public void Test(List myCard){
.........
}

就对了
追问

会提示这样

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式