我实现了两个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检索特定值吗?
答案 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;
}
}