使用false containsValue(Hashmap)捕获

时间:2015-09-27 04:09:42

标签: java hashmap try-catch

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

错误消息在类型上运行良好,但它不适用于该值。怎么了?

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");
       }
    }
 }

1 个答案:

答案 0 :(得分:1)

如果所有密钥的值相同,则应创建List<String>种类型而不是Map。然后你可以让用户输入类型并检查List#contains类型是否合适。

如果它只是一个例子,那么每种类型都会有不同的值,

  • 您只需throw Exception即可发送消息,无需捕获并打印消息。您可以在构造函数中传递消息。

  • 如果type为值且valkey,则typ.equals("Heart")检查是多余的,因为您正在检查Heart.containsValue(typ)

  • 因此,如果您的typ不是Heart,那么您将无法输入条件,如果if(Heart.containsKey(val)==false){不是typ,则Heart永远不会成立1}}。

  • 您应该删除if(typ.equals("Heart"))支票。

最好使用小写的命名约定起始变量名。