Problem z tablica ArrayList

0

Witam,
piszę stacje benzynową na zajęcie. Program ma polegać na tym, że samochody jeżdżą i jak kończy im się paliwo to mają zajechać na stację benzynową w celu zatankowania. Maja sprawdzić który dystrybutor jest wolny a jak nie ma żadnego wolnego to mają ustawić się w najkrótszej kolejce. Wymyśliłem to tak, że tworze 3 ArrayListy i szukam która ma najmniejszy rozmiar i do tej która ma najmniejszy rozmiar dodaje samochód, ale coś mi nie działa. Wywala java.lang.NullPointerException. W komentarzach napisałem które linijki sprawiają kłopoty. Moglibyście spojrzeć i coś doradzić. Za wszelkie wskazówki bardzo dziękuje.

import java.util.ArrayList;


public class CPN {
	
	public int ilosc_dystrybutorow;
	public boolean [] dysrtybutor;
	Samochod auto;
	public ArrayList<Integer> [] lista;
	
	
	
	public CPN (int ilosc_dystrybutorow)
	{
		this.ilosc_dystrybutorow=ilosc_dystrybutorow;
	        this.lista= new ArrayList [this.ilosc_dystrybutorow];  //NIE WIEM CZY TA JEST DOBRZE
		this.dysrtybutor = new boolean [ilosc_dystrybutorow];
		for(int i=0; i<this.dysrtybutor.length;i++)
		{
			this.dysrtybutor[i]=true;
		}
	}
	
	
	public synchronized boolean dostepnosc_dystrybutora (int nr_pojazdu)
	{	
		int najkrotsza =0;
		for(int i=0;i<dysrtybutor.length;i++)
		{
			if(dysrtybutor[i]==true) 
				{
				System.out.println("Pojazd "+nr_pojazdu+" tankuje przy dystrybutorze"+ i);
				dysrtybutor[i]=false;
				try {
					wait(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				dysrtybutor[i]=true;
				lista[i].remove(lista[i].indexOf(nr_pojazdu));
				System.out.println("Kolejka do dystrybutora nr "+i+" jest rowna "+kolejka_dystrybutora[i]);
				return dysrtybutor[i]; 
				}
			else if (dysrtybutor[i]==false)
			{
/*COŚ MU NIE PASUJE TUTAJ*/      najkrotsza = dlugosc_kolejki();     
				lista[najkrotsza].add(nr_pojazdu);
				System.out.println("Kolejka do dystrybutora nr "+i+" jest rowna "+kolejka_dystrybutora[i]);
				System.out.println("Dystrybutor "+i+" jest niedostepny");
			}
			
		}
		return false;
	}
	
	public int dlugosc_kolejki ()
	{
		int i=0;
		int min;
		min=lista[0].size();        //COŚ MU NIE PASUJE TUTAJ
		do
		{
			if(lista[i].size()<min) min=i;
			i++;
		}while(i<ilosc_dystrybutorow);
		return min;
	}
	
}


	
 
0
  1. Po co ci zmienna typu ArrayList, skoro możesz mieć typ List i możliwość podmiany implementacji w każdej chwili?
  2. Jeżeli tworzysz tablicę prymitywów to wypełniana jest zerami, jeśli tworzysz tablicę obiektów to wypełniana jest nullami.
  3. Żadne zmienne nie powinny być public (ale stałe już tak).

Poprawny kod wygląda tak:

import java.util.ArrayList;
import java.util.List;


public class Main {

    private List<Integer> listy[];
    public static final int IlośćList = 10;

    public void run() {
        listy = new List[IlośćList];
        for (int i = 0; i < IlośćList; i++) {
            listy[i] = new ArrayList<Integer>();
        }
    }

    public static void main(String[] args) {
        new Main().run();
    }
}

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