Связанный список из текстового файла (проблемы с печатью) - PullRequest
0 голосов
/ 06 февраля 2012

Мне нужно создать связанный список из текстового файла, который выглядит следующим образом:

john, peter, maria, dan, george, sonja
fred, steve
ann, tom, maria
//etc...

Я хочу напечатать имя в каждой строке (лидер) и оставшиеся имена в строке (связанныес этим именем).

Так, например:

Leader: John Friends: peter, maria, dan, george, sonja Friend Count: 5
Leader: Fred Friends: steve Friend Count: 1
//etc...

Это то, что у меня есть до сих пор:

import java.util.*;
import java.io.*;

import javax.swing.JFileChooser;
public class Test {

public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<String>();

    LinkData ld1 = new LinkData();
    JFileChooser chooser = new JFileChooser(".");
    int returnVal = chooser.showOpenDialog(null);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        System.out.println("You chose to open this file: "
                + chooser.getSelectedFile().getName()
                + "Print some info"

        // open and read file:
        Scanner scanner = null;
        try {
            scanner = new Scanner(chooser.getSelectedFile());
        } catch (IOException e) {
            System.err.println(e);
            error();
        } 

        if (scanner == null)
            error();


        while (scanner.hasNextLine()) {

            String line = scanner.nextLine();
            Scanner lineScan = new Scanner(line);
            lineScan.useDelimiter(", ");
            // System.err.println("The line that was scanned: " + line);

            String leader = lineScan.next();

            while (lineScan.hasNext()) {
                list.add(lineScan.next());
            }
            System.out.println("Leaders include_" + leader + list.toString());
        }  
    }
        }

private static void error() {
    System.err.println("An error has occurred: bad data");
    System.exit(0);
}
}

Прямо сейчас, имя печатается нормально, но затем связанноесписок продолжает расти и расти, поэтому результаты печатаются не так, как я хочу ...

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Вы должны очистить () список из двух строк читается

while (scanner.hasNextLine()) {
  list.clear();
  //...
}
0 голосов
/ 06 февраля 2012

Вы на правильном пути.Вы обрабатываете каждую строку в leader и список friends.Вы хотите отслеживать каждую из этих сущностей в другом объекте - я бы порекомендовал карту.Что-то вроде:

Map<String, List<String>> leaderMap = new HashMap<String, List<String>>();

// ...
String leader = lineScan.next();

while (lineScan.hasNext()) {
    list.add(lineScan.next());
}

leaderMap.put(leader, list);

Не забудьте переинициализировать список для каждой строки, которую вы читаете из файла.В конце вы можете выполнить итерацию карты, распечатать ключ (leader) и размер связанного списка (number of friends).Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...