Metoda zmienia mi pole w każdym obiekcie.

Metoda zmienia mi pole w każdym obiekcie.
Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0

Cześć, mam klasę Kolejka:

Kopiuj
 package procesy;

import java.util.*;

public class Kolejka {
    ArrayList<Proces> kolejka= new ArrayList<Proces>();
    public void dodajProces(Proces proces)
    {
        kolejka.add(proces);
    }
    public Proces getProces(int index)
    {
        return kolejka.get(index);
    }
    public boolean czyPusta()
    {
        return kolejka.isEmpty();
    }
    public void usunProces(int index)
    {
        kolejka.remove(index);
    }
    public void usunProces(Proces proces)
    {
        kolejka.remove(proces);
    }
    public void wyczyscKolejke()
    {
        kolejka.clear();
    }
    public void setProces(int index, Proces proces)
    {
        kolejka.set(index, proces);
    }
    public int dlugoscKolejki()
    {
        return kolejka.size();
    }
    public void wypiszProcesy()
    {
        for(int i=0; i<dlugoscKolejki(); i++)
        {
            System.out.println("Dlugosc zycia: "+getProces(i).getFaza()+" Moment przybycia: "
                    +getProces(i).getMoment()+" Numer procesu: " +getProces(i).getNumer());
        }
    }
}

W niej przechowuję obiekty klasy Proces:

Kopiuj
package procesy;


public class Proces {
    private int fazaProcesu;
    private int numer;
    private int momentZgloszenia;

    public Proces(int fazaProcesu, int numer, int momentZglosz)
    {
        this.fazaProcesu=fazaProcesu;
        this.numer=numer;
        this.momentZgloszenia=momentZglosz;
    }
    public void setFaza(int faza)
    {
        fazaProcesu=faza;
    }
    public int getFaza()
    {
        return fazaProcesu;
    }
    public int getNumer()
    {
        return numer;
    }
    public int getMoment()
    {
        return momentZgloszenia;
    }
}
 

Jak widać w klasie proces mam prywatne pole fazaProcesu. Wartość tego pola zmieniam metodą setFaza().
Teraz generuję sobie randomowo dwie listy typu Kolejka w której przechowuję obiekty klasy Proces. Robię to tak:

Kopiuj
 int dlugosc = r.nextInt(max);
            int moment = r.nextInt(maxM);
            int numer=i;
            Proces pr = new Proces(dlugosc, numer, moment);
            kolejka1.dodajProces(pr);
            kolejka2.dodajProces(pr);

Dlaczego teraz kiedy wywołam setFaza()

Kopiuj
 kolejka1.proces1.setFaza(x);

prywatne pole fazaProcesu zmienia mi się w jednej i drugiej kolejce? I jak to poprawić?

szweszwe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1694
1

Bo do jednej i drugiej kolejki dodajesz ten same proces.

Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0

Aha czyli tworzę jeden proces a dostęp do niego przypisuję odpowiednim kolejkom? I dopóki nie zmieniam wartość w procesie mogę robić operacje na różnych kolejkach a kiedy coś zmienię to się chrzani tak?

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
2

Do obu kolejek dodałeś ten sam Proces

Kopiuj
kolejka1.dodajProces(new Proces(dlugosc, numer, moment));
kolejka2.dodajProces(new Proces(dlugosc, numer, moment));
Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0
bogdans napisał(a):

Do obu kolejek dodałeś ten sam Proces

Kopiuj
kolejka1.dodajProces(new Proces(dlugosc, numer, moment));
kolejka2.dodajProces(new Proces(dlugosc, numer, moment));

Dzięki wielkie, teraz działa tak jak powinno :)
Pozdrawiam!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.