Set, wyświetlanie wartości

0

Witam. Mam coś problem z setem, bo raz zwraca mi wszystkie wpisane wartości nawet powtarzające się. A dwa mimo że mam w sysoucie że ma robić spacje po każdej iteracji to wyświetla wszystko w jednym ciągu. Zle wrzucam do setu czy zle odczytuje???
P.S Jak mogę w klasie pracownik w konstruktorze przy tworzeniu obiektu (lub inaczej) pobrac wartosc z tego setu? Tego już nie umiem :)


package ćw6;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class File
{
	public static void file() throws Exception
	{
		Scanner scanner = new Scanner(System.in);
		FileWriter Names = new FileWriter("Names.txt");
		FileWriter Surnames = new FileWriter("Surnames.txt");
		Set<String> ListNames = new HashSet<String>();
		Set<String> ListSurnames = new HashSet<String>();
		System.out.println("Podawaj imiona i nazwiska. Wyraz \"stop\" kończy wpisywanie\n");
		System.out.print("Podaj imię: ");
		String name = scanner.next();
		System.out.print("Podaj nazwisko: ");
		String surname = scanner.next();
		while (((name.equalsIgnoreCase("stop")) || (surname.equalsIgnoreCase("stop"))) == false)
			{
				Names.write(name);
				Surnames.write(surname);
				System.out.print("Podaj imię: ");
				name = scanner.next();
				System.out.print("Podaj nazwisko: ");
				surname = scanner.next();

			}
		System.out.println("\nWpisywanie zakończone!");
		Names.close();
		Surnames.close();
		scanner.close();
		try
			{
				FileReader readNames = new FileReader("Names.txt");
				BufferedReader bufferedReaderNames = new BufferedReader(readNames);
				String line = bufferedReaderNames.readLine();
				while (line != null)
					{
						ListNames.add(line);
						line = bufferedReaderNames.readLine();
					}
				bufferedReaderNames.close();
				readNames.close();
			} catch (FileNotFoundException e)
			{
				System.err.println("Nie można odnalezć pliku o nazwie \"Names.txt\"");
			}

		try
			{
				FileReader readSurnames = new FileReader("Surnames.txt");
				BufferedReader bufferedReadSurnames = new BufferedReader(readSurnames);

				String line = bufferedReadSurnames.readLine();
				while (line != null)
					{
						ListSurnames.add(line);
						line = bufferedReadSurnames.readLine();
					}
				bufferedReadSurnames.close();
				readSurnames.close();
			} catch (FileNotFoundException e)
			{
				System.err.println("Nie można znalezć pliku o nazwie \"Surnames.txt\"");
			}

		for (String n : ListNames)

			{
				System.out.print(n + " ");
			}
		System.out.println("\n");
		for (String s : ListSurnames)
			{
				System.out.print(s + " ");
			}

	}

	public static void main(String[] args)
	{
		try
			{
				file();

			} catch (Exception e)
			{
			}
	}
}


1

Chyba nawet nie sprawdziłeś jak program zapisuje Ci dane do pliku. Gdybyś to zrobił to zobaczyłbyś coś w stylu JanRyszardJakubJan w związku z czym kiedy odczytujesz to z pliku jest to pobierane jako jeden string i przez to też wyświetlane jako całość. W tym wypadku najprościej byłoby dodać podczas zapisu do pliku znak nowej linii i wszystko powinno działać, ewentualnie możesz dodawać newLine() po każdym zapisaniu:

while (((name.equalsIgnoreCase("stop")) || (surname.equalsIgnoreCase("stop"))) == false) {
    Names.write(name + "\n");
    Surnames.write(surname + "\n");
    System.out.print("Podaj imię: ");
    name = scanner.next();
    System.out.print("Podaj nazwisko: ");
    surname = scanner.next();
}

Co do drugiego pytania to możesz na przykład zrobić pola typu Set<String> w klasie File i dodać gettery, które będą zwracały te sety.

1 użytkowników online, w tym zalogowanych: 0, gości: 1