2010-10-17 125 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