Czesc. Prosze o sprawdzenie zadania, ewentualne sugestie. Czy tak moze wygladac ta lista? Oprocz tego wyswietla blad i nie wiem jak go poprawic. Oprocz tego w metodzie kandydat zwracany jest numer posla, a powinna byc tez partia, bo pozniej sie ich nie rozrozni. Tez nie wiem jak to poprawic. Z gory thx.
Oto tresc:
user image

Klasa Posel

public class Posel {
	int numer;
	Posel nastepny;
	
	public Posel(){
		numer=1;
		nastepny=null;
	}
	
	public Posel(int numer){
		numer=this.numer;
		nastepny=null;
	}
}

Klasa Partia

public class Partia {
	int partia;
	int liczbaPoslow;
	int poparcie;
	Posel lider;
	Posel ostatni;
	
	public Partia(){
		partia=1;
		liczbaPoslow=0;
		poparcie=0;
		lider=null;
		ostatni=null;
	}
	
	
}

Klasa Sejm

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;


public class Sejm {
	Partia p=new Partia();
	int ilosc;
	int P;
	Partia tab[];
	Posel rzad[];
	Posel pierwszy;
	Posel pos=new Posel();
	
	public void read(){
		try{
			
			BufferedReader bf=new BufferedReader(new FileReader("DA1"));
			String wiersz=null;
			wiersz=bf.readLine();
			StringTokenizer st = new StringTokenizer(wiersz," ");
			p.partia=Integer.parseInt(st.nextToken());
			ilosc=Integer.parseInt(st.nextToken());
			System.out.println("Ilosc partii: " + p.partia +" Ilosc poslow: " + ilosc);
			tab=new Partia[p.partia];
			
			
			int licznik=0;
			int suma=0;
			while(licznik!=p.partia){
				wiersz=bf.readLine();
				st = new StringTokenizer(wiersz," ");
				p.poparcie=Integer.parseInt(st.nextToken());
				System.out.println("Poparcie partii nr "+ (licznik+1) + " wynosi: " + p.poparcie);
				p.liczbaPoslow=(ilosc-p.partia)*p.poparcie/100+1;
				tab[licznik] = new Partia();
				tab[licznik].liczbaPoslow=p.liczbaPoslow;
				suma=suma+p.liczbaPoslow;
				if(licznik+1==p.partia){
					if(suma!=ilosc){
						int r=ilosc-suma;
						tab[0].liczbaPoslow=tab[0].liczbaPoslow+r;
					}
				}
				licznik++;
			}
			
			while((wiersz=bf.readLine())!=null){
				st = new StringTokenizer(wiersz," ");
				P=Integer.parseInt(st.nextToken());
			}
			System.out.println("Liczba P wynosi: "+ P);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public void liczbaPoslow(){
		for(int i=0; i<p.partia; i++){
			System.out.println("LiczbaPoslow partii nr "+ (i+1) + " wynosi: " + tab[i].liczbaPoslow);
		}
	}
	int liczbaCzlonkow;
	public void czlonkowieRzadu(){
		liczbaCzlonkow=p.partia+ilosc/(p.partia*p.partia);
		//System.out.println("Liczba czlonkow rzadu to: " +liczbaCzlonkow);
	}
	
	int numerKandydata;
	int partiaKandydata;
	
	public int Kandydat(){
		
		if(pierwszy==null){
			pierwszy=p.lider.nastepny;//tu wyswietla nullpointer exception
			pierwszy=new Posel(2);
			
		}
		else{
			int z=1;
			int i=0;
			pos.numer=2;
			Posel pom=pierwszy;
			while(pos.numer<tab[i].liczbaPoslow&& i<p.partia ){
				pom=pom.nastepny;
				pos.numer++;
				if(z==P){
					numerKandydata= pos.numer;
					partiaKandydata=i+1;
					z=0;
					break;
				}
				z++;
				if(pos.numer==tab[i].liczbaPoslow&&i<p.partia){
					i++;
					pos.numer=2;
				}else{
					pom=p.ostatni;
					p.ostatni.nastepny=pierwszy;
				}
			}
		}
		return numerKandydata+partiaKandydata;
	}

	public void wyborRzadu(){
		rzad=new Posel[liczbaCzlonkow];
		for(int i=0; i<liczbaCzlonkow; i++){
			rzad[i]=new Posel();
		}
		for(int k=0; k<p.partia; k++){
			rzad[k].numer=1;
		}
		for(int w=p.partia; w<liczbaCzlonkow; w++){
			
			rzad[w].numer=Kandydat();
			System.out.println(rzad[w].numer);
		}
		
	}
	
	public void wyborPremiera(){
		
	}
}

Main

public class Main {
	public static void main(String args[]){
		Sejm s=new Sejm();
		s.read();
		System.out.println();
		s.liczbaPoslow();
		s.czlonkowieRzadu();
		s.wyborRzadu();
	}
}