簡體   English   中英

來自文本文件的鏈接列表(無法打印)

[英]Linked List from text file (trouble printing)

我需要從一個文本文件中創建一個鏈接列表,如下所示:

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

現在,名字打印得很好,但是鏈接列表卻在不斷增長,因此結果無法按照我想要的方式打印...

您應該clear() 2行讀取之間的列表

while (scanner.hasNextLine()) {
  list.clear();
  //...
}

您走在正確的軌道上。 您正在將每一行處理為leaderfriends列表。 您將需要跟蹤另一個對象中的每個實體-我建議使用Map。 就像是:

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 )。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM