为什么这段代码不会认识到这两个变量是一样的?

时间:2012-04-27 00:30:14

标签: java compare

嘿我试图从用户那里获取一个String输入(在这种情况下是一个电影的名字,例如Good Burger)。我有一个类电影的arraylist,我正在迭代。在每次迭代中,调用类Film实例中的方法,该方法返回电影名称的String。当我比较这两者时,似乎并没有意识到它们是平等的,我无法弄清楚原因。

继承了输入并比较两者的代码:

//获取用户输入的电影。

    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;
}

如果您发现其中有任何流氓打印声明,我只是检查代码是否正常工作。

非常感谢任何帮助!感谢

2 个答案:

答案 0 :(得分:3)

getFilmName()函数看起来非常有用,但只有当你最终调用它时: - )

您似乎在开始时将filmName设置为null,然后您实际上从未更改(例如,通过调用getFilmName())。因此,为了进行比较,它将为空。

我怀疑你可能需要这样的东西:

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;
    }
}

答案 1 :(得分:0)

尝试输入此代码:

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

if(inputFilmName.equals(filmName)){行之前,您将看到为什么它不相等。哦注意单引号..