Tablice i metody w Java

0

W zadaniu mam utworzyć

klasę Pracownik, dziedziczącą po klasie Osoba. Klasa ta posiada pola: firma, zawód oraz miesiecznePensje (tablica liczb rzeczywistych przechowująca przychody z każdego miesiąca). Zadbaj o hermetyzację klasy.
•Klasa powinna posiadać konstruktor bezparametrowy oraz konstruktor ustawiający wszystkie pola na podstawie swoich parametrów.
•Dodaj gettery oraz setery.
•Napisz metodę sredniaPensja, która zwraca w wyniku średnią pensję pracownika, obliczoną na podstawie danych w tablicy miesiecznePensje

I teraz pytanie do was, jak mam zrobić metodę średniaPensja?

1

A jak byś to zrobił w świecie realnym, licząc średnią pensję własną bądź pensję mamy? :)

0

W realnym jest dużo prościej :P po prostu sumuje pensje i dziele przez liczbę msc. W javie już jest trudniej zaimplementować taką metodę

2

W świecie realnym wziąłbyś kartkę z wypisanymi zarobkami miesięcnzymi. W javie bieresz tablice. Przechodzisz po elementach tbalicy (liczbach), tak jak powiedziałeś sumujesz je i dzielisz przez liczbę miesięcy (rozmiar tablicy). Uzyskany wynik zwracasz z metody.

Gdzie jest problem? Pokaż kod ze swoimi próbami implementacji tej metody.

1
Piotr cezary napisał(a):

W realnym jest dużo prościej :P po prostu sumuje pensje i dziele przez liczbę msc. W javie już jest trudniej zaimplementować taką metodę

Nie za bardzo rozumiem, bierzesz sumujesz i dzielisz przez liczbę miesięcy. Wiesz skąd wziąć liczbe (czyli wielkośc tablicy)?

0

Właśnie o to chodzi, próbuje ustawić wartości w tablicy przez konstruktor ale nie mi nie wychodzi.

main
package com.company;
import java.util.Arrays;
import java.util.*;
import java.io.*;
import java.lang.*;
import static java.lang.System.in;
public class Main {

    public static void main(String[] args) {
	// write your code here
        Pracownik pracownik1;

        pracownik1 = new Pracownik("Jan","Kowalski","Intel","Programista");
        System.out.println(pracownik1.toString());

    }
}

klasa Osoba

package com.company;
import java.util.Arrays;
import java.util.*;
import java.io.*;
import java.lang.*;
import static java.lang.System.in;

public class Osoba {
    private String imie;
    private String nazwisko;

    public Osoba(String imie, String nazwisko) {
        this.imie = imie;
        this.nazwisko = nazwisko;
    }

    public String getImie() {
        return imie;
    }

    public void setImie(String imie) {
        this.imie = imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public void setNazwisko(String nazwisko) {
        this.nazwisko = nazwisko;
    }

    @Override
    public String toString() {
        return "Osoba{" +
                "imie='" + imie + '\'' +
                ", nazwisko='" + nazwisko + '\'' +
                '}';
    }
}

klasa Pracownik

package com.company;

import java.util.Arrays;

import java.util.*;
import java.lang.*;

import static java.lang.System.in;

public class Pracownik extends Osoba{

    private String firma;
    private String zawod;
    private Double[] miesiecznePensje;

    public Pracownik(String imie, String nazwisko) {
        super(imie, nazwisko);
    }

    public Pracownik(String imie, String nazwisko, String firma,String zawod, Double[] miesiecznePensje) {
        super(imie, nazwisko);
        this.firma = firma;
        this.zawod = zawod;
        this.miesiecznePensje = miesiecznePensje;
    }

    public String getFirma() {
        return firma;
    }

    public void setFirma(String firma) {
        this.firma = firma;
    }

    public String getZawod() {
        return zawod;
    }

    public void setZawod(String zawod) {
        this.zawod = zawod;
    }

    public Double[] getMiesiecznePensje() {
        return miesiecznePensje;
    }

