Как выйти из цикла, когда пользователь вводит ноль - PullRequest
0 голосов
/ 15 июня 2019

Мне нужно написать программу, которая предлагает пользователю ввести до 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]);      
      }
   }

Я ожидаю, что программа будет вводить код до тех пор, пока пользователь не нажмет enter, затем увидит вывод того, что было введено.

Ответы [ 4 ]

3 голосов
/ 15 июня 2019

Проблема в том, что вы сравниваете 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));
0 голосов
/ 16 июня 2019
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]); 
   } 
}
0 голосов
/ 16 июня 2019
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)); 
   } 
}
0 голосов
/ 15 июня 2019

Вы не должны вкладывать два цикла для чтения ввода, вам нужен один цикл с двумя условиями;число должно быть меньше длины массива 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]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...