我希望能够在(名称,年龄)中输入扫描仪并将其存储在哈希表中。到目前为止它还不顺利。
public static void main(String[] args) {
Hashtable<String, Integer> names = new Hashtable<String, Integer>();
Scanner in = new Scanner(System.in);
while(in.hasNext()){
String name = in.nextLine();
int age = in.nextInt();
names.put(name, age);
}
}
答案 0 :(得分:1)
public boolean hasNext()如果此扫描程序有另一个,则返回true 令牌输入。此方法可能在等待输入时阻塞 扫描。扫描仪不会超过任何输入。
问题是您从未收到任何输入,因为您的循环条件永远不会得到解决。您的计划停留在while(in.hasNext())
public static void main(String[] args) {
Hashtable<String, Integer> names = new Hashtable<String, Integer>();
String name = "";
int age = 0;
Scanner in = new Scanner(System.in);
while (true) {
System.out.println("Enter name:");
name = in.next();
if (name.equals("end")) {
break;
}
System.out.println("Enter age:");
age = Integer.valueOf(in.next());
names.put(name, age);
}
// print the hashtable data
System.out.println("\nHashtable:\n");
for(String n : names.keySet()) {
System.out.println("Name:\t" + n + "\nAge:\t" + names.get(n) + "\n");
}
}
答案 1 :(得分:1)
如果您希望将下一个标记读取为字符串,则应使用next()
方法,而不是nextLine()
。 nextLine()会返回跳过的行,而不是当前行。
来自nextLine()javadoc:
使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。 由于此方法继续搜索输入以查找行分隔符,因此如果不存在行分隔符,它可以缓冲搜索要跳过的行的所有输入。
返回: 被跳过的行
改变:
String name = in.nextLine();
到
String name = in.next();
将解决您的问题。多数民众赞成你需要做的一切。
此外,您需要一些条件来结束读取输入。您可以使用某种关键字,当读取该关键字时,您知道是时候结束读取输入了。
这里有一个完整且经过测试的例子:
private static final String EXIT_KEYWORD = "exit";
public static void main(final String[] args) {
Hashtable<String, Integer> names = new Hashtable<String, Integer>();
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String name = in.next();
if (EXIT_KEYWORD.equals(name)) {
break;
}
int age = in.nextInt();
names.put(name, age);
}
for (Map.Entry<String, Integer> entry : names.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
答案 2 :(得分:0)
Java doc说明了Scanner.hasnext
public boolean hasNext()
如果此扫描器的输入中有另一个标记,则返回true。在等待输入扫描时,此方法可能会阻塞。扫描仪不会超过任何输入。
所以你的程序正在等待in.hasNext()
您可以使用带有一些退出条件的简单循环来从控制台
获取输入 for(;<exit condition>;)
// get console inputs
答案 3 :(得分:0)
如果您被允许为输入格式选择另一种漂亮的方式,请尝试这样:
使用如下输入格式:
user1:23 user2:33 user3:47
的输出:强>
{user3 = 47,user2 = 33,user1 = 23}
public static void main(String[] args) {
// TODO Auto-generated method stub
Hashtable<String, Integer> students = new Hashtable<String, Integer>();
Scanner in = new Scanner(System.in);
String line = in.nextLine();
String[] entries = line.split("\\s+");
for(String e : entries){
if(e.contains(":")){
String[] elements = e.split(":");
students.put(elements[0], Integer.parseInt(elements[1]));
}
}
System.out.println(students);
}