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

Java 如何根据用户的选择选择ArrayList元素,java,arraylist,choice,Java,Arraylist,Choice,我有一个包含电影的ArrayList ArrayList<Movie>movies = new ArrayList<Movie>(); ArrayListmovies=newArrayList(); 电影有一个属性int-movienumber 用户可以通过在控制台中输入所需数字,根据movienumber选择电影。 我将用户选择存储在字段moviechoice中 如何根据用户输入将用户选择的电影存储在字段moviemoviechosen? 也就是说,我如何检查用户输

我有一个包含电影的ArrayList

ArrayList<Movie>movies = new ArrayList<Movie>();
ArrayListmovies=newArrayList();
电影有一个属性
int-movienumber

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

如何根据用户输入将用户选择的电影存储在字段
moviemoviechosen
? 也就是说,我如何检查用户输入的内容是否与某部
电影的number属性匹配,然后将该电影对象存储在
moviechoice
字段中

如何根据用户的输入将用户选择的电影存储在“movie moviechosen”字段中?也就是说,如何检查用户输入的内容是否与某部电影的number属性匹配,然后将该电影对象存储在moviechoice字段中

像这样的事情应该可以

Movie moviechosen = null;

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

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

您可能还想考虑将电影存储在<代码>地图中。在这种情况下,你可以简单地做

Movie moviechoen = movies.get(moviechoice);
但是,请注意,每个movienumber只能有一个movie对象

如何根据用户的输入将用户选择的电影存储在“movie moviechosen”字段中?也就是说,如何检查用户输入的内容是否与某部电影的number属性匹配,然后将该电影对象存储在moviechoice字段中

像这样的事情应该可以

Movie moviechosen = null;

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

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

您可能还想考虑将电影存储在<代码>地图中。在这种情况下,你可以简单地做

Movie moviechoen = movies.get(moviechoice);

但是,请注意,每个movienumber只能有一个movie对象。

对我来说,这听起来像是您实际上需要一个
映射
,而不是
列表

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 movies=newhashmap();
//每部电影
movies.put(movie.getNumber(),movie);
...
//正在检索所选电影
Movie selectedMovie=movies.get(movieNumber);
如果(selectedMovie==null)
System.out.println(“无效电影编号!”);
(我假设电影编号是唯一的——我认为这不是一个很强的假设,因为如果没有这个,列表查找也会模棱两可。)


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

对我来说,这听起来像你实际上需要一张
地图而不是
列表

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 movies=newhashmap();
//每部电影
movies.put(movie.getNumber(),movie);
...
//正在检索所选电影
Movie selectedMovie=movies.get(movieNumber);
如果(selectedMovie==null)
System.out.println(“无效电影编号!”);
(我假设电影编号是唯一的——我认为这不是一个很强的假设,因为如果没有这个,列表查找也会模棱两可。)

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

类似于:

for(Movie movie : movies)
{
    if(movie.getMoveiNumber() == moviechoice)
    {
        moviechosen = movie;
    }
}
movieChoice和movieChosen是更好的Java名称(它们遵循标准命名约定)

类似于:

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

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

在这种情况下,您没有选择,只能通过ArrayList循环并比较值:

for(Movie m : movies){
    if(  m.getTheNumberYouAreTalkingAbout() == numberSelected  ){
        moviechoice = m;
        break;
    }
}
如果号码是唯一的,您可能希望以前将所有电影保存在
HashMap

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

在本例中,您别无选择,只能通过ArrayList循环并比较值:

for(Movie m : movies){
    if(  m.getTheNumberYouAreTalkingAbout() == numberSelected  ){
        moviechoice = m;
        break;
    }
}
如果号码是唯一的,您可能希望以前将所有电影保存在
HashMap

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

假设是电影租赁服务。在这种情况下,他可能会有一对多的关系,从电影编号到电影。@aioobe,我怀疑电影租赁,在那里你或多或少会得到一部不同于你想要的电影,是否能长久存在:-)呵呵,我只是说,如果一个电影对象代表一个物理光盘,而movienumber是光盘上特定电影的引用,那就没有意义了:-)@aioobe,我的观点是,如果电影编号不是唯一的,如何从
ArrayList
找到比从
Map
更好的电影?假设这是一个电影租赁服务。在这种情况下,他可能会有一对多的关系,从电影编号到电影。@aioobe,我怀疑电影租赁,在那里你或多或少会得到一部不同于你想要的电影,是否能长久存在:-)呵呵,我只是说,如果一个电影对象代表一个物理光盘,而movienumber是光盘上特定电影的引用,那就没有意义了:-)@aioobe,我的观点是,如果电影编号不是唯一的,如何从
ArrayList
中找到比从
Map
中更好的电影?只是一个旁注:为接口而编程,而不是实现-因此
Mapmovies=…
会更好。只是旁注:为接口而编程,而不是实现-因此
Mapmovies=…
会更好。