先看空指針異常:
List<MovieInfo> movieInfos= null;
這樣創建時,list指向爲空,修改方法:
List<MovieInfo> movieInfos= new ArrayList<MovieInfo>();
再看list循環賦值的問題:
問題描述:
for (i=0;i<10;i++){
movieInfoSum.movieId = (int)recommendation.get(i).getItemID();
movieInfoSum.movieName = movieInfos.get(i).getMovieName();
movieInfoSum.movieType = movieInfos.get(i).getMovieType();
movieInfoSum.value = recommendation.get(i).getValue();
movieInfoSums.add(movieInfoSum);
}
這段代碼在每一次循環時,都會將新的數值賦值到已保存的list中,比如,
第一個循環結束後:
數據正常加入,進行第二個循環過程中:
List movieInfoSums中已存入的下標0的值改變了,經過蒙逼半天后查找資料(https://blog.csdn.net/single_cong/article/details/80560616),發現是因爲值類型和引用類型沒區分好的問題
修改方法:
for (i=0;i<10;i++){
MovieInfoSum movieInfoSum = new MovieInfoSum();//將對象創建語句放在循環內
movieInfoSum.movieId = (int)recommendation.get(i).getItemID();
movieInfoSum.movieName = movieInfos.get(i).getMovieName();
movieInfoSum.movieType = movieInfos.get(i).getMovieType();
movieInfoSum.value = recommendation.get(i).getValue();
movieInfoSums.add(movieInfoSum);
}
總結:1,List創建時不置空,2,將對象傳入List時要new新的對象。