Problem z obsluga ArrayListy

0

Witam,

Mam pewien problem. Poniżej zamieszczam kod - jest dosyć krótki. Zdaję sobie sprawę, że jest to napisane w nieodpowiedni sposób i powinny tu być różne klasy itd. (w moim właściwym projekcie jest napisane jak należy i też nie działa). Kod sklepany specjalnie, aby ograniczyć się do minimum:


import java.util.ArrayList;
import java.util.Random;

public class Main {

	static ArrayList <Integer> procesy = new ArrayList <Integer> (30);
	static private Random rm = new Random();
	
	public static void main(String [] args){
	
		wypelnij();
		wyswietlProcesy(procesy);
		fcfs();
		fcfs();	
		fcfs();
		}
		
	
	private static void wypelnij(){
		
		for(int i =0; i < 30 ; i++){
			
			procesy.add(rm.nextInt(31)%31);
			
		}	
		
	}
	
	static private void wyswietlProcesy(ArrayList <Integer> procesy){
		
		System.out.print("\n");
		for(int i = 0; i < procesy.size(); i++){
			System.out.print(procesy.get(i) + ", ");
		}
		
	}
	
	
	private static double fcfs(){
		
		ArrayList <Integer> proc = procesy;
		
		double tmp=0;
		double wynik = 0;
		int dzielnik = procesy.size();
		
		for (int i = 0; i < dzielnik; i++){
			
			wyswietlProcesy(proc);
			tmp += proc.get(0);
			wynik += tmp;
			proc.remove(0);
			
		}
		
		return wynik/dzielnik;
		
	}

}

Dlaczego moge uzyc metody fcfs() tylko jeden raz? Z mojego właściwego projektu wiem, że po czymś takim ArrayLista 'procesy' ma w sobie tylko 30 wartosci null. Tylko dlaczego? Przeciez nic na niej nie robie. Tworze sobie zmienna pomocnicza i tylko na niej operuje. Nie moge do tego dojsc. Przedwczoraj 4 godziny spedzilem szukajac tego jednego bledu, ktory pewnie okaze sie banalem.

Prosze o pomoc

0

Bo tworząc nową ArrayList nie klonujesz danych, tylko przepisujesz referencję, przez co proc i procesy wskazują na to samo. Musisz sklonować cały obiekt (metoda clone()).

0

Nie tworzysz zmiennej pomocniczej, proc jest inna referencją do tej samej ArrayListy. Funkcja fcfs działa na ArrayList procesy.

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