有没有更简单的方法来编写这个equalsIgnoreCase检查链?
我正在尝试编写一个方法,该方法以 a 的形式接受用户输入string,然后int根据字符串包含/等于的内容返回一个值。我已经写了一个有效的方法,但它很长,我想知道是否有办法让它更短?
这是当前状态下的方法:
private int readCommandInput(){
System.out.print("Command?>");
String userCommand = programAssignment.assignmentScanner.nextLine();
if(userCommand.equalsIgnoreCase(registerNewDogCMD)){ return 1; }
else if(userCommand.equalsIgnoreCase(listDogsCMD)){ return 2; }
else if(userCommand.equalsIgnoreCase(increaseDogAgeCMD)){ return 3; }
else if(userCommand.equalsIgnoreCase(removeDogCMD)){ return 4; }
else if(userCommand.equalsIgnoreCase(registerNewOwnerCMD)){ return 5; }
else if(userCommand.equalsIgnoreCase(giveDogCMD)){ return 6; }
else if(userCommand.equalsIgnoreCase(listOwnersCMD)){ return 7; }
else if(userCommand.equalsIgnoreCase(removeOwnerCMD)){ return 8; }
else if(userCommand.equalsIgnoreCase(startAuctionCMD)){ return 9; }
else if(userCommand.equalsIgnoreCase(makeBidCMD)){ return 10; }
else if(userCommand.equalsIgnoreCase(listBidsCMD)){ return 11; }
else if(userCommand.equalsIgnoreCase(listAuctionsCMD)){ return 12; }
else if(userCommand.equalsIgnoreCase(closeAuctionsCMD)){ return 13; }
return 0;
}
一些额外的信息:
- 这些变量以前缀
CMD都strings被更早在程序中定义,以及什么样的用户将需要投入执行各种命令。例如,makeBidCMD定义为“Make Bid”。 - 该方法必须能够从用户那里获取所有这 13 个不同的命令,并且如果用户输入了错误的命令,则返回 0。所以总的来说,它必须能够返回 14 个不同的值。
- 该方法必须采用
string格式输入。例如,我不能让用户为他们想要执行的命令写一个数字并将输入作为int.
回答
对我来说,这种情况的最佳方法是:
String userCommand = programAssignment.assignmentScanner.nextLine().toLowerCase();
HashMap<String, Integer> hmap = new HashMap<String, Integer>();
hmap.put("aa", 1);
hmap.put("bb", 2);
hmap.put("cc", 3);
hmap.put("dd", 4);
return hmap.getOrDefault(userCommand, 0);