2012-05-03 4 views
0

Я создаю метод для ввода ввода пользователем и проверяю его, чтобы убедиться, что он правильный. Если это правильно, он вызовет метод и вводит в него вход пользователя. Но по какой-то причине вызов метода не работает. Он не вызывает никаких ошибок, просто он этого не делает. Я разместил оператор печати в конце кода, чтобы убедиться, что он действительно добирается до него, и он это делает, но по какой-то причине он просто не вызывает метод, как это предполагалось. Другой метод работает отлично, если я сам его вызываю и вводю строку через параметры.Почему этот метод не работает?

Код:

public void getGetScheduledShowByFilmInput()////new - omar//// 
{ 
    BufferedReader reader; 
    reader = new BufferedReader(new InputStreamReader(System.in)); 

    String filmInput; 
    filmInput = ""; 

    boolean foundFilm; 
    foundFilm = false; 

    System.out.println("Here is a list of films that are currently showing:"); 
    for(Film film : films){ 
     System.out.println(film.getFilmName()); 
    } 

    System.out.println(""); 
    System.out.println("Please type the film name that you wish to view the corresponding shows for and press enter."); 
    System.out.println("Type 'exit' and press enter to exit this process."); 

    while(foundFilm == false){ 
     try{ 
      filmInput = reader.readLine(); 
     } 
     catch (IOException e){ 
      System.out.println("Error"); 
     } 

     //If user enters "exit" then return. 
     if(filmInput.equals("exit")){ 
      return; 
     } 

     //Check to see if the film name input by the user corresponds to any film showing. 
     for(Film film : films){ 
      if(film.getFilmName() == filmInput){ 
       foundFilm = true; 
       break; 
      } 
     } 

     if(foundFilm = true){ 
      System.out.println("Film found."); 
     } 
     else{ 
      System.out.println("The film name you entered has not been recognised. Please try again."); 
     } 
    } 

    //Call the function and input the film name input by the user. 
    getScheduledShowsByFilm(filmInput); ////This is the code that seems to be the problem. 
    System.out.println("reached bottom"); 

} 

и второй метод:

public void getScheduledShowsByFilm(String inputFilmName) 
{ 
    ArrayList<Show> scheduledShows; 
    scheduledShows = new ArrayList<Show>(); 
    for(Film film : films){ 
     if(inputFilmName == film.getFilmName()){ 
      for(Schedule schedule : schedules){ 
       scheduledShows.add(schedule.getShowsOfFilm(film)); 
       if(scheduledShows.get(scheduledShows.size() - 1) == null){ 
        scheduledShows.remove(scheduledShows.size() - 1); 
       } 
      } 
     } 
    } 

    for(Show show : scheduledShows){ 
     System.out.println("**********************************"); 
     show.getShowDetails(); 
     System.out.println("**********************************"); 
    } 
} 

Второй метод отлично работает, когда я называю его самостоятельно и ввести параметры вручную, хотя.

Это, наверное, что-то чрезвычайно простое, что я не понимаю! ха-ха, спасибо за вашу помощь :)

+0

Как вы знаете, это не называется? Из того, что я вижу, вы объявляете и инициализируете BufferedReader, но вы ничего не читаете (если только нет более кода, который вы там не размещали. Кроме того, попробовали ли вы распечатать тестовое сообщение в функции, чтобы узнать, он достиг? – orangething

+1

Можете ли вы опубликовать 'getScheduledShowsByFilm'? –

+0

Не обращайте внимания на мой комментарий. Просто заметили ваши изменения. – orangething

ответ

2

foundFilm никогда не может быть ложным, потому что вы всегда привязывать верен ему:

if(foundFilm = true){ 
      System.out.println("Film found."); 
} 

попробуйте изменить его к этому:

if(foundFilm) 
{ 
    System.out.println("Film found."); 
} 
+0

Хотя это проблема, объясните его проблему вообще. По общему признанию, его проблема немного расплывчата, но похоже, что он говорит, что 'getScheduledShowsByFilm' не вызывается. –

+0

@Omar: вы действительно хотели: 'if (foundFilm == true)' с двойным значком равенства, но, как показывает Хантер, 'if (condition == true)' такое же, как и более простое 'if (condition) ' –

+0

Это не проблема, эта часть кода работает нормально. Я назначил его false в начале, и он изменился во время цикла while. он работает, оператор печати, который я разместил внизу кода, выдает «достигнутое дно», что означает, что он достиг этого, эта часть кода работает нормально. спасибо за ваш вклад, хотя :) –

0

В getGetScheduledShowByFilmInput() и getScheduledShowsByFilm(String) избегайте выполнения сравнения строк с помощью оператора равенства (==). Операторы == проверяют для равенства объектов, но вы хотите проверить, содержат ли две строки одну и ту же последовательность символов. Поэтому используйте equals вместо:

//Check to see if the film name input by the user corresponds to any film showing. 
    for(Film film : films){ 
     if(film.getFilmName().equals(filmInput)){ 
      foundFilm = true; 
      break; 
     } 
    } 

и

for(Film film : films){ 
    if(inputFilmName.equals(film.getFilmName())){ 
     for(Schedule schedule : schedules){ 
      scheduledShows.add(schedule.getShowsOfFilm(film)); 
      if(scheduledShows.get(scheduledShows.size() - 1) == null){ 
       scheduledShows.remove(scheduledShows.size() - 1); 
      } 
     } 
    } 
} 
+0

Спасибо так много! Это отсортировало все это :) Большое спасибо. Я новичок в этом сайте, не могли бы вы рассказать мне, как я буду давать вам +1? –

+0

@ OmarQassem Поскольку вы уже приняли ответ Хантера, вы также не можете принять мою. (Должен признаться, что я не уверен, что вы можете изменить принятый ответ, поскольку я никогда не задавал вопрос о себе ...). Вы можете повысить свой ответ, используя стрелки слева от ответа. Раздел о том, как спросить (http://stackoverflow.com/faq#howtoask) в FAQ, содержит дополнительные сведения. – afrischke

Смежные вопросы