Przypisaniem do tablicy argumentów sczytanych z klawiatury

0

Witam, od niedawna uczę się Javy. Aktualnie zacząłem wchodzić w obiekty i mam problem z ustawieniem pol obiektu. tzn mam problem z przypisaniem do tablicy obiektów klasy argumentów sczytanych z klawiatury

import java.util.*;
public class Pracownik_test {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.print("Podaj liczbe pracownikow w firmie: ");
		int n = in.nextInt();
		Pracownik [] kadra = new Pracownik[n];
		for( int i =0;i<n;i++)
		{
			System.out.print("Podaj Imie i nazwisko pracownika: ");
			String temp1 = in.nextLine();
			System.out.print("Podaj wysokość płacy: ");
			double temp2 = in.nextDouble();
			System.out.print("Podaj rok zatrudnienia");
			int temp3=in.nextInt();
			System.out.print("Podaj miesiac zatrudnienia");
			int temp4=in.nextInt();
			System.out.print("Podaj dzien zatrudnienia");
			int temp5=in.nextInt();
			kadra[i] = new Pracownik(temp1,temp2,temp3,temp4,temp5);//Tu jest problem
			
		}
		for ( Pracownik x:kadra)
		{
			System.out.println("Czy podnieść place dla "+x.getDaneOs()+" ?");
			String odp=in.next();
			if(odp.equals("tak"))
			{
				System.out.print("O ile procent podnieść płace? : ");
				double raise=in.nextDouble();
				x.setPlaca(raise);
			}
			
		}
		for (Pracownik x:kadra)
		{
			System.out.printf("Dane Osobowe = "+x.getDaneOs()+" Płaca : "+x.getPlaca()+" Zatrudniony : "+x.getDataZatrudnienia());
		}
	}
	class Pracownik
	{
		private String imNaz;
		private double placa;
		private Date dataZatrudnienia;
		private static int nextId=1; // oraz tutaj
		private int Id;
		
		
		public Pracownik(String n,double p,int rok,int miesiac,int dzien)
		{
			imNaz=n;
			placa=p;
			GregorianCalendar kalendarz = new GregorianCalendar(rok,miesiac-1,dzien);
			dataZatrudnienia=kalendarz.getTime();
			Id=setId();
		}
		public String getDaneOs()
		{
			return imNaz;
		}
		public double getPlaca()
		{
			return placa;
		}
		public Date getDataZatrudnienia()
		{
			return dataZatrudnienia;
		}
		public void setDaneOs(String dane)
		{
			imNaz=dane;
		}
		public void setPlaca(double kasa)
		{
			placa=kasa;
		}
		public void setDataZatrudnienia(int data1,int data2,int data3)
		{
			GregorianCalendar przypis = new GregorianCalendar(data1,data2-1,data3);
			dataZatrudnienia=przypis.getTime();
		}
		public void setPodwyzka(double r)
		{
			double podwyzka= (placa*r)/100;
			placa+=podwyzka;
		}
		public int setId()
		{
			Id=nextId;
			nextId++;
			return nextId;
		}
		
	}
}

Oto cały kod programu, a wywala mi bląd przy : kadra[i] = new Pracownik(temp1,temp2,temp3,temp4,temp5); oraz przy ustawianiu statycznej prywatnej zmiennej nextId. Możecie mi wyjaśnić dlaczego nie mogę w ten sposób utworzyć nowego obiektu w tablicy? Nie rozumiem jeszcze wszystkich aspektów programowania obiektowego także bardzo prosze o wyrozumialość.

EDIT: To jest blad pojawiajacy sie przy kompilacji.
No enclosing instance of type Pracownik_test is accessible. Must qualify the allocation with an enclosing instance of type Pracownik_test (e.g. x.new A() where x is an instance of Pracownik_test).

at Pracownik_test.main(Pracownik_test.java:21)
1

z kasy pracownik wywal private static int nextId=1; // oraz tutaj i niech klasa pracownik ma metode public void setId(int id);

klasę pracownik wynieś poza Pracownik_test , albo wydziel do osobnego pliku

0

Jeszcze pojawił się błąd przy probie sczytania wartosci String do Imienia i nazwiska pomija całą procedure:
Output:
Podaj liczbe pracownikow w firmie: 2
Podaj Imie i nazwisko pracownika: Podaj wysokość płacy:

		Pracownik [] kadra = new Pracownik[n];
		for( int i=0;i<n;i++)
		{
			System.out.print("Podaj Imie i nazwisko pracownika: ");
			String temp1 = in.nextLine();
			System.out.print("Podaj wysokość płacy: ");
			double temp2 = in.nextDouble();
			System.out.print("Podaj rok zatrudnienia");
			int temp3=in.nextInt();
			System.out.print("Podaj miesiac zatrudnienia");
			int temp4=in.nextInt();
			System.out.print("Podaj dzien zatrudnienia");
			int temp5=in.nextInt();
			kadra[i] = new Pracownik(temp1,temp2,temp3,temp4,temp5);
			
		}
0

to sobie możesz dać np. int n = Integer.parseInt(in.nextLine()); (ja zwykle tak robie).

nie wiesz czemu, ale lucky, że działa prawda?

0

Wait wait wait... dlaczego ze stringa ( ktory ma byc imieniem oraz nazwiskiem) mam ciepać do inta?

1
System.out.print("Podaj liczbe pracownikow w firmie: ");
        int n = in.nextInt();

chodziło mi o to.

jak umiesz speaking inglisz to sobie jeszcze czemu tak jest przeczytaj: http://stackoverflow.com/a/7056782

0

Damn... faktycznie śmiga:D Takie proste sie wydaje a tu haczyk :D Dziekuje bardzo za pomoc:)

0

poczytaj sobie jeszcze o kolekcjach (zwłaszcza List, potem Map) i java.util.Date, bo ten kod jest średni. potem możesz poczytać o JodaTime i JodaMoney

0

Lece z ksiazka java Podstawy Cay.S Hortsmana :) A to jest "wariacja" na temat jednego z ich listningow. Jeszcze mam problem z operowaniem obiektami i nie wiem jak skrocic wydruk:
1Dane Osobowe = Dominik Płaca : 9000.0 Zatrudniony : Wed Jul 01 0000 CEST 2020 <- zeby wyswietlalo bez strefy czasowej i samego czasu

1
Unlucky napisał(a):

Lece z ksiazka java Podstawy Cay.S Hortsmana :) A to jest "wariacja" na temat jednego z ich listningow. Jeszcze mam problem z operowaniem obiektami i nie wiem jak skrocic wydruk:
1Dane Osobowe = Dominik Płaca : 9000.0 Zatrudniony : Wed Jul 01 0000 CEST 2020 <- zeby wyswietlalo bez strefy czasowej i samego czasu

http://docs.oracle.com/javase/tutorial/datetime/iso/format.html

szczególnie ostatnie: Formatting

0

Dzięki rzuce okiem jutro bo dzisiaj już padam:) Dziekuje jeszcze raz za pomoc:)

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