答案:设计User、Movie、Rating类并用Map和List存储数据,通过统计用户评分偏好类型实现基于内容的推荐,结合控制台交互功能提供个性化电影推荐。

开发一个简易的电影评分与推荐系统,可以使用Java结合基础的数据结构和简单的推荐算法来实现。重点在于管理用户、电影、评分数据,并基于用户行为提供个性化推荐。以下是具体实现思路和步骤。
1. 设计核心类与数据结构
系统需要几个核心类来表示实体和关系:
- User:包含用户ID和名称
- Movie:包含电影ID、名称和类型(如动作、喜剧)
- Rating:记录用户对电影的评分(如1-5分)
- RecommendationSystem:主逻辑类,负责存储数据并生成推荐
class User {
int userId;
String name;
public User(int userId, String name) {
this.userId = userId;
this.name = name;
}
}
class Movie {
int movieId;
String title;
String genre;
public Movie(int movieId, String title, String genre) {
this.movieId = movieId;
this.title = title;
this.genre = genre;
}
}
class Rating {
int userId;
int movieId;
int score; // 1-5
public Rating(int userId, int movieId, int score) {
this.userId = userId;
this.movieId = movieId;
this.score = score;
}
}
2. 存储与管理数据
使用Map和List来保存用户、电影和评分数据,便于快速查找和操作。
- 用
Map按ID存储用户 - 用
Map存储电影 - 用
List或Map(组合键)存评分
初始化一些测试数据,方便后续计算推荐。
立即学习“Java免费学习笔记(深入)”;
3. 实现简单推荐逻辑
可以采用“基于内容的推荐”或“协同过滤”的简化版本。
- 统计用户评过分的电影类型
- 找出用户偏好的类型(平均分高的)
- 推荐该类型中尚未看过的高分电影
public ListrecommendByGenre(int userId) { // 获取用户所有评分 List userRatings = ratings.stream() .filter(r -> r.userId == userId) .toList(); // 计算用户对各类型的平均分 Map genreScores = new HashMap<>(); Map genreCount = new HashMap<>(); for (Rating r : userRatings) { Movie m = movies.get(r.movieId); if (m != null) { genreScores.put(m.genre, genreScores.getOrDefault(m.genre, 0.0) + r.score); genreCount.put(m.genre, genreCount.getOrDefault(m.genre, 0) + 1); } } // 找出用户最喜欢的类型 String favoriteGenre = null; double maxAvg = 0; for (String genre : genreScores.keySet()) { double avg = genreScores.get(genre) / genreCount.get(genre); if (avg > maxAvg) { maxAvg = avg; favoriteGenre = genre; } } // 推荐该类型中未评分的高分电影 return movies.values().stream() .filter(m -> m.genre.equals(favoriteGenre)) .filter(m -> userRatings.stream().noneMatch(r -> r.movieId == m.movieId)) .sorted((a, b) -> Double.compare(getAverageRating(b.movieId), getAverageRating(a.movieId))) .limit(5) .toList(); }
4. 添加交互功能
通过控制台输入输出,让用户添加评分、查看推荐。
- 使用
Scanner读取用户输入 - 提供菜单:查看推荐、评分电影、退出
例如:
System.out.println("1. 评分电影 2. 查看推荐 3. 退出");
int choice = scanner.nextInt();
根据选择调用对应方法。
基本上就这些。这个系统虽简单,但涵盖了推荐系统的基本要素:数据建模、用户行为分析和推荐生成。后续可扩展为Web应用,加入更多算法如余弦相似度或用户协同过滤。










