0

プレーヤーがダイアログフィールドに何かを入力する必要があり、Javaがそれをアクションとして解釈する必要があるゲームをコーディングしています。私はスイッチを使用するGameEngineという名前のクラスを持っています:

public void interpretCommand(final String commandLine) 
{
    Command command = parser.getCommand(commandLine);
    CommandWord commandWord = command.getCommandWord();
    switch ( commandWord ) {
      case UNKNOWN: 
         gui.println("Unknown command...");
         return;
      case LOAD: 
         load(); 
         break;
    } 
}

ここで使用される列挙型は列挙型クラスにあります:

public enum CommandWord
{
    LOAD("charger"),UNKNOWN("?");
    private String commandWord;
 }

そして最後に、CommandWordsクラス:

public class CommandWords
{
    // a HashMap that holds all valid command words
   private HashMap<String, CommandWord> validCommands; 

   public CommandWords()
   {
      validCommands = new HashMap<String, CommandWord>();
      for(CommandWord command : CommandWord.values()) {
          if(command != CommandWord.UNKNOWN){
              validCommands.put(command.toString(), command);
          }
      }
   }


   /**
     * @param commandWord the command word to look for in the valid commands
     * @return the commandWord associated with the word typed
     */
    public CommandWord getCommandWord(final String commandWord)
    {
        CommandWord command =validCommands.get(commandWord);
        if(command !=null) {
           return command;
        }
        else {
           return CommandWord.UNKNOWN;
        }
    }

コマンドクラス:

public class Command
{
    private CommandWord commandWord;

    /**
     * @param commandWord from enum class
     */
    public Command(CommandWord commandWord)
    {
        this.commandWord = commandWord;
    }

    public CommandWord getCommandWord()
    {
        return commandWord;
    }
}

私の問題は非常に単純です。充電器を入力すると機能しますが、リストにないランダムな単語を入力すると、次NullPointerExceptionの行にin端子が表示されます。

        switch ( commandWord )

InterpretCommandで。

コードのどこが悪いのかわかりません。誰かが助けてくれるなら、ありがとう。私を責めないでください、私は初心者です、私は数ヶ月前に始めたばかりです!

解決策:コマンドでこれらの行を変更/追加します

    public boolean isUnknown()
{
    return (commandWord == null);
}

    public CommandWord getCommandWord()
{
    if(!isUnknown()){

    return commandWord;

}
 else return CommandWord.UNKNOWN;
}
4

1 に答える 1

2

この行でnullになる可能性があるのは1つだけで、それはcommandWordです。したがって、メソッド呼び出しcommand.getCommandWord()はnullを返します。

編集:あなたが今提供した情報で、これはパーサーがCommandcommandWordが設定されていないオブジェクトを返すことを意味します。

于 2012-12-25T11:57:39.630 に答える