公牛和牛游戏程序Java。运行程序时空指针异常错误

问题描述:

我正在为游戏公牛和牛制作代码(http://en.wikipedia.org/wiki/Bulls_and_cows) 我的代码编译了,但是当我尝试在终端中运行它时,我得到了一个空指针异常错误,用于howManyBylls, playOneTurn和playGame。我找不到这个错误来自哪里。此外,该版本的游戏与其他公牛和牛的游戏不同,用户可以输入四位数的重复数字。我认为在大多数其他代码中,他们应该输入具有唯一数字的四位数字。公牛和牛游戏程序Java。运行程序时空指针异常错误

public int howManyBulls(String guess) 
    { 
    input = guess; 
    bulls = 0; 
    for (int i = 0; i<4; i++) 
    { 
     int k = Integer.parseInt(pattern.substring(i, i+1)); 
     int l = Integer.parseInt(input.substring(i, i+1)); 
     if (k == l) // checking for same value at same location 
     { 


      bulls++; // add one to bull if there is a match 
     } 
    } 
    return bulls; 
    } 


public class Game{ 
    private int turns; 
    private Oracle computer; 
    private Scanner input; 
    public String userInput; 
    public int bulls; 
    public int cows; 

    public Game(){ 
    // creates new data type Oracle 
    computer = new Oracle(); 
    turns = 0; 
    input = new Scanner(System.in); 
    } 

    public void playGame(){ 
    // your code for the Game playGame method goes here 
    System.out.print("Please enter a 4 digit number: "); 
    userInput=input.next(); 
    playOneTurn(); 
    } 

    // plays a turn 
    public void playOneTurn(){ 
    turns++; 

    // passes userInput into methods of howManyBulls() and howManyCows() 
    bulls = computer.howManyBulls(userInput); 
    cows = computer.howManyCows(userInput); 

    System.out.println(bulls+ " bulls"); 
    System.out.println(cows+ " cows"); 

    // checks if game is over 
    if (bulls < 4) // if bulls less than four then continue playing game 
     // if bulls = 4 then the number is correct 
    { 
     playGame(); 
    } else { // done with game and print out number of turns 
     System.out.print("It took" + turns + " turns to guess " 
       + "the correct number"); 
    } 
    } 


    public void setPattern(String solution){ 
     computer.setPattern(solution); 
    } 

    public String getPattern(){ 
     return computer.getPattern(); 
    } 
} 
+1

请包括您在运行程序时获得的完整堆栈跟踪。 – Martin 2014-10-28 16:39:49

+2

可能重复[什么是空指针异常,以及如何解决它?](http://*.com/questions/218384/what-is-a-null-pointer-exception-and-how-do -i-FIX-IT) – 2014-10-28 16:40:15

+0

请输入4位数字:1223 异常线程 “main” 显示java.lang.NullPointerException \t在Oracle.howManyBulls(Oracle.java:68) \t在Game.playOneTurn(游戏。 java:38) \t at Game.playGame(Game.java:30) \t at BullsAndCows.main(BullsAndCows.java:11)​​ – wics13 2014-10-28 16:43:35

它出现在howManyBulls()尚未初始化或已被设置为null的变量“pattern”中。它没有在您发布的代码中定义,并且是唯一尚未初始化的变量。空指针异常通常是通过调用空对象上的方法引起的,如果变量尚未初始化,则可能发生这种情况。

+0

我创建了一个单独的方法,将字符串模式定义为将四个随机生成的数字连接成一个字符串。 – wics13 2014-10-28 16:57:19

+0

@ wics13你在调用这个方法吗?换句话说,在调用这个方法之前,'pattern'变量是否被设置? (同时提示,在'howManyBulls'方法中设置一个断点,并查看哪个变量具体为null,然后从那里追踪它。) – 2014-10-28 17:07:41