题目要求:
实验2-1:字符串content是一个超市的历次购物小票的合计,每个分号一次购物,每个商品之间用半角逗号分开。请开发程序完成如下功能: 找出哪两个商品总被同时购买的频率最高(不考虑商品的先后顺序)。
- Java遍历Map对象的四种方式
参考: https://www.cnblogs.com/fqfanqi/p/6187085.html
我用了在for-each循环中遍历keys或values:
int max = 0;
String theKey = null;
for(String key : map.keySet()) {
int nowVal = map.get(key);
if(max<nowVal) {
max = nowVal;
theKey = key;
}
}
- 代码
package com.huawei.classroom.student.h02;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Home02 {
public Home02() {
// TODO Auto-generated constructor stub
}
/**
* 字符串content是一个超市的历次购物小票的合计,每次购物的明细之间用分号分割,每个商品之间用半角逗号分开
* 请找出 哪两个商品被同时购买的频率最高,将这2个商品名称返回,名称之间用逗号分隔
* @param content,历次购物的明细,例如:炸鸡,可乐,啤酒;薯片,啤酒,炸鸡;啤酒,雪碧,炸鸡
* @return 哪两个商品被同时购买的频率最高,将这2个商品名称返回,名称之间用逗号分隔
*/
public String getFrequentItem(String content) {
String[] contents = content.split(";");
Map<String, Integer> map = new HashMap<>();
for(int i=0;i<contents.length;i++) {
String[] single = contents[i].split(",");
for(int j=0;j<single.length;j++) {
for(int k=1;k<=single.length-1;k++) {
int nextIndex = (j+k)%(single.length);
String key = single[j]+","+single[nextIndex];
// String key2 = single[nextIndex]+","+single[j];
if(map.containsKey(key)) {
int newVal = map.get(key) + 1;
map.put(key, newVal);
// map.put(key2, newVal);
}else {
map.put(key, 0);
}
}
}
}
int max = 0;
String theKey = null;
for(String key : map.keySet()) {
int nowVal = map.get(key);
if(max<nowVal) {
max = nowVal;
theKey = key;
}
}
// System.out.println(theKey + max);
return theKey;
}
}
- 测试
/**
*
*/
package com.huawei.classroom.student.h02;
/**
* @author Administrator
*
*/
public class Test {
/**
*
*/
public Test() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String content = "炸鸡,可乐,啤酒;薯片,啤酒,炸鸡;啤酒,雪碧,炸鸡;可乐,牙膏;可乐,面包;啤酒,面包;可乐,榨菜;啤酒,雪碧";
Home02 h=new Home02();
String result=h.getFrequentItem(content);
if(result.equals("炸鸡,啤酒")||result.equals("啤酒,炸鸡")) {
System.out.println("做对了");
}
else System.out.println("做错了");
}
}
网友评论