求救
这段代码的功能是要实现读取一个文件后根据grade属性排序后再进行输出但是写到迭代输出时出现了错误,望大神们帮我看看 我快要崩溃了。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.neusoft.Demo;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;
/**
*
* @从文件读取后输出
*/
public class Demo_shurushuchu {
int id;
int age;
int grade;
String name;
Demo_shurushuchu() {
}
Demo_shurushuchu(int id, int age, int grade, String name) {
this.age = age;
this.grade = grade;
this.id = id;
this.name = name;
}
public static void main(String[] args) throws Exception {
FileReader fr = new FileReader("E:/text.txt");
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
// System.out.println(line);//输出line 为什么不输出名字呢?
LinkedHashMap list = new LinkedHashMap();
Demo_shurushuchu d;
int j = 0;
while (line != null) {
int index1 = line.indexOf(" ");
// System.out.println(index1);//输出下标
String id = line.substring(0, index1);
int iid = Integer.parseInt(id);
// System.out.println(id);//输出id
int index2 = line.indexOf(" ", index1 + 1);
// System.out.println(index2);//输出下标
String age = line.substring(index1 + 1, index2);
int iage = Integer.parseInt(age);
// System.out.println(age);//输出下标
int index3 = line.indexOf(" ", index2 + 1);
// System.out.println(index3);//输出下标
String name = line.substring(index2, index3);
// System.out.println(name);
String grade = line.substring(index3 + 1, line.length());
int igrade = Integer.parseInt(grade);
// System.out.println(grade);//输出成绩
d = new Demo_shurushuchu(iid, iage, igrade, name);
list.put(grade, d);
System.out.println(line);
line = br.readLine();
j++;
}
br.close();
fr.close();
int a[] = new int[j];
Set e = list.keySet();
Iterator iter = e.iterator();
int ggrade;
int i = 0;
while (iter.hasNext()) {
ggrade = Integer.parseInt(iter.next().toString());
// System.out.println(d1.age+" "+d1.name+" "+d1.grade+" "+d1.id);//遍历后输出
// System.out.print(ggrade); //输出成绩
a[i] = ggrade;
i++;
}
for (int k = 0; k < j; k++) {
for (int n = 0; n < j - 1; n++) {
int t;
if (a[n] < a[n + 1]) {
t = a[n];
a[n] = a[n + 1];
a[n + 1] = t;
}
}
}
for (int k = 0; k < j; k++) {
System.out.print(a[k] + " ");
System.out.println();
}
// Demo_shurushuchu d1 = new Demo_shurushuchu();
// d1.g
// for (int m = 0; m < j; m++) {
Set e1 = list.keySet();
Iterator iter1 = e1.iterator();
while(iter1.hasNext()){
int grade=Integer.parseInt(iter1.next().toString());
List list1=(List)list.get(grade);
System.out.println(grade);
Iterator iter3=list1.iterator();
while(iter3.hasNext()){
Demo_shurushuchu d1 = new Demo_shurushuchu();
d1=(Demo_shurushuchu)iter3.next();
System.out.print(d1.age+" "+d1.grade+" "+d1.name+" "+d1.id);
}
}
}
}
--------------------编程问答-------------------- FileReader fr = new FileReader("E:/text.txt");
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
你这部分写的就不对。
FileReader fr = new FileReader("E:/text.txt");
BufferedReader br = new BufferedReader(fr);
String s="";
String str;
while(str=br.readLine!=null){
s+=str
}
另外你想实现:根据grade属性排序后再进行输出这个功能,list本身没有排序的功能,我没具体看你怎么实现的,我的思路是把读取出来的数据显存放到一个list里面,然后对这个list进行遍历,每遍历一次取出里面最大的一个放到一个map中,最后输出map就可以了。
或者放到一个set里面,set有排序的功能,不过你得实现comparetor这个方法,这个更方便一些。 --------------------编程问答-------------------- 大概看懂了怎么回事,只是没有看你的代码,这是我刚写的,参考一下吧:
数据文件,student.txt
1,张三,20,90
2,李四,25,85
3,王五,21,67
4,赵六,18,59
5,孙七,16,77
实体类,Student.java
package com.pyh.demo1;
public class Student implements Comparable<Student> {
private int id;
private String name;
private int age;
private int grade;
public Student() {
}
public Student(int id, String name, int age, int grade) {
this.id = id;
this.name = name;
this.age = age;
this.grade = grade;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int compareTo(Student stu) {
return stu.getGrade() - this.getGrade();
}
public String toString() {
return "编号:" + id + " ,姓名:" + name + " ,年龄:" + age + " ,成绩:" + grade;
}
}
主类,Demo6.java
[code=java]
package com.pyh.demo1;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Demo6 {
private List<Student> students;
public List<Student> readTxt(String fileName) {
Scanner scan = null;
try {
scan = new Scanner(new File(fileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
scan.useDelimiter("\r\n");
students = new ArrayList<Student>();
Student stu = null;
String temp = null;
while (scan.hasNext()) {
temp = scan.nextLine();
String[] arr = temp.split(",");
stu = new Student(Integer.parseInt(arr[0]), arr[1],
Integer.parseInt(arr[2]), Integer.parseInt(arr[3]));
students.add(stu);
}
Collections.sort(students);
return students;
}
public static void main(String[] args) {
Demo6 d6 = new Demo6();
System.out.println(d6.readTxt("./student.txt"));
}
}
[/code] --------------------编程问答-------------------- 看看2楼的代码吧
楼主多多培养面向对象的思维 --------------------编程问答-------------------- 说实话,楼主写的代码一般人都不会看的直接掠过…… --------------------编程问答-------------------- 我反正没看,直接看回复的
补充:Java , Java SE