// 建立用户数组 除了目标用户外 随机再抽取9个用户 String[] users = new String[10]; users[0] = this.userid; List<Users> usersList = this.usersDAO.getUsers(this.userid); System.out.println("users == > " + usersList.size()); } List<Goods> goodsList = this.goodsDAO.getAllGoods(); this.goods = new String[goodsList.size()]; for (int j = 0; j < goodsList.size(); j++) { this.goods[j] = goodsList.get(j).getGoodsid(); } // 建立二维数组 用户如果浏览了商品则标记为1未浏览则标记为0,之后计算用户之间的相似度 int[][] allUserGoodshist = new int[10][goodsList.size()]; for (int i = 0; i < 10; i++) { for (int j = 0; j < goodsList.size(); j++) { String goodsid = this.goods[j]; Hist hist = new Hist(); hist.setUsersid(users[i]); hist.setGoodsid(goodsid); List<Hist> histList = this.histDAO.getHistByCond(hist); } } for (int i = 0; i < 10; i++) { for (int j = 0; j < goodsList.size(); j++) { if (j == goodsList.size() - 1) { System.out.print(allUserGoodshist[i][j]); } else { System.out.print(allUserGoodshist[i][j] + " ,"); } } System.out.println(""); } this.targetUserCommentedGoods = new ArrayList<String>(); Hist hist = new Hist(); hist.setUsersid(this.userid); List<Hist> histList = this.histDAO.getHistByCond(hist); for (int i = 0; i < histList.size(); i++) { // 计算用户相似度,对相似度进行排序 this.calcUserSimilarity(allUserGoodshist, goodsList.size()); // 计算商品推荐度,进行排序 this.calcRecommendGoods(allUserGoodshist, goodsList.size()); // 处理并生成推荐商品列表 this.handleRecommendGoods(allUserGoodshist, goodsList.size()); String rommendId = ""; for (int i = 0; i < this.targetRecommendGoods.size(); i++) { String item = this.targetRecommendGoods.get(i); if (!commentedGoods.contains(item)) { if (i == this.targetRecommendGoods.size() - 1) { rommendId += item; } else { rommendId += item + ","; } } }
时间: 2023-06-17 09:05:42 浏览: 60
这段代码是一个基于用户的协同过滤算法,用于推荐商品给用户。首先,从数据库中获取用户浏览商品的历史记录,然后建立一个二维数组,用于记录用户是否浏览过每个商品。接下来,计算用户之间的相似度,对相似度进行排序,计算商品推荐度,进行排序,最后生成推荐商品列表。其中,处理推荐商品列表时,将已经评论过的商品从推荐列表中移除。
相关问题
如何在Java中实现一个控制台版的幸运抽奖程序,包括用户注册登录和随机奖品抽取功能?
实现一个完整的幸运抽奖程序需要对Java的多个知识点有深入的理解和实践,包括数组、循环、控制流语句、异常处理、随机数生成等。首先,需要设计用户注册和登录功能,它们涉及到数组和循环的使用来存储用户信息,并通过控制流语句处理用户输入的数据和验证过程。接下来,抽奖功能的实现需要使用随机数生成器来选择奖品。下面是一个简化的抽奖程序实现的示例:
参考资源链接:[Java编程:幸运抽奖系统设计与实现](https://wenku.csdn.net/doc/qijkg9yi2s?spm=1055.2569.3001.10343)
1. 用户注册与登录:
```java
import java.util.ArrayList;
import java.util.Scanner;
public class LuckyDraw {
private static ArrayList<User> users = new ArrayList<>();
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
while (true) {
System.out.println(
参考资源链接:[Java编程:幸运抽奖系统设计与实现](https://wenku.csdn.net/doc/qijkg9yi2s?spm=1055.2569.3001.10343)
如果有多个常量字段需要拼接呢
如果有多个常量需要拼接,你可以将拼接的逻辑抽取成一个方法,如下所示:
```java
public final class Constants {
public static final String BASE_URL = "https://www.example.com";
public static final String API_SUFFIX = "/api";
public static final String USER_SUFFIX = "/users";
public static final String POST_SUFFIX = "/posts";
private Constants() {
// private constructor to prevent instantiation
}
public static String getUrl(String... suffixes) {
StringBuilder sb = new StringBuilder(BASE_URL);
sb.append(API_SUFFIX);
for (String suffix : suffixes) {
sb.append(suffix);
}
return sb.toString();
}
}
```
在上述代码中,我们定义了`BASE_URL`、`API_SUFFIX`、`USER_SUFFIX`和`POST_SUFFIX`四个常量,其中`API_SUFFIX`是API的前缀,`USER_SUFFIX`和`POST_SUFFIX`是API路径的后缀。我们新增了一个名为`getUrl`的方法,该方法接受可变数量的后缀参数,将这些后缀拼接在一起并返回完整的URL字符串。
在使用时,可以通过如下方式调用常量:
```java
String url1 = Constants.getUrl(Constants.USER_SUFFIX);
String url2 = Constants.getUrl(Constants.POST_SUFFIX);
String url3 = Constants.getUrl(Constants.USER_SUFFIX, "/1");
String url4 = Constants.getUrl(Constants.POST_SUFFIX, "/2");
```
这样就可以获得拼接好的完整URL字符串了。需要注意的是,由于我们使用了可变数量的后缀参数,因此可以传入任意数量的后缀参数,例如上述代码中的`getUrl`方法可以接受一个或多个后缀参数。
阅读全文