2010-10-17 58 views
1

我有一个包含电影的ArrayList。如何根据用户选择选择ArrayList元素

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

电影有一个属性int movienumber

用户可以根据移动号码,通过在控制台中输入所需号码来选择电影。 我将用户选择存储在字段moviechoice中。

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

+0

这是movienumber唯一吗? – st0le 2010-10-17 13:46:54

回答

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)。如果你有大量的电影,这将有所作为。

+0

假设它是电影租赁服务。在这种情况下,他可能有一个从movienumber到电影的一对多关系。 – aioobe 2010-10-17 13:37:15

+0

@aioobe,我怀疑电影租赁,你或多或少有规律地得到一个不同的电影比你想要的,将生存很长时间:-) – 2010-10-17 13:42:06

+0

嘿,我只是说,如果一个电影对象代表一个物理光盘和movienumber是一个参考光盘上的特定电影,它没有任何意义:-) – aioobe 2010-10-17 15:42:41

0

如何根据用户输入将用户选择的电影存储在电影moviechosen字段中?意思是,如何检查用户输入是否与某个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只能有一个电影对象。

0

类似:

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

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

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); 
+0

只是一个侧面说明:接口的程序,而不是执行_因此'地图<整数,电影>电影= ...'会更好。 – 2010-10-18 07:57:29

+0

你说得对。让我改变它。 – Cristian 2010-10-18 14:23:14