为了账号安全,请及时绑定邮箱和手机立即绑定

下面的代码这一行 “handCards.add(hC);” 出现空指针异常。

下面的代码这一行 “handCards.add(hC);” 出现空指针异常。

Meng7y 2017-10-06 21:12:54
package kuailedoudizhu;import java.util.ArrayList;import java.util.Scanner;/** * 快乐比大小的玩家类 * Meng7y * 2017年10月6日 19:21:43 */public class Player { String name = null; ArrayList<String> handCards = null; String maxHC = null; int count = 0; public void setName() { System.out.println("欢迎您进入快乐比大小,请输入您的游戏昵称:"); Scanner info = new Scanner(System.in); name = info.next(); } public void contrast() { for(int i = 0; i < 3; i++) { int a = (int)(Math.random()*51); System.out.println(a); if(count < a) { count = a; } String hC = Card.deck.get(a); handCards.add(hC); } maxHC = Card.deck.get(count); } }
查看完整描述

4 回答

?
Developer_Zuck

TA贡献112条经验 获得超42个赞

我刚刚看了,并且运行了一下,问题在Player里面,你将第三行代码改改就可以了,估计你一看就明白了。

public class Player {

String name = null;

ArrayList<String> handCards = new ArrayList<String>();//改动的地方


查看完整回答
1 反对 回复 2017-10-08
  • Meng7y
    Meng7y
    哈哈。真的,这样的小细节,关键时候要人命。头都大了。handCards并没有实例对象,一直等于空,所以怎么都会出现空指针。o(︶︿︶)o 唉,想了了一周的问题,看来有问题还是需要经常问大神,不能自己苦想。
  • Developer_Zuck
    Developer_Zuck
    第一次以为一眼就看到错误了,有些尴尬哈。所以排错不能着急,积累积累经验就好了。
  • Meng7y
    Meng7y
    看样子你不是新手吧
?
onemoo

TA贡献883条经验 获得超454个赞

因为 handCards 一直是空指针啊!

handCards 的初值是 null,你一直没给它赋予适当的对象,随后就在 contrast() 里调用 handCards.add,当然会出错。

查看完整回答
1 反对 回复 2017-10-07
  • Meng7y
    Meng7y
    handCards.add()这个方法的确是添加内容啊。没有内容,使用add方法,添加 。我水平不高,你觉得我这个需要怎么改才可以不抱空指针。我去试一试
  • onemoo
    onemoo
    确实,你还没理解Java中的变量。Java中变量是对某个对象的“引用”——“引用”是常用的术语。你可以理解为:变量可以“表示”该类型的一个对象。通过变量可以操作这个对象。而变量也可以不引用任何对象,也就是变量为null——即空指针。但你不能通过这样的变量来进行操作(毕竟它谁也没代表呀),如果你试图使用null变量,就会发生空指针异常。 那么,ArrayList<String> handCards = null 你声明了一个ArrayList<String>类型的变量handCards,并且让它为null变量,也就是它没有引用任何实际对象!到后面你想通过handCards调用add方法就出错了。 解决办法是你必须先让handCards引用一个实际的对象。对于这样的类型,我们可以new一个对象出来,然后让handCards引用它:handCards=new ArrayList<String>()。这样让handCards引用实际对象后,才能操作handCards。
  • onemoo
    onemoo
    顺便说下,虽然你定义的String name和String maxHC这两个变量一开始也是null,但在后面的其他语句中为它们赋予了值,也就是让它们引用了某个对象。所以再使用这两个变量才没有出现空指针错误。
点击展开后面4
?
Developer_Zuck

TA贡献112条经验 获得超42个赞

这里有一个问题,当i取值0的时候会出现什么问题?
你上面刚刚是i也就是0
紧接着你就打印的是1
这二者不是矛盾的吗?
输出语句也应该是i,保持同步。

查看完整回答
1 反对 回复 2017-10-06
  • Meng7y
    Meng7y
    感谢提醒,不过问题没有解决:o(︶︿︶)o
  • Developer_Zuck
    Developer_Zuck
    能把你的Car类的代码发给我看看吗?没仔细看你的问题,跟你说个对不起,一定帮你解决,不图什么,因为这是我的失误
  • Meng7y
    Meng7y
    public class Player { String name = null; ArrayList<String> handCards = null; String maxHC = null; int count = 0; public void setName() { System.out.println("欢迎您进入快乐比大小,请输入您的游戏昵称:"); Scanner info = new Scanner(System.in); name = info.next(); } public void contrast() { for(int i = 0; i < 3; i++) { int a = (int)(Math.random()*51); System.out.println(a); if(count < a) { count = a; } String hC = Card.deck.get(a); handCards.add(hC); } maxHC = Card.deck.get(count); } } 这是Card类
点击展开后面4
?
Its_forever

TA贡献361条经验 获得超328个赞

handPs1.add(handPs.get(i));

handPs集合里面还没有值,取的时候报错了

查看完整回答
反对 回复 2017-10-06
  • Meng7y
    Meng7y
    以前那个整个思路都是错的,上面是我最新改进的代码,可是还是会出现空指针异常,帮我看看
  • 4 回答
  • 0 关注
  • 2350 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信