当前位置:编程学习 > JAVA >>

求救

这段代码的功能是要实现读取一个文件后根据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楼的代码吧
楼主多多培养面向对象的思维 --------------------编程问答-------------------- 说实话,楼主写的代码一般人都不会看的直接掠过…… --------------------编程问答--------------------
引用 4 楼 yan19870429 的回复:
说实话,楼主写的代码一般人都不会看的直接掠过……
我反正没看,直接看回复的
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,