重新分类字符串JAVA列表

时间:2014-09-20 10:41:33

标签: java linked-list

我需要一些关于这个Java代码的帮助

我将此列表保存在文本文件中,如下所示:

a b
a c
a d
c h
b e
b f
b g
g l
e i
e j
f k
k m
1 2
1 3
2 4

读取文件test.txt后,将行添加到列表中(代码中名为ch)由两部分组成,第一部分是在代码中作为变量src提取的源代码 第二部分是代码

中的目标提取为trg

例如,在第一行:a b源(src)是et目标(trg)是b

现在,我想在目标等于前一行的源的另一行时创建一个新列表(代码中的myList)。例如,让我们留在第一行并看到第5行:

a b 
b e 

myList必须包含以下行的新列表:a b e

因此,通常必须将ch列表重新分类为以下内容:

a d
a c h
a b g l 
a b e i 
a b e j 
a b f k m
1 2 4
1 3

我获得以下例外:

  

line:a b线程中的异常" main"显示java.lang.NullPointerException     在pathcreator.test.main(test.java:48)拿起_JAVA_OPTIONS:   -Xmx512M

这段代码基本上没有正常工作,因为我只构建一个包含3个元素的新列表myList.add(src [a] +"" + trg [a] +"&# 34 + TRG并[b]);虽然它可能更多。

任何帮助?

这是我的代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;

    public class Test {

        public static void main(String[] args) throws FileNotFoundException {

                FileReader fis;
                fis = new FileReader("c:\\test.txt");

                BufferedReader in = new BufferedReader(fis);
                String i=null;
                String line =null;  
                String[] src = null; 
                String[] trg = null;

                 LinkedList<String> ch = new LinkedList<String>();
                 LinkedList<String> myList = new LinkedList<String>();
                try {
                    while((i = in.readLine()) != null)
                    {

                            line = i;
                            ch.add(line);

                            System.out.println(" line:"  + line);
                            src = new String[ch.size()];
                            trg =  new String[ch.size()];


                            for(int j = 0; j<ch.size()-1;j++){

                                  String pC = ch.get(j).toString();
                                  String[] pE = pC.split(" ");
                                  src[j] = pE[0];
                                  trg[j] = pE[1];     

                            }

                            for(int a = 0; a<src.length; a++){
                                for(int b = a; b<trg.length; b++){
                                    if(src[b].equals(trg[a]) && a!= b){
                                        myList.add(src[a] +" "+trg[a]+" "+trg[b]);

                                        System.out.println(src[a] +" "+trg[a]+" "+trg[b]);
                                    }
                                }
                            }
                            }
                        }


                catch (IOException e){
                    System.out.println(e.getMessage());
                    System.exit(1);
                }

            }

    } 

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题:

  

输入是图表的边缘列表,
  输出是图表中所有树的所有屋顶到叶子路径的列表。

我建议您使用输入填充图形结构,然后搜索并使用算法打印屋顶到树叶路径(您可以在google / stackoverflow上找到一个)。

您的例外是因为j<ch.size()-1,其中SrcTrg的最后一个元素为空。试试j<ch.size()

最后,请不要对变量名使用难以理解的缩写,避免使用TrgchpE,...