2012-05-03 15 views
0

私はユーザーからの入力を受け取り、それが正しいことを確認するためのメソッドを作成しています。正しい場合は、メソッドを呼び出してユーザー入力を入力します。しかし何らかの理由で、メソッド呼び出しが機能していません。それはエラーを発生させません、それは単にそれをしません。私はコードの最後にprintステートメントを置いて実際にそこに到達していることを確認しましたが、何らかの理由でそれが想定されているようにメソッドを呼び出さないだけです。他のメソッドは、それ自身を呼び出してパラメータを使用して文字列を入力すると正常に動作します。このメソッド呼び出しはなぜ機能しませんか?

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("**********************************"); 
    } 
} 

私は自分自身でそれを呼び出すと、しかし、手動でパラメータを入力したときに第2の方法は完璧に動作します。

これはおそらく私が理解していない非常に単純なものです!ハハ、あなたの助けをありがとう:)あなたはいつもそれに忠実割り当てるため

+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ループの間に変更しました。コードの最後に置かれたprintステートメントは、到達したことを意味する "到達したボトム"を出力し、コードの一部が正常に動作しています。あなたの入力にも感謝します:) –

0
getGetScheduledShowByFilmInput()

getScheduledShowsByFilm(String)等号演算子(==)を使用した文字列比較は避けてください。 ==演算子はオブジェクトの等価性をテストしますが、2つの文字列に同じ文字列が含まれているかどうかをテストします。そのため、代わりに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あなたはすでにハンターの回答を受け入れているので、私も受け入れることはできません。 (私は自分自身で質問したことがないので、受け入れられた答えを変更できるかどうかわからないと告白する必要があります...)。あなたは答えの左にある矢印を使って私の答えをupvoteすることができます。 FAQの質問(http://stackoverflow.com/faq#howtoask)に関するセクションには、追加の詳細があります。 – afrischke

関連する問題