我需要一些关于这个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);
}
}
}
答案 0 :(得分:1)
如果我理解你的问题:
输入是图表的边缘列表,
输出是图表中所有树的所有屋顶到叶子路径的列表。
我建议您使用输入填充图形结构,然后搜索并使用算法打印屋顶到树叶路径(您可以在google / stackoverflow上找到一个)。
您的例外是因为j<ch.size()-1
,其中Src
和Trg
的最后一个元素为空。试试j<ch.size()
。
最后,请不要对变量名使用难以理解的缩写,避免使用Trg
,ch
,pE
,...