Obsługa kilku klas, gettery, settery i konstruktory ;)

0

Witam! Ten program to moj pierwszy w sumie taki większy projekt :) do tej pory robiłem małe zadanka i było wszystko ok, teraz się zaczęły problemy i bardzo proszę o pomoc. Dalej nie rozumiem jak mam to zrobić. Chodzi o to, że wywołuje się metoda record. Wpisuję imiona i nazwiska do plików. No i program się zatrzymuje. Nie wiem jak zrobić, żeby dalsza część kodu z klasy Pracownik się wykonywała. I co mam zrobić, żeby wartości name i surname ktore są odczytywane w klasie Firma nie były wartościami null??

package ćw6;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Set;

public class File
{
	static Set<String> SetNames = new HashSet<String>();
	static Set<String> SetSurnames = new HashSet<String>();
	static LinkedList<String> ListNames = new LinkedList<String>();
	static LinkedList<String> ListSurnames = new LinkedList<String>();

	 public static void record() throws IOException
	 {
	 Scanner scanner = new Scanner(System.in);
	 PrintStream namesWriter = new PrintStream("Names.txt");
	 PrintStream surnamesWriter = new PrintStream("Surnames.txt");
	
	 System.out.println("Podawaj imiona i nazwiska. Wyraz \"stop\" kończy wpisywanie\n");
	 System.out.print("Podaj imię: ");
	 String name = scanner.nextLine();
	 System.out.print("Podaj nazwisko: ");
	 String surname = scanner.nextLine();
	 while (((name.equalsIgnoreCase("stop")) ||
	 (surname.equalsIgnoreCase("stop"))) == false)
	 {
	 namesWriter.println(name);
	 surnamesWriter.println(surname);
	 System.out.print("Podaj imię: ");
	 name = scanner.nextLine();
	 System.out.print("Podaj nazwisko: ");
	 surname = scanner.nextLine();
	 }
	 System.out.println("\nWpisywanie zakończone!");
	 namesWriter.close();
	 surnamesWriter.close();
	 scanner.close();
	 }

	public static LinkedList<String> readingNames() throws FileNotFoundException, IOException
	{
		try
			{
				FileReader readNames = new FileReader("Names.txt");
				BufferedReader bufferedReaderNames = new BufferedReader(readNames);
				String line = bufferedReaderNames.readLine();
				while (line != null)
					{
						SetNames.add(line);
						line = bufferedReaderNames.readLine();
					}
				ListNames.addAll(SetNames);
				bufferedReaderNames.close();
				readNames.close();
			} catch (FileNotFoundException e)
			{
				System.err.println("Nie można odnalezć pliku o nazwie \"Names.txt\"");
			} catch (IOException e)
			{
				System.err.println("Nieznany błąd wejścia typu Input-Output");
			}
		return ListNames;
	}

	public static LinkedList<String> readingSurnames()
	{
		try
			{
				FileReader readSurnames = new FileReader("Surnames.txt");
				BufferedReader bufferedReadSurnames = new BufferedReader(readSurnames);

				String line = bufferedReadSurnames.readLine();
				while (line != null)
					{
						SetSurnames.add(line);
						line = bufferedReadSurnames.readLine();
					}
				ListSurnames.addAll(SetSurnames);
				bufferedReadSurnames.close();
				readSurnames.close();
			} catch (FileNotFoundException e)
			{
				System.err.println("Nie można znalezć pliku o nazwie \"Surnames.txt\"");
			} catch (IOException e)
			{
				System.err.println("Nieznany błąd wejścia typu Input-Output");
			}
		return ListSurnames;
	}
}

package ćw6;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Random;

public class Pracownik
{
	String name = lista1.removeLast();;
	String surname = lista2.removeLast();;
	int age;
	static LinkedList<String> lista1 = new LinkedList<String>();
	static LinkedList<String> lista2 = new LinkedList<String>();

	public Pracownik()
	{
	}

	public String getName()
	{
		return name;
	}

	public String getSurname()
	{
		return surname;
	}

	public void setAge(int age)
	{
		Random random = new Random();
		age = random.nextInt(30) + 20;
		this.age = age;
	}

	public int getAge()
	{
		return age;
	}

	public static void main(String[] args)
	{
		try
			{
				Pracownik pracownik = new Pracownik();
				 File.record();
				lista1.addAll(File.readingNames());
				File.readingSurnames();
				lista2.addAll(File.readingNames());
				System.out.println(pracownik.getName());
			} catch (FileNotFoundException e)
			{
				System.out.println("Pliku nie znaleziono!");
			} catch (IOException e)
			{
				System.out.println("Nieznany błąd typu Input-Output");
			}
	}
}


package ćw6;

public class Firma
{
	public static void main(String[] args)
	{
		Pracownik pracownik = new Pracownik();
		System.out.println(pracownik.name);
		System.out.println(pracownik.surname);
		System.out.println(pracownik.age);
	}
}

0

Musisz jeszcze sporo doczytać o programowaniu obiektowym, bo Twój kod jest bardzo nie-obiektowy. (i przez to też nie-javowy)
W firmie wartości name i surname są nullami, bo name i surname wyciągasz z listy znajdującej się w klasie pracownik, która jest pusta (mimo, że zainicjalizowana przez new i dostępna dzięki static). Wywołując kontruktor Pracownik() nie wywołujesz metody main() tej klasy, a dopiero w niej lista wypełnia się wpisami z pliku.
Masz też w dwóch klasach metodę main() - main jest "wejściem" do całego Twojego programu, miejscem, gdzie się on uruchamia. Poprawne jest, by mieć tylko jedną taką metodę w całym programie pomiędzy wszystkimi klasami.
Ogólnie: Pracownik powinien po prostu prezentować model pracownika, nie powinien odpowiadać za 1. trzymanie listy wszystkich pracowników 2. a tym bardziej wczytywania danych z pliku. Lista pracowników mogłaby się znaleźć w firmie, zgodnie z ideą obiektów modelujących rzeczywistość: 1 firma ma wielu pracowników, 1 pracownik ma imię i nazwisko (a nie: jeden pracownik zawiera w sobie wielu pracowników)
Doczytaj o obiektowości i spróbuj przepisać to na nowo :)

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