此代码尝试接受来自用户的密钥并将其存储到字符串数据数组中。在程序的后面,每个键的值以某种特定格式显示。
首先,当用户输入为空/下一行时,我希望此循环结束/退出。我不想使用任何EOF字符或字符串退出循环。
我对之前的SO问题/解决方案进行了一些搜索,但在我的案例中并没有起作用。需要帮助解决这个问题或任何其他替代方案是最受欢迎的。
提前致谢!
class DictionaryAndMap{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
Map<String, Integer> mp = new HashMap<String, Integer>();
String name;
int phone;
for(int i=0; i<len; i++){
name = sc.next();
phone = sc.nextInt();
mp.put(name, phone);
}
int i=0;
String arr1[] = new String[10];
String nam;
// I couldn't exit out of this loop
while(sc.hasNext()){
nam = sc.next();
if(nam!=null && !nam.trim().isEmpty()){
arr1[i] = nam;
i++;
}
else{
break;
}
}
// iterating through the array to find the search inputs
for(String j: arr1){
if(mp.containsKey(arr1[j])){
System.out.println(j+"="+mp.get(j));
}else{
System.out.println("Not found");
}
}
}
}
P.S。即使输入为空/ null /&#34,hasNext()值也不会变为false。 &#34;因此,while循环永远不会结束。如何让hasNext()检测任何那些空输入数据,因此它可以退出循环?
答案 0 :(得分:1)
阅读后只需检查输入为空:
while (scanner.hasNextLine()) {
nam = sc.nextLine();
if (nam.trim().isEmpty())
break;
...
然后,您只需将else if
替换为else
并删除最后一个else
即可简化其余部分。
答案 1 :(得分:1)
你必须检查字符串是否为空或空中断,以便控制来自while循环
nam=sc.next();
if(name==null || name.isEmpty()){
break; //break the loop
}
答案 2 :(得分:1)
我认为这是您正在寻找的代码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nam;
Map<String, Objects> mp = new HashMap<>();
String[] arr1 = new String[1024];
int i = 0;
nam = sc.nextLine();
while (nam.length() > 0) {
if (mp.containsKey(nam)) {
arr1[i] = nam;
i++;
} else {
System.out.println("Not found");
}
nam = sc.nextLine();
}
}
通过用空字符串命中输入来终止循环。
答案 3 :(得分:0)
此代码可能对您有所帮助。您无需检查!mp.containsKey(nm)
while(sc.hasNext()){
nam = sc.next();
if(mp.containsKey(nam)){
arr1[i] = nam;
i++;
}
else {
System.out.println("Not found");
}