1

我有一个包含电影的 ArrayList。

ArrayList<Movie>movies = new ArrayList<Movie>();

电影有一个属性int movienumber

用户可以通过在控制台中输入所需的数字来根据电影编号选择电影。我将用户选择存储在一个字段中moviechoice

如何Movie moviechosen根据用户输入将用户选择的电影存储在字段中?意思是,如何检查用户输入是否与某个的 number 属性匹配Movie,然后将此 Movie-object 存储在该moviechoice字段中?

4

4 回答 4

3

对我来说,这听起来你实际上需要 aMap<Integer, Movie>而不是 a List

Map<Integer, Movie> movies = new HashMap<Integer, Movie>();

// for each movie
movies.put(movie.getNumber(), movie);

...
// retrieving the selected movie
Movie selectedMovie = movies.get(movieNumber);

if (selectedMovie == null)
  System.out.println("Invalid movie number!");

(我假设电影编号是唯一的——我相信这不是一个强有力的假设,因为没有这个,你的列表查找也会是模棱两可的。)

除了使用Map更直观、更清晰、需要更少的代码之外,它还提供了几乎恒定的时间查找,同时List具有 O(n)。如果您有大量电影,这将有所作为。

于 2010-10-17T13:32:24.290 回答
1

在这种情况下,您别无选择,只能遍历 ArrayList 并比较值:

for(Movie m : movies){
    if(  m.getTheNumberYouAreTalkingAbout() == numberSelected  ){
        moviechoice = m;
        break;
    }
}

如果编号是唯一的,您可能希望之前将所有电影保存在 a 中HashMap

Map<Integer, Movie>movies = new HashMap<Integer, Movie>();

并使用Hashmap的key来保存movienumber。这样你只需要这样做:

moviechoice = movies.get(numberSelected);
于 2010-10-17T13:35:23.243 回答
0

如何根据用户输入将用户选择的电影存储在电影电影选择字段中?意思是,如何检查用户输入是否与某个 Movie 的 number 属性匹配,然后将此 Movie-object 存储在 moviechoice 字段中?

这样的事情应该做。

Movie moviechosen = null;

for (Movie m : movies)
    if (m.movienumber == moviechoice)
        moviechosen = m;

if (moviechosen == null)
    System.out.println("Invalid choice!");

您可能还需要考虑将电影存储在Map<Integer, Movie>. 在这种情况下,你可以简单地做

Movie moviechoen = movies.get(moviechoice);

但是,请注意,每个电影编号只能有一个电影对象。

于 2010-10-17T13:32:17.947 回答
0

就像是:

for(Movie movie : movies)
{
    if(movie.getMoveiNumber() == moviechoice)
    {
        moviechosen = movie;
    }
}

movieChoice 和 movieChosen 将是更好的 Java 名称(它们遵循标准命名约定)

于 2010-10-17T13:33:59.933 回答