1.需求分析

现在有课程若干,需要在用户打开客户端时,推荐给用户相关内容。具体推荐规则如下:

  • 有3个以上4分以上的:“基于您的个人能力测试,发现您的【xxx、xxx、xxx】很强”;
    a) Xxx: 为能力,随机选3个最高值。
    比如:您的基于您的个人能力测试,发现您“语言能力、英语能力、逻辑能力”能力很强
  • ¬ 有4分以上的:“基于您的个人能力测试,发现您的【xxx、xxx、xxx】比较不错”;
    a) Xxx: 为能力,随机选3个最高值。
  • ¬ 没有4分以上的,3分及以下,提示能力最高的3个;同样分值,随机取几个,凑个3个能力:
    a) 基于您的个人能力测试,发现您的【xxx、xxx 】能力比较均衡.;
    比如:您的基于您的个人能力测试,发现您“语言能力、英语能力、逻辑能力”能力均衡

2.实现思路

设计思路其实很简单,我们需要把获取到的分数降序排序,如果相同就随机推荐相同分值的科目。

因为是K-V值关系的数据关系,所以可以选择用Map,用到排序,选用Map中的TreeMap,自己定义排序规则,需手写Compare方法。

3.具体代码

public class demo {public static void main(String[] args) {String result = "";Integer finalSize = 3;double math = 4.2;double chinese = 3;double english = 2;double computer = 3;double design = 3;double practice = 1;Map<String,Object> map = new HashMap<String, Object>();map.put("数学能力",math);map.put("语言能力",chinese);map.put("英文能力",english);map.put("逻辑能力",computer);map.put("设计能力",design);map.put("体育能力",practice);Map<String,Double> good = new HashMap<String, Double>();Map<String,Double> normal = new HashMap<String, Double>();Map<String,Double> bad = new HashMap<String, Double>();for (Map.Entry<String,Object> entry : map.entrySet()) {Double score =  (Double) entry.getValue();String classes = entry.getKey();if (score >= 4) {good.put(classes,score);} else if (score>=3 && score<4) {normal.put(classes,score);} else {bad.put(classes,score);}}Map<String, Double> map1 = new TreeMap<String, Double>(new MapValueComparator<Double>(good));Map<String, Double> map2 = new TreeMap<String, Double>(new MapValueComparator<Double>(normal));Map<String, Double> map3 = new TreeMap<String, Double>(new MapValueComparator<Double>(bad));map1.putAll(good);map2.putAll(normal);map3.putAll(bad);String[] keys = map1.keySet().toArray(new String[0]);String[] keys1 = map2.keySet().toArray(new String[0]);String[] keys2 = map3.keySet().toArray(new String[0]);System.out.println("测试前:"+map.toString());if (good.size() >= 3) {System.out.println("基于您的个人能力测试,发现您的【"+Random(keys,result,finalSize)+"】能力很强");} else if (good.size()>0 && (normal.size()+good.size()>=3 || bad.size()+good.size()>=3)) {for (String xx : keys) {  result += (result == "" || result == null) ? xx : ","+xx;}finalSize -= keys.length;if (normal.size()+good.size() >= 3) {System.out.println("基于您的个人能力测试,发现您的【"+Random(keys1,result,finalSize)+"】比较不错");} else if (bad.size()+good.size() >= 3 &&  normal.size() == 0) {System.out.println("基于您的个人能力测试,发现您的【"+Random(keys2,result,finalSize)+"】比较不错");} else {for (String xx : keys1) {  result += (result == "" || result == null) ? xx : ","+xx;}finalSize -= keys1.length;System.out.println("基于您的个人能力测试,发现您的【"+Random(keys2,result,finalSize)+"】比较不错");}} else {if (keys1.length >= 3) {System.out.println("基于您的个人能力测试,发现您的【"+Random(keys1,result,finalSize)+"】比较均衡");} else {for (String xx : keys1) {  result += (result == "" || result == null) ? xx : ","+xx;}finalSize -= keys1.length;System.out.println("基于您的个人能力测试,发现您的【"+Random(keys2,result,finalSize)+"】比较均衡");}}}/*** @Author Ragty* @Description  随机科目* @Date 11:07 2019/4/8**/public static String Random(String[] keys,String result,Integer finalSize) {for (int i=0; i<finalSize; i++) {result += (result == "" || result == null) ? keys[i] : ","+keys[i];}return result;}/*** @Author Ragty* @Description  比较器(按值排序,相同的随机取值)* @Date 10:38 2019/4/9**/public static class MapValueComparator<T extends Comparable<T>> implements Comparator<String> {private Map<String, T> map = null;public MapValueComparator(Map<String, T> map) {this.map = map;}public int compare(String o1, String o2) {int r = map.get(o2).compareTo(map.get(o1));if (r != 0) {return r;}int randomOne = (int) (Math.random() * 10);int randomTwo = (int) (Math.random() * 10);return randomOne - randomTwo;}}}

