Metoda zmienia mi pole w każdym obiekcie.

0

Cześć, mam klasę Kolejka:

 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:

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:

 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()

 kolejka1.proces1.setFaza(x);

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

1

Bo do jednej i drugiej kolejki dodajesz ten same proces.

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?

2

Do obu kolejek dodałeś ten sam Proces

kolejka1.dodajProces(new Proces(dlugosc, numer, moment));
kolejka2.dodajProces(new Proces(dlugosc, numer, moment));
0
bogdans napisał(a):

Do obu kolejek dodałeś ten sam Proces

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

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

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