Почему эта программа без разбора добавляет элементы в набор memsSet?

Я не могу понять, почему второй цикл for, построенный вокруг pacs.length, продолжает добавлять элементы в набор, даже если они не содержат искомую переменную в mems.contains. Я не могу заставить код не добавлять элементы в набор без разбора. Я не вижу, где я иду не так, очевидно.

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

public class Trubl
{
public static void main( String args[] ) throws Exception
{
    BufferedReader pacsFile = new BufferedReader( new FileReader( "pacs.txt" ) );
    BufferedReader membersFile = new BufferedReader( new FileReader( "members.txt" ) );

    TreeSet<String> memsSet = new TreeSet<String>();
    TreeMap<String, TreeSet<String>> pac2mems = new TreeMap<String, TreeSet<String>>();

    String[] pacs = new String [9];

    int cnt = 0;

    for(int i = 0; i < pacs.length; i++)
    {
        String pac = pacsFile.readLine();

        pacs[i] = pac;
    }

    pacsFile.close();

    Arrays.sort(pacs);

    int j = 0;

    while (membersFile.ready())
    {
        String mems = membersFile.readLine();
        System.out.println(mems);
        String[] splitter = mems.split("\\s+");

        for (int i = 1; i < pacs.length; i++)
        {
            System.out.println(pacs[i]);
            if (mems.contains(pacs[i]))
            {
                memsSet.add(splitter[0]);
            }
            System.out.println(memsSet);

        }



        pac2mems.put(pacs[j], memsSet);
        j++;
    }

    membersFile.close();

    for (cnt = 0; cnt < pac2mems.size(); cnt++)
        System.out.println(pacs[cnt] + " " + pac2mems.get(pacs[cnt]));

} // END MAIN

}


person Andrew Smith    schedule 25.07.2014    source источник
comment
Я не могу заставить код не добавлять элементы в набор без разбора – что это значит? Вам нужно будет привести несколько примеров, демонстрирующих проблему.   -  person Jim Garrison    schedule 26.07.2014


Ответы (2)


if (mems.contains(pacs[i]))
{
  memsSet.add(splitter[0]);
}

Это добавляет к memsSet, если mems содержит строку. Это то, что вы намеревались?

person Lin Sherman    schedule 25.07.2014
comment
Да, но это не то, что происходит, когда я запускаю программу - person Andrew Smith; 26.07.2014

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

Тем не менее, я все равно рискну предположить. Если в вашем "pacsFile" есть пустая строка, будет элемент, который является пустой строкой, и в этом случае всегда будет i, для которого mems.contains(pacs[i]) истинно (строка всегда contains пустая строка).

person Mikkel    schedule 25.07.2014