有没有更简单的方法来编写这个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;
}

一些额外的信息:

  • 这些变量以前缀CMDstrings被更早在程序中定义,以及什么样的用户将需要投入执行各种命令。例如,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);


以上是有没有更简单的方法来编写这个equalsIgnoreCase检查链?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>