2014-09-20 2 views
-1

мне нужна помощь с этим Java кодпереквалифицировать список строк 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 в коде

Например, в первой строке: ab так urce (src) является a et target (trg) is b

СЕЙЧАС, я хочу создать новый список (myList в коде), когда есть еще одна строка, где цель равна исходной строке предыдущей строки. Например, давайте оставаться с кулак линии и посмотреть, 5-й линии:

a b 
b e 

Новый список, который MyList должен содержать строку, как: Abe

Так что в целом список ч должен быть реклассифицируются в следующих :

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 

я получаю следующее исключение:

линии: AB исключение в потоке "основного" java.lang .NullPointerException в pathcreator.test.main (test.java:48) Подобрал _JAVA_OPTIONS: -Xmx512m

Этот код не работает должным образом поясню, потому что я строю только новый список с 3-х элементов myList.add (src [a] + "" + trg [a] + "" + 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

Что критерии позади этого алгоритма? Что вы имеете в виду, реклассифицируя? Кроме того, вы должны опубликовать точное * exception stacktrace *, чтобы мы могли понять проблему. –

+0

Я не понимаю, что пытаюсь сделать .. ни из описания, ни из кода. До сих пор я могу сказать вам, что вы нарушаете обычные правила кодирования: переменные начинаются с букв нижнего регистра, классы начинаются с прописных (что затрудняет мне также понимание этого). Но забудьте о коде: не могли бы вы объяснить цель этого в разных словах еще раз? – tilois

+0

@AlessandroSuglia srry для этого, я добавил более подробную информацию, спасибо заранее. –

ответ

1

Если я правильно понимаю вашу проблему:

вход представляет собой список ребер графа,
Выходной список всех крыши -to-leaf пути всех деревьев в графе.

Я рекомендую заполнить структуру графа с помощью ввода, а затем выполнить поиск и использовать алгоритм для печати путей от крыши к листу (возможно, вы найдете его в google/stackoverflow).

Ваше исключение связано с j<ch.size()-1, которое оставляет последний элемент Src и Trg null. Попробуйте j<ch.size().

Наконец, пожалуйста не используйте непонятные сокращения для имен переменных, избежать Trg, ch, pE ...

+0

Вы получите мой комплимент для получения корень проблемы из исходного описания! – tilois

+0

@Volume спасибо вам, что вы так хороши, это то, что мы находим печатные пути на крыше, уже нашли некоторые алгоритмы и будем работать над этим. –

Смежные вопросы