    public void setMiesiecznePensje() {
        this.miesiecznePensje = miesiecznePensje;
    }

    public void sredniaPensja()
    {
       /* Scanner skaner = new Scanner(in);
        int liczbaPensji = skaner.nextInt();
        miesiecznePensje = new double[liczbaPensji];
        for (int i =0 ; i<miesiecznePensje.length;i++){
            System.out.print("Podaj pensje z "+ i + " miesiaca pracy: ");
            miesiecznePensje[i] = skaner.nextDouble();
    }*/
        double suma =0;
        for (double pomiar: miesiecznePensje) {
            suma += pomiar;
        }
        System.out.println("Zarobiono razem:"+suma);
        double srednia = suma/miesiecznePensje.length;
        System.out.println("Srednia pensja: "+srednia);

    }

    @Override
    public String toString() {
        return "Pracownik{" +
                "firma='" + firma + '\'' +
                ", zawod='" + zawod + '\'' +
                ", miesiecznePensje=" + Arrays.toString(miesiecznePensje) +
                '}';
    }

}

1

Korzystasz z IDE? Powinno Ci pokazać, że używasz konstruktor 4 argumentowy, gdy zdefiniowałeś 5 argumentowy.

Double[] monthlyCash = {1000.0, 2000.0, 3000.0, 5000.0};
pracownik1 = new Pracownik("Jan","Kowalski","Intel","Programista", monthlyCash);
double srednia = pracownik1.sredniaPensja();

ps W metodzie sredniaPensja() zmień typ metody na double. Void nic nie zwraca.
ps2 Pisz po angielsku, polskiego używaj tylko gdy pracujesz w polskiej budżetówce :)

0

I nie używaj tutaj double tylko BigDecimal ;P

0

No już coś tam ruszyło, konstruktor był 5 elementowy ale usunąłem ostatni żeby nikt nie płakał ze śmiechu z sposobu ustawienia wartości :P

public double sredniaPensja()
    {
        double suma =0;
        for (int i= 0; i<suma; i++){
            suma+=miesiecznePensje[i];
        }
        System.out.println("Zarobiono razem:"+suma);
        //double srednia = suma/miesiecznePensje.length;
       // System.out.println("Srednia pensja: "+srednia);
        
    }

Wytłumaczy ktoś dlaczego to nie działa? Jak dam na końcu return to i tak wywala mi błąd

0
Piotr cezary napisał(a):
    double suma =0;
      for (int i= 0; i<suma; i++){

Przeanalizuj fora.
ps foreach z postu, który wstawiłeś wcześniej był prawidłowy.
ps2 na końcu dajesz return co?

0

Teraz już działa.

public double sredniaPensja()
    {
        double suma =0;
        for (double pomiar: miesiecznePensje) {
            suma += pomiar;
        }
        System.out.println("Zarobiono razem:"+suma);
        double srednia = suma/miesiecznePensje.length;
       // double srednia;
        System.out.println("Srednia pensja: "+srednia);
        return srednia;
    }

Jak nie dam retrun wyskakuje błąd java missing return statement. Zamiast

double srednia = pracownik1.sredniaPensja();

dałem

pracownik1.sredniaPensja();
0
Piotr cezary napisał(a):

To ja nie zrozumiałem do końca wcześniej tego. Gdzieś widziałem jak ktoś robił działania np za pomocą System.out.println("a" + a + "%" + b + " = " + (a % b)) i wyświetlało wynik bez żadnego return

Czy wiesz do czego jest sout? Do wyświetlania.
Jeśli policzonej średniej pensji nie zwrócisz ze swojej metody liczącej, bądź nie przypiszesz jej do jakiegoś pola z w klasie Pracownik, nic z tą wartością poza metodą nie będziesz mógł zrobić bo jej nie będzie.

Czy wiesz po co dodajemy return w metodach, oraz do czego są inne typy metod niz void?

0

Tak, void nic nie musi zwracać a inne typy są aby zwracały jakąś wartość

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