4.测试结果(多组结果)

测试前:{语言能力=4.2, 设计能力=3.0, 英文能力=2.0, 数学能力=3.0, 逻辑能力=3.0, 体育能力=1.0}
---------------------------------------------------------------------------------------
基于您的个人能力测试,发现您的【语言能力,数学能力,设计能力】比较不错测试前:{语言能力=4.2, 设计能力=3.0, 英文能力=2.0, 数学能力=3.0, 逻辑能力=3.0, 体育能力=1.0}
---------------------------------------------------------------------------------------
基于您的个人能力测试,发现您的【语言能力,逻辑能力,设计能力】比较不错测试前:{语言能力=4.2, 设计能力=3.0, 英文能力=2.0, 数学能力=3.0, 逻辑能力=3.0, 体育能力=1.0}
---------------------------------------------------------------------------------------
基于您的个人能力测试,发现您的【语言能力,数学能力,逻辑能力】比较不错

Java实现课程推荐算法相关推荐

  1. Vue.js+Mysq+java+springboot+商品推荐算法实现商品推荐网站+商品管理系统后台

    面对海量的商品信息如何实现针对不同用户维度开展个性化商品推荐,实现用户线上选购商品,下订单,支付,物流配送等?本次毕设程序基于前后端分离开发模式,搭建系统网络商品推荐系统前台与系统后台商品管理系统,通 ...

  2. java转python推荐算法_java和python实现一个加权SlopeOne推荐算法

    1 importjava.util.HashMap;2 importjava.util.Map;3 importjava.util.List;4 importjava.util.ArrayList;5 ...

  3. Java语言开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发ShopRec ...

  4. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

  5. Java语言springboot开发框架实现个性化美食推荐网 在线美食推荐系统 基于用户、物品的协同过滤推荐算法实现

    Java语言springboot开发框架实现个性化美食推荐网 在线美食推荐系统 基于用户.物品的协同过滤推荐算法实现WebFoodRecSystem 一.项目简介 1.开发工具和使用技术 IDEA/E ...

  6. 使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户、物品的协同过滤推荐算法实现 大数据、人工智能、机器学习项目开发

    使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户.物品的协同过滤推荐算法实现 大数据.人工智能.机器学习项目开发Fo ...

  7. 使用Java语言开发在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户、物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis)开发框架 机器学习、人工智能、大数据开发

    使用Java语言开发在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户.物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis)开发框架 机器学习.人工智能.大数据开发 ...

  8. 使用Java+SSM框架+JSP开发简单在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户、物品的协同过滤推荐算法 大数据 机器学习 SimpleMovieRecommendOnline

    使用Java+SSM框架+JSP开发简单在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户.物品的协同过滤推荐算法 大数据 机器学习 SimpleMovieRecommendOnline 一.项目简 ...

  9. Java开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 京东商城爬虫 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 京东商城爬虫 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发Sh ...

最新文章

  1. java getservername_Tomcat:getHeader(“主机”)与getServerName()
  2. LaneATT调试笔记
  3. Ether-channel 以太网通道
  4. 洛谷P2763 试题库问题
  5. SAP Table Relationship of Material Classification
  6. Java精选笔记_XML基础
  7. 面对 iPad,Surface 的键盘是必杀技
  8. C++ 多继承和虚继承的内存布局
  9. python常用方法总结-Python3常用函数、方法总结(持续更新…)
  10. 51单片机c语言测距,超声波HM55B测距(STC10F08单片机C程序)
  11. 【Docker 入门】Docker简介与安装
  12. 后疫情时代:对话下一个 10 年的技术趋势
  13. Wi-Fi 还是蜂窝?搞物联网怎么选择连接协议?
  14. 《电子基础与维修工具核心教程》——第2章 电阻2.1 电阻器介绍
  15. xcode4 引入poco库
  16. 同步与互斥的基本原理
  17. 【Web前端】儿童摄影网——网页制作代码
  18. 淘宝运营 高客单价的特点、推广引流方式
  19. SpringBoot统一返回处理出现cannot be cast to java.lang.String异常
  20. 空间管理员(一)AFS文件目录系统索引节点vfs_inode结构

热门文章

  1. opencv.js 4点透视变换
  2. VMWare16Pro 调整中文
  3. python制作二维码_基于Python生成个性二维码过程详解
  4. 阿里云共享专线和独享专线的区别
  5. JavaEE框架类——监听器(观察者模式)和Servlet技术的监听器session沌化与活化技术
  6. 考研复试怎么穿搭?看这一篇就够了!
  7. 最近在做的用户留存分析,和几种方法。
  8. 用python求两个人的平均身高_大学python题 求大佬解答!!!
  9. python程序性能监控
  10. 采用html 的a标签,href连接为文件时无法下载解决方案