用 false containsValue(Hashmap) 捕获

Catch with false containsValue(Hashmap)

如果我在类型和值中输入了错误的值,我希望我的程序显示一条错误消息。

错误消息对类型有效,但对值无效。怎么了?

Map<String, String> Heart = new HashMap();

Heart.put("A", "Heart");
Heart.put("J", "Heart");
Heart.put("Q", "Heart");
Heart.put("K", "Heart");
Heart.put("2", "Heart");
Heart.put("3", "Heart");
Heart.put("4", "Heart");
Heart.put("5", "Heart");
Heart.put("6", "Heart");
Heart.put("7", "Heart");
Heart.put("8", "Heart");
Heart.put("9", "Heart");
Heart.put("10", "Heart");

System.out.print("Value: ");
val = input.next();
System.out.print("Type: ");
typ = input.next();
if(typ.equals("Heart")){
   if(Heart.containsKey(val)&&Heart.containsValue(typ)){
       System.out.println(val+" of "+typ+" is successfully added.\n");
   }
   if(Heart.containsKey(val)==false){
       try{
         throw new InvalidValueException();
       }
       catch(InvalidValueException e){
         System.out.println(e.getMessage()+" 2-10, AJQK.\n");
       }
   }
   else if(Heart.containsValue(typ)==false){
       try{
         throw new InvalidValueException();
       }
       catch(InvalidValueException e){
          System.out.println(e.getMessage()+" HDSC\n");
       }
    }
 }

如果所有键的值都相同,则应创建 List<String> 类型而不是使用 Map。然后你可以只允许用户输入类型并检查是否 List#contains 类型。

如果这只是一个示例,那么您将对每种类型有不同的值,

  • 你可以 throw Exception 与消息不需要捕获和打印消息。您可以在 constructor.

  • 中传递消息
  • 如果 type 是值并且 valkey,那么 typ.equals("Heart") 检查是多余的,因为您正在检查 Heart.containsValue(typ) .

  • 因此,如果您的 typ 不是 Heart,您将无法输入条件,如果 typ,则 if(Heart.containsKey(val)==false){ 永远不会为真不是 Heart.

  • 您应该删除 if(typ.equals("Heart")) 检查。

最好遵循命名规则,以小写开头的变量名。