0

ねえ、ユーザーから文字列入力を取得しようとしています (この場合は映画の名前、たとえば Good Burger)。クラス Film の配列リストがあり、そこから反復処理を行っています。各反復で、Film クラスのインスタンスのメソッドが呼び出され、フィルム名の文字列が返されます。これら2つを比較していると、それらが等しいことを認識していないようで、その理由がわかりません。

入力を取得して 2 つを比較するコードは次のとおりです。

//ユーザーが入力したフィルムを取得します。

    int numberOfFilmsCheck;
    numberOfFilmsCheck = 0;
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    Film tempFilm;
    System.out.println("Please enter the names of the films you wish to be in the new schedule");
    System.out.println("Press enter after each one.");

    while(numberOfFilmsCheck < numberOfFilms){
        boolean foundFilm;
        foundFilm = false;
        String inputFilmName = null;
        tempFilm = null;
        String filmName;
        filmName = null;
        try{
            inputFilmName = reader.readLine();
            System.out.println(inputFilmName);
        }
        catch (IOException e){
            System.out.println("Error");
        }

        for(Film film : films){
            film.printFilmName();
            if(inputFilmName.equals(filmName)){
                foundFilm = true;
                tempFilm = film;
                System.out.println("Found film name");
                break;
            }
        }

        if(foundFilm == true){
            newFilmsForSchedule.add(tempFilm);
            numberOfFilmsCheck++;
        }
        else{
            System.out.println("The film you entered has not been recognised.");
            System.out.println("Please enter the film name as shown above.");
        }

そして、フィルム名を返すクラス Film のコードは次のとおりです。

public String getFilmName()
{
    return filmName;
}

そこに不正な印刷ステートメントがあることに気付いた場合は、コードが正しく機能しているかどうかを確認しているだけです。

どんな助けでも大歓迎です!ありがとう

4

2 に答える 2

3

このgetFilmName()関数は非常に便利なもののように見えますが、それを呼び出す場合に限ります :-)

最初は nullに設定されているように見えますがfilmName、実際に変更getFilmName()することはありません (たとえば、 を呼び出して)。したがって、比較の目的では null になります。

次のようなものが必要になると思います:

for(Film film : films){
    film.printFilmName();
    filmName = film.getFilmName();               // <-- Added this.
    if(inputFilmName.equals(filmName)){          // <-- So that this works.
        foundFilm = true;
        tempFilm = film;
        System.out.println("Found film name");
        break;
    }
}
于 2012-04-27T00:48:42.580 に答える
0

このコードを入れてみてください:

System.out.println("'" + inputFilmName + "' vs '" + filmName + "'")

行の前に、if(inputFilmName.equals(filmName)){なぜそれが等しくないかがわかります。ああ、一重引用符に注意してください..

于 2012-04-27T00:52:05.740 に答える