使用链接列表对文本文件中的数据进行排序

时间:2013-11-07 17:58:48

标签: java sorting nullpointerexception

我正在尝试使用链接列表从文本文件中整理数据,然后按数字顺序将其重写为另一个预先存在的文本文件。 不过,我一直得到一个nullpointer异常。 有人可以查看我的代码并告诉我缺少什么吗?

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.OutputStream;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;

public class Sort{

public static void main(String[] args){

    String infileName=args[0];
    String outfileName=args[1];


    try{
    BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File(infileName))));
    BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(outfileName))));




    Node linkedList=new Node();
    //linkedList.value=Integer.parseInt(br.readLine());
    String tempS=br.readLine();
    while(tempS!=null){
        tempS=br.readLine();
        Node tempNode=new Node();
        linkedList=tempNode;
        tempNode.value=Double.parseDouble(br.readLine());
        tempNode.next=linkedList;
        bw.write(tempNode.next+"\n");


    }

    bw.flush();
    bw.close();

    }catch(IOException ioe){ioe.getMessage();}
}
}


class Node{
    Double value;
    Node next=null;
}

3 个答案:

答案 0 :(得分:0)

您要删除每个新行的linkedList作业。这不是LinkedList,您应该只创建LinkedList,然后.Add为它添加新节点。

从循环中删除linkedList=tempNode;。并且仅使用tempNode

等内容将node.next添加到最新的lastNode.next = tempNode;

答案 1 :(得分:0)

在while循环中,看起来你正在读取一行进入tempS,但是当你初始化tempNode时,你正在读另一行(这可能会让你根据一般猜测运行文件的末尾) -

然后你在第二个readLine上调用parseDouble -

如果第二个readLine没有撤回任何内容,那么parseDouble会抛出你发现的nullPointerException。

如果你把它改成使用tempS,你仍然不安全,因为在while循环检查无效之后你正在读tempS。

http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#parseDouble(java.lang.String)

希望有帮助=)

答案 2 :(得分:0)

如果您打算使用词典排序(Read:Collections.sort()),我强烈建议您不要使用链表进行排序。这将从O(nlog(n))到O(n ^ 2 * log(N))进行排序。意味着更多的因素。这是因为LinkedList中任何元素的访问时间都是O(N)。

或者,使用ArrayList或使用像Trie + LL这样的桶式排序。 ArrayList + stand java的东西实现起来要快得多