0

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

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;
}
4

3 回答 3

0

您正在删除linkedList每个新行的分配。这不是 LinkedList,您应该只创建 LinkedList,然后将新节点添加到其中。

linkedList=tempNode;从循环中移除。并且tempNode只添加到最新的类似的node.next东西lastNode.next = tempNode;

于 2013-11-07T18:06:04.670 回答
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)

希望这会有所帮助=)

于 2013-11-07T18:13:06.753 回答
0

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

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

于 2013-11-14T19:04:54.247 回答