2013-11-23 5 views
1

Итак, я создал класс умирающего, который должен создать die, а затем разрешите мне катить их, вытягивать их значения и количество сторон. Моя проблема заключается в том, что я не могу опрокинуть кубик во время тестирования, поскольку он генерирует исключение 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

Да, я понял, что на рандере уже объявлен ранд, и он казался излишним, я просто забыл инициализировать верхнюю часть. – Taylor

ответ

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

Вы не инициализирован rand так Рэнд null

Так,

private Random rand= new Random(); 
+0

Спасибо, что исправил мою проблему, я ненавижу, когда скучаю по мелочам. – Taylor

Смежные вопросы