从控制台读取整数和字符串

时间:2011-12-29 16:10:56

标签: java hashmap

我实现了两个Hashtable,如下所示。

HashMap<Integer,String> streetno=new HashMap<Integer,String>();
   streetno.put(1, "Sachin Tendulkar");
   streetno.put(2, "Dravid");
   streetno.put(3,"Sehwag");
   streetno.put(4,"Laxman");
   streetno.put(5,"Kohli");


HashMap<String,Integer> streetname=new HashMap<String,Integer>();
   streetname.put("Sachin Tendulkar",1);
   streetname.put("Dravid",2);
   streetname.put("Sehwag",3);
   streetname.put("Laxman",4);
   streetname.put("Kohli",5);
   Iterator itr=streetno.keySet().iterator();

现在我要求用户输入。如果他输入整数,我想从第一个哈希表中检索特定值,如果用户输入字符串,我想从第二个哈希表中读取特定的整数。

我的问题是“如何阅读用户输入?”因为我不知道用户是输入整数还是字符串? 而且我也想知道我可以根据键使用Iterator检索特定值吗?

6 个答案:

答案 0 :(得分:1)

  

如何阅读用户输入?

这样的东西
String line = scanner.nextLine();
  

因为我不知道用户是输入整数还是字符串??

尝试将其转换为整数

try {
  int num = Integer.parseInt(line);
  // lookup by number

} catch(NumberFormatException ignored) {
  // lookup by string

}
  

我可以使用Iterator检索特定值,具体取决于键吗?

Iterator用于迭代,Map用于按键查找。

答案 1 :(得分:1)

首先,您需要阅读标准输入。首先将其作为字符串处理,以简化。

   Scanner scanner=new Scanner(System.in);
   String userInput=scanner.nextLine();

然后,尝试将String转换为Integer。如果用户键入了一个数字,您将获得第一个Map的键,否则,您可以将其作为第二个键的String键:

   String sName;
   Integer iNumber;
   try {
       iNumber=Integer.parseInt(userInput);
       //user intruduced a number, so get the streename
       sName=streetno.get(iNumber);

   } catch (NumberFormatException e) {
       //user introduced a not-numeric String, so get the streetnumber
       sName=userInput;
       iNumber=streetname.get(sName);
   }

您不需要迭代键集,因为Map.get()方法会返回相应的值。

最后,不要忘记释放扫描仪(在最后一个块中更好):

scanner.close();

答案 2 :(得分:0)

我相信您需要使用Integer.parseInt来确定输入是否为整数。

不幸的是,java中没有真正的“tryParse”或类似内容,所以你必须抓住异常。你可以使用正则表达式来检查它是否是数字,但这可能比它的价值更麻烦。

至于从控制台读入,我会使用:

Scanner console = new Scanner( System.in );

答案 3 :(得分:0)

以字符串形式读取输入;如果可以将其解析为整数,请使用streetno,否则请使用streetname

答案 4 :(得分:0)

您可以使用Scanner类来检索用户输入。它有几个有用的方法,如nextInt() or nextLine(),可用于确定用户是否输入了int或字符串。

您也可以让用户&#34;说&#34;他们事先输入的是什么 - int或string。但这不是非常用户友好。

要在提供密钥时使用HashMap方法从get(key)获取值。

答案 5 :(得分:0)

您可以阅读其他答案中提到的输入。我只是以这种方式尝试了主要逻辑。如果可以组合两个地图,您可以尝试这种方式。

            String input = "Laxman";            
            HashMap<String, String> street = new HashMap<String, String>();
            street.put("1", "Sachin Tendulkar");
            street.put("2", "Dravid");
            street.put("3", "Sehwag");
            street.put("4", "Laxman");         

            for (Map.Entry<String, String> entry : street.entrySet()) { 
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
                if (input.equals(entry.getKey())) {
                    System.out.println(entry.getValue());   
                    break;
                } else if (input.equals(entry.getValue())) {
                    System.out.println(entry.getKey());   
                    break;
                }               
            }