2011-12-29 127 views
1

我实现了两个哈希表,如下所示。从控制台读取整数和字符串

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取决于关键?

回答

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; 
       }    
      }     
0

我相信你将需要使用Integer.parseInt找出输入是否与整数或没有。

不幸的是,不是一个真正的“的TryParse”或Java中类似的东西,所以你必须只捕获异常。你可能使用正则表达式来检查它是否是数字,但这可能比它的价值更麻烦。

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

Scanner console = new Scanner(System.in);

0

读输入的字符串;如果它可以被解析为Integer,则使用streetno,否则使用streetname

1

我怎样才能读取用户输入?

喜欢的东西

String line = scanner.nextLine(); 

因为我不知道用户是否进入整数或字符串?

尝试将其转换为整数

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

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

} 

可以使用迭代器根据密钥我检索特定的值?

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

0

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

您也可以让用户“说,”他们是预先输入的内容 - int或字符串。但这不是非常用户友好的。

要提供密钥,要从HashMap获得值,请使用get(key)方法。

1

首先,您需要阅读标准输入。首先把它作为一个String来处理,以简化。

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

然后,尝试将字符串转换为整数。如果用户输入一个号码,你会得到一个键第一张地图,否则,您可以asume它是第二个字符串键:

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()方法会返回相应的值。

最后,不要忘记释放扫描仪(最好是在finally块):

scanner.close();