如何根据用户选择选择ArrayList元素

时间:2010-10-17 13:29:46

标签: java arraylist choice

我有一个包含电影的ArrayList。

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

电影有一个属性int movienumber

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

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

4 个答案:

答案 0 :(得分:3)

对我而言,这听起来确实需要Map<Integer, Movie>而不是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)。如果你有大量的电影,这将有所作为。

答案 1 :(得分:1)

在这种情况下,你没有选择,但循环遍历ArrayList并比较值:

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

如果该号码是唯一的,您可能希望先将所有电影保存在HashMap中:

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

并使用Hashmap的键来保存movienumber。这样你就必须这样做:

moviechoice = movies.get(numberSelected);

答案 2 :(得分:0)

  

如何根据用户输入将用户选择的电影存储在Movie movie选择字段中?意思是,如何检查用户输入是否与某个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);

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

答案 3 :(得分:0)

类似的东西:

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

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