0

我收到一条错误消息,无法从字符串转换为电影。为什么我会收到此错误消息,我应该在第一个 if 语句中返回什么。我应该调用电影类吗?

public Movie findMovieByName(String inTitle) {
    for (Movie movies : movieArray)
        if (inTitle == movies.getTitle())
            return movies.getTitle();
        else
            return null;
4

5 回答 5

3

你可以这样做:

public Movie findMovieByName(String inTitle) {
    for (Movie movie : movieArray) {
       if (inTitle.equals(movie.getTitle()) {
         return movie;
       }
    }

    return null;
}

变化:

  • 用于String.equals比较String内容。==比较对象引用
  • 在检查完所有null内容之前不要返回 Movie

旁注:Map<String, Movie>如果查找频繁,可以在此处使用A。

于 2013-02-10T18:21:41.573 回答
1

您已返回标题而不是电影

于 2013-02-10T18:22:52.237 回答
1

您的代码有两个主要问题:

第一个在这里:

if (inTitle == movies.getTitle())

== 运算符将 String inTitle 的实例与 movies.getTitle() 返回的 String 的实例进行比较。但是您要做的是比较两个实例中包含的字符,看看它们是否相同。为此,您应该编写:

if (inTitle.equals(movies.getTitle()))

第二个问题是您的 findMovieByName 方法应该返回一个 Movie 实例,但您返回的是一个字符串:

return movies.getTitle();

您应该改为执行以下操作:

return movies;
于 2013-02-10T18:28:11.400 回答
0

假设movies.getTitle()返回一个字符串,您可以(并且应该)使用:

inTitle.compareTo(movies.getTitle()) == 0

而且,当然,返回您输入的相同标题有什么意义?您可以返回一个true值,表示inTitle找到 的值,或者返回电影(这是您的过程定义所说的。因此,您的过程将如下所示:

public Movie findMovieByName(String inTitle) {
   for(Movie movies : moviesArray) {
       if (inTitle.compareTo(movies.getTitle()) == 0)
           return movies;
       else
           return null;
   }
}

compareToIgnoreCase如果您希望比较不区分大小写,也可以使用。

请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#compareTo(java.lang.String)http://docs.oracle.com/javase/ 1.4.2/docs/api/java/lang/String.html#compareToIgnoreCase(java.lang.String)

希望这可以帮助。

于 2013-02-10T18:31:57.057 回答
0
public Movie findMovieByName(String inTitle) {
    for (Movie movies : movieArray){
        if (inTitle.equals(movies.getTitle())){
            return movies.getTitle();
        }
    }
    return null;
}

正如我从您的代码中看到的那样,movies.getTitle()要么返回一个对象,要么返回Movie一个String对象。

但是根据您的错误消息,我很确定您的意思return moviesreturn movies.getTitle()

于 2013-02-10T18:21:26.587 回答