プレーヤーがダイアログフィールドに何かを入力する必要があり、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;
}