【问题标题】:How do i exit a loop when user enters null用户输入null时如何退出循环
【发布时间】:2019-06-15 02:08:30
【问题描述】:

我需要编写一个程序,提示用户输入最多 5 个电影标题。用户按回车键退出输入并部分填充数组。

我已经尝试了这些页面中建议的许多解决方案。要么循环继续,要么我得到布尔/字符串转换错误。

public static void main(String[] args)
   {
      Scanner sc = new Scanner(System.in);
      String [] Movie = new String[5];
      String title;
      int count = 0;
      for(int i=0; i < Movie.length; i++) {
         System.out.println("Enter up to 5 Movie titles (enter null to exit)"); 
         while (sc.hasNextLine()) {
            if(sc.equals("")) {
               break;
            }
            title = sc.nextLine();
            Movie[i] = title;
            count++;
         }                  
      }      
      for(int i=0; i < Movie.length; i++) {
      System.out.println(Movie[i]);      
      }
   }

我希望程序在用户点击回车之前输入代码,然后查看输入内容的输出。

【问题讨论】:

    标签: java arrays while-loop


    【解决方案1】:

    问题是您将Scanner 对象与空String 进行比较,这是错误的sc.equals("")。首先将输入读入String,然后检查是否为空

    for(int i=0; i < Movie.length; i++) {
         System.out.println("Enter up to 5 Movie titles (enter null to exit)"); 
         while (sc.hasNextLine()) {
            title = sc.nextLine();
            if(title.equals("")) {
               break;
            }
    
            Movie[i] = title;
            count++;
         }                  
      } 
    

    要打印一个数组,请使用Arrays.toString

    System.out.println(Arrays.toString(Movie));
    

    【讨论】:

    • 感谢您的输入,我将代码更改为此。但是输入 5 个标题 println 启动,我希望它输出数组
    【解决方案2】:

    你不应该嵌套两个循环来读取输入,你需要一个带有两个条件的循环;计数必须小于Movies 数组长度(应命名为movies 以遵循Java 命名约定)并且Scanner 需要有另一行。我更喜欢String.isEmpty() 而不是String.equals("")。你的第二个循环应该在count 处停止(因为之后的条目可能是空白的)。类似的,

    Scanner sc = new Scanner(System.in);
    String[] movies = new String[5];
    int count = 0;
    for (int i = 0; i < movies.length && sc.hasNextLine(); i++) {
        System.out.println("Enter up to 5 Movie titles (enter null to exit)");
        String title = sc.nextLine();
        if (title.isEmpty()) {
            break;
        }
        movies[count] = title;
        count++;
    }
    for (int i = 0; i < count; i++) {
        System.out.println(movies[i]);
    }
    

    【讨论】:

    • 感谢您的贡献。我把我的代码改成了这个,第一个 println 没有显示。
    【解决方案3】:
    import java.util.*;
    public class MovieTitles
    {
       public static void main(String[] args)
       {
          Scanner sc = new Scanner(System.in);
          String Movie[] = new String [10];
          for(int i = 0 ; i < Movie.length; i++) {
             System.out.println("Enter up to 10 Movie titles (enter null to exit). Title " + (i + 1));
             String title = sc.nextLine();
             if(title.matches("")) {
                break;            
            }else {
               Movie[i] = title;
            }
         }
          System.out.println(Arrays.toString(Movie)); 
       } 
    }
    

    【讨论】:

    • 这是我最近的一次。 toString 打印包含空值的完整数组,所以我可能会更改它。在查看标题后,我想出了 title.matches 。选项。 while 循环根本不起作用,也许它是一个布尔值。感谢所有帮助过的人。
    【解决方案4】:
    import java.util.*;
    public class MovieTitles
    {
       public static void main(String[] args)
       {
          Scanner sc = new Scanner(System.in);
          String Movie[] = new String [10];
          int count = 0;
          for(int i = 0 ; i < Movie.length; i++) {
             System.out.println("Enter up to 10 Movie titles (enter null to exit). Title " + (i + 1));
             String title = sc.nextLine();
             if(title.matches("")) {
                break;            
            }else {
               Movie[i] = title;
               count++;
            }
         }
          System.out.println("Movie Titles:\n");
          for(int j = 0 ; j < count; j++)         
          System.out.printf("%s\n", Movie[j]); 
       } 
    }
    

    【讨论】:

    • 这是我苦恼了整个周末后得到的最终答案。我回到基础,让一部分按照我想要的方式工作,然后在此基础上进行构建,追溯那些不起作用或不适合的修改。希望这可以帮助其他有同样问题的人。得到结果非常满意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多