0

ユーザーによる入力を受け取り、それが正しいことを確認するために検証するメソッドを作成しています。正しければ、メソッドを呼び出し、ユーザー入力を入力します。しかし、何らかの理由で、メソッド呼び出しが機能していません。エラーは発生しません。単にエラーが発生しないだけです。コードの最後にprintステートメントを配置して、実際にそこに到達し、到達することを確認しましたが、何らかの理由で、想定どおりにメソッドを呼び出さないだけです。もう1つのメソッドは、それ自体を呼び出してパラメーターを介して文字列を入力すると、正常に機能します。

コードは次のとおりです。

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");

}

2番目の方法は次のとおりです。

 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番目のメソッドは、それ自体を呼び出して手動でパラメーターを入力すると、完全に機能します。

それはおそらく私が理解していない非常に単純なものです!ははは、あなたの助けをありがとう:)

4

2 に答える 2

2

foundFilmは、常にtrueを割り当てるため、falseになることはありません。

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

これに変更してみてください:

if(foundFilm)
{
   System.out.println("Film found.");
}
于 2012-05-03T00:57:48.593 に答える
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);
            }
        }
    }
}
于 2012-05-03T01:13:12.063 に答える