学生选课
1 JAVA編程實現如下需求:
2
3 2017年05期培訓班組織技術學習與分享,有如下技術可供選擇:
4 VirtualBox
5 Vagrant
6 WebSocket
7 JSONP
8 Redis
9 MongoDB
10 Cassandra
11 RabbitMQ
12 ActiveMQ
13 Kafka
14 Lucene
15 Solr
16 ElasticSearch
17 Hadoop
18 HDFS
19 HIVE
20 PIG
21 Mahout
22 HBase
23 Spark
24 Guava
25 Protobuf
26 Avro
27 Thrift
28 Motan
29 Docker
30 DynamoDB
31 Scala
32 Groovy
33 SpringBoot
34
35 學員每人選擇其中兩項進行學習,并在學習會以Demo的形式分享給其他同事。學員們的意向如下:
36 呂鵬飛 ElasticSearch Redis
37 丁虎 Redis SpringBoot
38 梁秀斗 Hadoop HDFS
39 李文鵬 Docker Kafka
40 苗恒飛 Lucene Solr
41 佘昊 Solr Redis
42 杜世陽 ActiveMQ Hadoop
43 劉翩 SpringBoot ActiveMQ
44 史建智 Docker Lucene
45 王帥 Cassandra Spark
46 張昌昌 SpringBoot MongoDB
47 王騰飛 SpringBoot Spark
48 楊小平 WebSocket RabbitMQ
49
50 請編寫程序為學員安排最終的技術學習清單,要求:
51
52 · 如果一項技術只有一個學員選擇,則直接為該學員指定該技術
53
54 · 如果一項技術有多個學員選擇,則在選擇了該項技術的學員中隨機指定一位學習該技術
55
56 · 如果一個學員被指定的技術不足兩項,則在未被指定的技術中隨機指定一項或兩項給該學員,以湊足兩項但不能多于兩項。
57
58 · 每個學員被指定的技術不能重復
59
60 · 需要輸出最終的技術指定清單
61
62 · 需要輸出未被指定給學員的技術清單。 1 import java.util.ArrayList;
2 import java.util.HashMap;
3 import java.util.List;
4 import java.util.Map;
5 import java.util.Random;
6 import java.util.Set;
7
8 public class Course {
9 public static void main(String[] args) {
10 Map<String,String> map = initChooseCourse();//學生選課的初始數據
11 List<String> list = initAllCourse();//所有課程
12 int n = list.size()-2*map.size();//剩余課程個數
13 Map<String,String> rmap = new HashMap<>();//最后選課結果
14
15 Map<String,String> nmap = reverseMap(map,list); //key-value顛倒,重復的key拼接到新value里
16
17 List<String> clist = noSelectCourse(list,n);//剩余課程
18
19 /*課程- 學生 集合 轉換成 學生-課程集合,并隨機指定一位學生選擇多個學生選擇的課程,
20 * 其余學生去掉此課程,沒有課程的學生制空*/
21 distinctMap(nmap,rmap);
22
23 buqiCourse(rmap,list); //每個學生補齊至2門課
24
25 System.out.println("\t\t\t學員的技術學習清單:");
26 print(map,rmap);
27
28 System.out.println("\n\n未被指定給學員的技術清單:");
29 System.out.println("\t"+clist);
30 }
31 //每個學生補齊至2門課
32 public static void buqiCourse(Map<String,String> rmap,List<String>list){
33 Set<String> set = rmap.keySet();
34 for (String s : set) {
35 if(rmap.get(s)==null) {
36 rmap.put(s, list.get(0)+" "+list.get(1));
37 list.remove(0);
38 list.remove(0);
39 }else if(rmap.get(s)!=null&&!rmap.get(s).contains(" ")) {
40 rmap.put(s, rmap.get(s)+" "+list.get(0));
41 list.remove(0);
42 }
43 }
44 }
45 /*課程- 學生 集合 轉換成 學生-課程集合,并隨機指定一位學生選擇多個學生選擇的課程,
46 * 其余學生去掉此課程,沒有課程的學生制空*/
47 public static void distinctMap(Map<String,String> nmap,Map<String,String> rmap){
48 Set<String> nset = nmap.keySet();
49 Random r = new Random();
50 for (String ns : nset) {
51 String[] str = nmap.get(ns).split(",");
52 int temp = r.nextInt(str.length);
53 for (int i = 0;i < str.length; i++) {
54 if(i!=temp&&!rmap.containsKey(str[i]))
55 rmap.put(str[i], null);
56 else if(i==temp) {
57 if(rmap.containsKey(str[i])) {
58 if(rmap.get(str[i])!=null)
59 rmap.put(str[i], rmap.get(str[i])+" "+ns);
60 else
61 rmap.put(str[i], ns);
62 }else {
63 rmap.put(str[i], ns);
64 }
65 }
66 }
67 }
68 }
69 //學生-課程 集合 轉換成 課程- 學生集合
70 public static Map<String,String> reverseMap(Map<String,String> map,List<String> list){
71 Map<String,String> nmap = new HashMap<>();
72 Set<String> set = map.keySet();
73 for (String s : set) {
74 String[] str = map.get(s).split(" ");
75 for (String ss : str) {
76 if(nmap.containsKey(ss)) {
77 nmap.put(ss, nmap.get(ss)+","+s);
78 }else {
79 nmap.put(ss, s);
80 }
81 list.remove(ss);
82 }
83 }
84 return nmap;
85 }
86 //打印map集合
87 public static void print(Map<String,String> map,Map<String,String> rmap) {
88 Set<String> set = map.keySet();
89 System.out.println("開始\t\t\t\t最終");
90 for (String s : set) {
91 System.out.println(s+" "+map.get(s)+"\t\t\t"+s+" "+rmap.get(s));
92 }
93 }
94 //為所有課程不夠的學生指定的課程
95 public static List<String> noSelectCourse(List<String> list,int n){
96 List<String> l = new ArrayList<>();
97 Random r = new Random();
98 for (int i = 0; i < n; i++) {
99 int m = r.nextInt(list.size());
100 l.add(list.get(m));
101 list.remove(m);
102 }
103 return l;
104 }
105 //初始選課
106 public static Map<String,String> initChooseCourse(){
107 Map<String,String> map = new HashMap<String, String>();
108 map.put("呂鵬飛","ElasticSearch Redis");
109 map.put("丁虎","Redis SpringBoot");
110 map.put("梁秀斗","Hadoop HDFS");
111 map.put("李文鵬","Docker Kafka ");
112 map.put("苗桓飛","Lucene Solr");
113 map.put("佘昊","Solr Redis");
114 map.put("杜世陽","ActiveMQ Hadoop");
115 map.put("劉翩","SpringBoot ActiveMQ");
116 map.put("史建智","Docker Lucene");
117 map.put("王帥","Cassandra Spark");
118 map.put("張昌昌","SpringBoot MongoDB");
119 map.put("王騰飛","SpringBoot Spark");
120 map.put("楊小平","WebSocket RabbitMQ");
121 return map;
122 }
123 //所有課程
124 public static List<String> initAllCourse(){
125 List<String> list = new ArrayList<>();
126 list.add("VirtualBox");
127 list.add("Vagrant");
128 list.add("WebSocket");
129 list.add("JSONP");
130 list.add("Redis");
131 list.add("MongoDB");
132 list.add("Cassandra");
133 list.add("RabbitMQ");
134 list.add("ActiveMQ");
135 list.add("Kafka");
136 list.add("Lucene");
137 list.add("Solr");
138 list.add("ElasticSearch");
139 list.add("Hadoop");
140 list.add("HDFS");
141 list.add("PIG");
142 list.add("HIVE");
143 list.add("Mahout");
144 list.add("HBase");
145 list.add("Spark");
146 list.add("Guava");
147 list.add("Protobuf");
148 list.add("Avro");
149 list.add("Thrift");
150 list.add("Motan");
151 list.add("Docker");
152 list.add("DynamoDB");
153 list.add("Scala");
154 list.add("Groovy");
155 list.add("SpringBoot");
156 return list;
157 }
158 }
?
轉載于:https://www.cnblogs.com/archimedes-euler/p/9975813.html
總結
- 上一篇: scala中类的继承关系
- 下一篇: python语法学习