根据某三国游戏提供的武将资料,完成需求:
// 1.武力值排名前三的值是多少
// 2.求武力值最高3人名字
// 3.统计各个地区的武将
// 4.统计各个年龄段的武将 比如:10~19岁,20~29岁,30~39岁 40~49岁 50~59岁 60岁以上
// 5.统计各个年龄段的武将男女比例
// 6.统计平均年龄
// 7.统计平均年龄最高的地区
代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.util.function.Consumer;
public class Test6 {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("sanguo.txt"));
TreeSet<String> set = new TreeSet<>();
//TreeMap wjmap = new TreeMap<>();
ArrayList<WuJiang> wjlist = new ArrayList<>();
String wujiang = null;
//将武将添加进集合
while ((wujiang = reader.readLine()) != null) {
set.add(wujiang);
}
for (String s : set) {
String regx = "\\s+";
String[] split = s.split(regx);
//System.out.println(split.length);
//if (split.length == 7) {
WuJiang wu = new WuJiang();
Integer of = Integer.valueOf(split[0]);
wu.setName(split[1]);
wu.setHometown(split[2]);
wu.setSex(split[3]);
wu.setStart(Integer.valueOf(split[4]));
wu.setEnd(Integer.valueOf(split[5]));
wu.setForceValue(Integer.valueOf(split[6]));
wjlist.add(wu);
}
//1.求武力值排行前三的人和武力值。
TreeMap<Integer, String> qiansan = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
wjlist.forEach(new Consumer<WuJiang>() {
@Override
public void accept(WuJiang wuJiang) {
qiansan.put(wuJiang.getForceValue(), wuJiang.getName());
}
});
System.out.println("武将战力前三: ");
Set<Map.Entry<Integer, String>> entries = qiansan.entrySet();
int c = 0;
for (Map.Entry<Integer, String> entry : entries) {
System.out.println(entry.getKey() + " " + entry.getValue());
c++;
if (c == 3) {
break;
}
}
// 3.统计各个地区的武将
TreeMap<String, Integer> map = new TreeMap<>();
for (WuJiang jj : wjlist) {
if (!map.containsKey(jj.getHometown())) {
map.put(jj.getHometown(), 1);
} else {
int m = map.get(jj.getHometown());
map.put(jj.getHometown(), m+1);
}
}
System.out.println("各地区武将数目:");
Set<Map.Entry<String, Integer>> ss = map.entrySet();
for (Map.Entry<String, Integer> s : ss) {
System.out.print(s.getKey() + " " + s.getValue()+"\t");
}
System.out.println();
// 7.统计平均年龄最高的地区
TreeMap<String, Integer> treeMap = new TreeMap<>();
for (WuJiang wuJiang : wjlist) {
String hometown = wuJiang.getHometown();
int age =wuJiang.getEnd()-wuJiang.getStart();
if (!treeMap.containsKey(hometown)){
treeMap.put(hometown,age);
}else {
Integer age2 = treeMap.get(hometown);
treeMap.put(hometown,age+age2);
}
}
TreeMap< Integer,String> treeMap1 = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
Set<Map.Entry<String, Integer>> set1 = treeMap.entrySet();
for (Map.Entry<String, Integer> entry : set1) {
int n=entry.getValue()/map.get(entry.getKey());
treeMap1.put(n,entry.getKey());
System.out.println("武将平均年龄最大的地区是: "+entry.getKey()+" 平均年龄: "+n+"岁");
break;
}
//6.统计平均年龄
int age3=0;
for (WuJiang wuJiang : wjlist) {
age3+=(wuJiang.getEnd()-wuJiang.getStart());
}
System.out.println("武将平均年龄: "+age3/wjlist.size());
// 4.统计各个年龄段的武将 比如:10~19岁,20~29岁,30~39岁 40~49岁 50~59岁 60岁以上
// 5.统计各个年龄段的武将男女比
TreeMap<String, Integer> treeMap2 = new TreeMap<>();
TreeMap<String, Integer> treeMap3 = new TreeMap<>();
TreeMap<String, Integer> treeMap4 = new TreeMap<>();
TreeMap<String, Integer> treeMap5 = new TreeMap<>();
TreeMap<String, Integer> treeMap6 = new TreeMap<>();
TreeMap<String, Integer> treeMap7 = new TreeMap<>();
int a=0, a1=0,b=0,b1=0,c=0,c1=0,d=0,d1=0,e=0,e1=0,f=0,f1=0;
for (WuJiang wuJiang : wjlist) {
if (wuJiang.getEnd()-wuJiang.getStart()>=10&&wuJiang.getEnd()-wuJiang.getStart()<20){
treeMap2.put(wuJiang.getName(),wuJiang.getEnd()-wuJiang.getStart());
if (wuJiang.getSex().equals("男")){
a++;
}else {
a1++;
}
}
else if (wuJiang.getEnd()-wuJiang.getStart()>=20&&wuJiang.getEnd()-wuJiang.getStart()<30) {
treeMap3.put(wuJiang.getName(),wuJiang.getEnd()-wuJiang.getStart());
if (wuJiang.getSex().equals("男")){
b++;
}else {
b1++;
}
}else if (wuJiang.getEnd()-wuJiang.getStart()>=30&&wuJiang.getEnd()-wuJiang.getStart()<40) {
treeMap4.put(wuJiang.getName(),wuJiang.getEnd()-wuJiang.getStart());
if (wuJiang.getSex().equals("男")){
c++;
}else {
c1++;
}
}else if (wuJiang.getEnd()-wuJiang.getStart()>=40&&wuJiang.getEnd()-wuJiang.getStart()<50) {
treeMap5.put(wuJiang.getName(),wuJiang.getEnd()-wuJiang.getStart());
if (wuJiang.getSex().equals("男")){
d++;
}else {
d1++;
}
}else if (wuJiang.getEnd()-wuJiang.getStart()>=50&&wuJiang.getEnd()-wuJiang.getStart()<60) {
treeMap6.put(wuJiang.getName(),wuJiang.getEnd()-wuJiang.getStart());
if (wuJiang.getSex().equals("男")){
e++;
}else {
e1++;
}
}else if (wuJiang.getEnd()-wuJiang.getStart()>=60) {
treeMap7.put(wuJiang.getName(),wuJiang.getEnd()-wuJiang.getStart());
if (wuJiang.getSex().equals("男")){
f++;
}else {
f1++;
}
}
}
System.out.println("武将年龄在10-19岁的有:"+treeMap2.size()+"人;"+"男女比例为"+a+"/"+a1);
System.out.println("武将年龄在20-29岁的有:"+treeMap3.size()+"人;"+"男女比例为"+b+"/"+b1);
System.out.println("武将年龄在30-39岁的有:"+treeMap4.size()+"人;"+"男女比例为"+c+"/"+c1);
System.out.println("武将年龄在40-49岁的有:"+treeMap5.size()+"人;"+"男女比例为"+d+"/"+d1);
System.out.println("武将年龄在50-59岁的有:"+treeMap6.size()+"人;"+"男女比例为"+e+"/"+e1);
System.out.println("武将年龄在60岁以上的有:"+treeMap7.size()+"人;"+"男女比例为"+f+"/"+f1);
}
}
class WuJiang {
//private int xuhao;
private String name;
private String hometown;
private String sex;
private int start;
private int end;
private int forceValue;
public WuJiang() {
}
public WuJiang(String name, String hometown, int start, int end, int forceValue) {
this.name = name;
this.hometown = hometown;
this.start = start;
this.end = end;
this.forceValue = forceValue;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHometown() {
return hometown;
}
public void setHometown(String hometown) {
this.hometown = hometown;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public int getForceValue() {
return forceValue;
}
public void setForceValue(int forceValue) {
this.forceValue = forceValue;
}
}
结果:
武将战力前三:
100 吕布
98 张飞
97 关羽
各地区武将数目:
上庸 2 下邳 16 云南 17 会稽 8 北平 15 北海 5 南皮 13 吴 10 天水 17 宛 14 寿春 5 小沛 6 平原 5 庐江 13 建业 21 成都 21 新野 4 无 5 晋阳 15 柴桑 11 桂阳 6 梓潼 10 武陵 7 汉中 7 汝南 8 江夏 10 江州 12 江陵 17 洛阳 30 濮阳 20 蓟 4 襄平 7 襄阳 16 西凉 4 许昌 19 邺 22 长安 13 长沙 6 陈留 26 零陵 7
武将平均年龄最大的地区是: 上庸 平均年龄: 64岁
武将平均年龄: 50
武将年龄在10-19岁的有:2人;男女比例为2/0
武将年龄在20-29岁的有:11人;男女比例为9/2
武将年龄在30-39岁的有:104人;男女比例为95/9
武将年龄在40-49岁的有:136人;男女比例为129/7
武将年龄在50-59岁的有:97人;男女比例为89/8
武将年龄在60岁以上的有:124人;男女比例为119/5
Process finished with exit code 0