Найти строку в файле .txt с большинством данных - PullRequest
2 голосов
/ 06 февраля 2012

Я хочу использовать метод MaxFriends, чтобы найти человека с наибольшим количеством друзей. Распечатать количество друзей из связанного списка достаточно просто, но, поскольку я очищаю его после каждой итерации цикла while, я не знаю, как сравнивать значения в конце ...

Я думаю, что проблему можно было бы упростить, если бы я только нашел строку с наибольшим количеством «токенов» или в данном случае строк. Есть ли способ сделать это?

Я читаю в текстовом файле (чтобы создать связанный список).

Текстовый файл выглядит так:

john, peter, maria, dan, george, sonja
maria, nell, ted, don, matthew, ann, john, george
fred, steve
ann, tom, maria

Код на данный момент:

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: ");

        // 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()) {
            int friendCount = 0;
            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());
                friendCount++;
            }

            System.out.println("Friend Leader: " + leader + "\n" + 
                    "\tFriends include: " + list.toString() + "\n" +
                    "\tNumber of Friends: " + list.size() + "\n");
            }   list.clear(); 

        }  
    }
        }

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

public void maxFriends() {

}
}

Ответы [ 3 ]

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

Если я правильно понимаю проблему, вам просто нужно отследить, у кого больше друзей на данный момент , и сравнить это со следующим кандидатом для каждой строки. Заполнение всего в карту или кучу кажется ненужным.

Кстати, анализ, который вы делаете, очень прост и не требует сканера:

String[] friends = line.split(",\\s*");
System.out.printf("%s has %d friends\n", friends[0], friends.length - 1);
1 голос
/ 06 февраля 2012

Я изменил часть вашего кода на что-то вроде следующего:

int maxFriendCount = 0; // added by me
String maxLeader = null; // added by me
while (scanner.hasNextLine()) {
    int friendCount = 0;
    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());
        friendCount++;
    }
    // Added by me
    if(friendCount > maxFriendCount)
    {
        maxFriendCount = friendCount;
        maxLeader = leader;
    }
    System.out.println("Friend Leader: " + leader + "\n" + 
                "\tFriends include: " + list.toString() + "\n" +
                "\tNumber of Friends: " + list.size() + "\n");   
    list.clear(); 
} 

После завершения цикла while вы можете получить лидера с большинством друзей.

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

Почему бы не использовать Hashmap для хранения информации по каждому другу

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

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

Тогда в maxFriends вы сможете просмотреть ключи, получить значения и проверить, какой список имеет наибольший размер и, следовательно, наибольшее количество друзей.

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