"main" java.lang.NullPointerException

//四、用Java实现掷骰子游戏:丢下两个骰子,若分值的总值为7点,则赢;否则输。
//编写步骤如下:
//(1)首先定义Dice类。
//提示:Dice类表示一个骰子有faceValue一个属性,为整型;
//有一个roll()方法和getFaceValue()。
//roll()方法功能使faceValue属性设置为1~6中的一个随机值,没有返回值。
//getFaceValue()方法功能为取出faceValue值。
//Math.random()方法是求随机数,返回值为double类型,值的范围为0.0~1.0
//(2)然后定义DiceGame类。
//提示:DiceGame类有dice1、dice2两个属性,类型分别为Dice类类型,有一个play()方法。
//play()方法返回一个布尔类型,true表示丢下两个骰子分值的总值为7点,否则为false。
//(3)最后编写一个测试类Test,对上面定义的类进行测试。
//提示: main()方法中产生DiceGame对象,执行play()方法后显示出输赢。
class Dice{
private int faceValue;
public void roll(){
faceValue=(int)(6*Math.random());
}
public int getFaceValue(){
return faceValue;
}
}
class DiceGame extends Dice{
private Dice dice1;
private Dice dice2;
public boolean play(){
dice1.roll();
dice2.roll();
if(dice1.getFaceValue()+dice2.getFaceValue()==7){
System.out.println("赢了!");
return true;
}
else {
System.out.println("输了!");
return false;
}
}
}
public class Test{
public static void main(String[] args){
DiceGame one=new DiceGame();
one.play();
}
}
请问大神错在哪?
错在27和42行

3个回答

main方法中执行one.play(); 但是你的play()方法里执行了dice1.roll()和dice2.roll(),可是你现在还没有实例化出dice1和dice2两个对象啊,肯定报空指针异常了图片说明

weixin_35671395
CJHCW 回复viewgroup: +1咯
接近 4 年之前 回复
viewgroup
viewgroup 回复weixin_35671395: 在DiceGame的构造方法里面初始化啊,提示你一个问题,你的faceValue的值永远不可能为6,因为Math.random()方法永远不会取值为1,所以6*Math.random()方法永远不可能等于6,而且int强转型是只保留整数位。也就是说,你的值就算是5.99999999,也只会保留5.所以,你要向上取整。
接近 4 年之前 回复
weixin_35671395
CJHCW 我知道了,谢啦
接近 4 年之前 回复
weixin_35671395
CJHCW 要怎么改呢?
接近 4 年之前 回复

faceValue = new Random().nextInt(6) + 1; 这样faceValue的值就是1~6的随机数

看来已经解决了
空指针异常是较容易解决的问题
你找到为空的参数,然后看上一步下一步,传参是否丢失什么的就能解决问题

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问