如何退出此循环?

时间:2017-02-08 03:45:05

标签: java loops collections hashmap iteration

此代码尝试接受来自用户的密钥并将其存储到字符串数据数组中。在程序的后面,每个键的值以某种特定格式显示。

首先,当用户输入为空/下一行时,我希望此循环结束/退出。我不想使用任何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()检测任何那些空输入数据,因此它可以退出循环?

4 个答案:

答案 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");
}