我有一个包含电影的ArrayList。
ArrayList<Movie>movies = new ArrayList<Movie>();
电影有一个属性int movienumber
。
用户可以通过在控制台中输入所需的数字,根据movienumber选择电影。
我将用户选择存储在字段moviechoice
中。
如何根据用户输入将用户选择的电影存储在字段Movie moviechosen
中?
意思是,如何检查用户输入是否与某个Movie
的数字属性匹配,然后将此Movie-object存储在moviechoice
字段中?
答案 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名称(它们遵循标准命名约定)