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:
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();
}
}