• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dziedziczenie, konstruktory, gettery i settery

Object Storage Arubacloud
0 głosów
479 wizyt
pytanie zadane 30 kwietnia 2018 w Java przez Adrian Paź Obywatel (1,270 p.)
edycja 30 kwietnia 2018 przez Adrian Paź

Witam! Niektórzy z was kojarzą już ten program xD przerobiłem go trochę kompiluje się uruchamia, ale jest jeden okropny problem: Klasa Pracownik wywołuje metode zapisu do pliku tekstowego z klasy File. Niestety po wpisaniu wartosci i przerwaniu petli program sie dalej nie wykonuuje, mimo, że w klasie pracownik wywoluje też dwie inne metody. Co mam zrobić, żeby to działało??

Program składa się z 3 klas, więc proszę o cierpliwość w szukaniu błędu :) Naprawdę nie wiem jak mam to zrobić :((

1.

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

2. 

package ćw6;

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

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

	public Pracownik() {}
	public void setName(String name)
	{
		name = lista1.removeLast();
		this.name = name;
	}

	public String getName()
	{
		return name;
	}

	public void setSurname(String surname)
	{
		surname = lista2.removeLast();
		this.surname = surname;
	}

	public String getSurname()
	{
		return surname;
	}

	public void setAge(int age)
	{
		this.age = age;
	}

	public int getAge()
	{
		Random random = new Random();
		age = random.nextInt(30) + 20;
		return age;
	}

	public static void main(String[] args)
	{
		try
			{
                File.record();
				lista1.addAll(File.readingNames());
				File.readingSurnames();
				lista2.addAll(File.readingNames());
			} catch (FileNotFoundException e)
			{
			} catch (IOException e)
			{
			}
	}
}

3.

package ćw6;

public class Firma extends Pracownik
{
	public static void main(String[] args)
	{
		Pracownik pracownik = new Pracownik();
		System.out.println(pracownik.getName());
		System.out.println(pracownik.getSurname());
		System.out.println(pracownik.getAge());
	}
}

 

1
komentarz 30 kwietnia 2018 przez mbabane Szeryf (79,280 p.)
Którego maina uruchamiasz? Bo to zasadnicza różnica w tym kodzie.

Przykładowo ten wyróżniony osobnym blokiem (nr 3), tworzy obiekt i wyświetla zwartości jego pól, które są puste.
komentarz 1 maja 2018 przez xenonso Mądrala (5,160 p.)
Kiedy piszesz w Javie używaj stylu indentacji K&R

1 odpowiedź

0 głosów
odpowiedź 30 kwietnia 2018 przez Aisekai Nałogowiec (42,190 p.)
edycja 30 kwietnia 2018 przez Aisekai
Nie powiem Ci, gdzie masz błąd, bo tego kodu po prostu czytać nie umiem.

Ale ja bym się przyjrzal setterom. Czemu? Setter przyjmuje jakiś konkretny String, który ty potem chcesz zmienić pobierając jakiś element z listy. Stringi są immutable, nie można ich zmieniać. Jeżeli byś chciał takie coś zrobić, to albo musiałbyś nową zmienną utworzyć albo po prostu ustawić pole pomijając tworzenie zmiennych. Przynajmniej ja bym tak spróbował, bo nie wiem czy gdzieś indziej jakiegoś błędu nie ma z pobieraniem z pliku.

Druga sprawa, to sam kod. Nie stosujesz się do konwencji Javowej, nazywając zmienne z dużych liter. Tak samo, zdecyduj się na jedno nazewnictwo: albo nazywasz po polsku zmienne, albo po angielsku, przy czym dużo lepiej po angielsku. Potem się robią np funkcje typu getPracownikWhereSurname...().  Czy Pracownik rzeczywiście rozszerza Plik (File)? Nie wydaje mi sie. File powinien inną klasą, z której instancji byś pobierał linie (czy coś innego robił). A na końcu sformatuj kod, bo imo ciężko się to czyta.

Edit: Tak jak mówię, nie analizowalem kodu, ale skąd wiesz, że np błąd w metodzie main z Pracownika nie wystąpił, że plik nie został znaleziony? Jeżeli wystąpił, to nawet (w tym miejscu) tego nie będziesz wiedział bo go "zlapales" nie dając żadnej informacji, o tym że wystąpił.

Edit2: tak samo firma nie dziedziczy po pracowniku. Pracownik jest związany z firmą, ale nie dziedziczy z niego.

Podobne pytania

0 głosów
1 odpowiedź 593 wizyt
pytanie zadane 30 listopada 2020 w Java przez Kuciniak Użytkownik (920 p.)
0 głosów
1 odpowiedź 266 wizyt
0 głosów
1 odpowiedź 458 wizyt
pytanie zadane 25 listopada 2021 w Python przez doskanoness Obywatel (1,240 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...