展开全部
你这个不难,就是字符串处理,
你的文件修改下:每行两两元素636f70793231313335323631343130323136353331333332636336之间的空格用一个,如果超过一个,下面的程序会报错import java.io.File;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class $ {
/** 自然序列,数组下标从零开始,一会再做相应处理 */
private static int[] ASSIGNMENT_IDX = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
26 };
/** 自然序列,数组下标从零开始,一会再做相应处理 */
private static int[] TEST_IDX = { 22, 23, 2, 25, 27, 28 };
public static void main(String[] args) {
Map data = new HashMap();
try {
Scanner in = new Scanner(new File("D:/a.txt"));
while (in.hasNextLine()) {
String str = in.nextLine();
String[] arr = str.split(" ");
String key = arr[0] + arr[1];
int assignment = 0;
int test = 0;
for (int idx : ASSIGNMENT_IDX) {
// 数组下标: 2 + idx - 1
assignment += Integer.parseInt(arr[1 + idx].trim());
}
for (int idx : TEST_IDX) {
// 数组下标: 2 + idx - 1
test += Integer.parseInt(arr[1 + idx].trim());
}
data.put(key, new Bean(assignment, test));
}
// 读取后
System.out.println("读取文件后:");
show(data);
String minkey = getMinBean(data);
System.out.println("assignment最小:" + minkey + "-" + data.get(minkey));
String maxKey = getMaxBean(data);
System.out.println("assignment最大:" + maxKey + "-" + data.get(maxKey));
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getMinBean(Map data) {
Iterator it = data.keySet().iterator();
String minKey = "";
Bean minBean = new Bean(Integer.MAX_VALUE, 0);
while (it.hasNext()) {
String key = it.next();
Bean bean = data.get(key);
if (bean.getAssignment()
minBean = bean;
minKey = key;
}
}
return minKey;
}
private static String getMaxBean(Map data) {
Iterator it = data.keySet().iterator();
String maxKey = "";
Bean maxBean = new Bean(Integer.MIN_VALUE, 0);
while (it.hasNext()) {
String key = it.next();
Bean bean = data.get(key);
if (bean.getAssignment() > maxBean.getAssignment()) {
maxBean = bean;
maxKey = key;
}
}
return maxKey;
}
private static void show(Map data) {
Iterator it = data.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
Bean bean = data.get(key);
System.out.println(key + "-" + bean);
}
}
}
class Bean {
private int assignment;
private int test;
private DecimalFormat df;
public Bean(int assignment, int test) {
this.assignment = assignment;
this.test = test;
// 格式化数字,保留两位小数
df = new DecimalFormat("#.##%");
}
public int getAssignment() {
return assignment;
}
public int getTest() {
return test;
}
public String pAssignment() {
return df.format(assignment * 1.0 / 1200);
}
public String pTest() {
return df.format(test * 1.0 / 300);
}
public String toString() {
return "Assignments:" + assignment + "(" + pAssignment() + ") Tests:" + test + "(" + pTest() + ")";
}
}结果:
读取文件后:
AnthonyHopkins-Assignments:854(71.17%) Tests:264(88%)
RafaelVega-Assignments:801(66.75%) Tests:221(73.67%)
PanMei-Assignments:730(60.83%) Tests:264(88%)
JohnSmith-Assignments:730(60.83%) Tests:249(83%)
assignment最小:PanMei-Assignments:730(60.83%) Tests:264(88%)
assignment最大:AnthonyHopkins-Assignments:854(71.17%) Tests:264(88%)