2013-11-23 139 views
1

因此,我製作了一個應該創建死亡的模具類,然後讓我滾動它們,拉取它們的值和邊數。我現在的問題是,我不能在測試期間擲骰子,因爲它拋出了NullPointerException。在課堂測試中出現NullPointerException

下面是模具類代碼:

package com.catalyse.die; 

import java.util.Random; 

public class Die 
{ 
    // instance variables 
    private static int dieNum = 0; 
    private int myDieValue; 
    private int myDieSides; 
    private Random rand; 

    // Dice Class Constructors 


    public Die() 
    { 
     dieNum++; 
     this.myDieValue = 1; 
     this.myDieSides = 4; 
    } 


    public Die(int numSides) 
    { 
     if ((numSides < 4) || (numSides > 100)) { 
      System.out.println("Error! You cannot have more than 100 sides or less than four!"); 
      System.exit(0); 
     } 
     else { 
      myDieSides = numSides; 
      myDieValue = 1; 
     } 
    } 

    // getter methods 


    public int getDieSides() 
    { 
     System.out.println(myDieSides); 
     return 0; 
    } 


    public int getDieValue() 
    { 
     System.out.println(myDieValue); 
     return 0; 
    } 

    // setter methods 

    private void setDieSides(int newNumSides) 
    { 
     myDieSides = newNumSides; 
    } 

    public void rollDie() 
    { 
     myDieValue = (rand.nextInt(myDieSides) + 1); 
    } 

    // other methods 

    public void printDie(int dieNum) 
    { 
     if (dieNum == 1) { 
      System.out.println("Die Value: "+myDieValue); 
     } 
     else { 
      System.out.println("Die "+dieNum+" Value: "+myDieValue); 
     } 
    } 
} 

下面是測試類。

package com.catalyse.die; 

public class TestDieClass 
{ 
    public static void main(String [] args) 
    { 
     Die One = new Die(); 
     Die Two = new Die(50); 
     Die Three = new Die(99); 

     One.getDieSides(); 
     One.getDieValue(); 

     Two.getDieSides(); 
     Two.getDieValue(); 

     Three.getDieSides(); 
     Three.getDieValue(); 

     One.rollDie(); 
     Two.rollDie(); 
     Three.rollDie(); 

     One.getDieValue(); 
     Two.getDieValue(); 
     Three.getDieValue(); 
    } 
} 

以下是錯誤

4 
1 
50 
1 
99 
1 
Exception in thread "main" java.lang.NullPointerException 
    at com.catalyse.die.Die.rollDie(Die.java:83) 
    at com.catalyse.die.TestDieClass.main(TestDieClass.java:27) 
+0

正如我所說,它值得新問題。但那你爲什麼改變你的代碼?你之前在'rollDie()'中的代碼是正確的.'Random rand = new Random(); int i =(rand.nextInt(myDieSides)+ 1);'。你改變了它,從而出現錯誤。 – SudoRahul

+0

是的,我意識到有一個已經在頂部聲明的rand,它似乎是多餘的,我只是忘記初始化一個頂端。 – Taylor

回答

2
myDieValue = (rand.nextInt(myDieSides) + 1); 

您還沒有初始化rand所以蘭特null

所以,

private Random rand= new Random(); 
+0

謝謝你解決了我的問題,我討厭當我錯過小事情。 – Taylor