Hey guys! I get a NullPointerException Error and really dont know what to do anymore ... Ive tried anything I know and nothing helped so I hope someone here can help me!
I simulate bacteria and penezilin(shroom) in a petri dish. So heres the code
bacteria:
import java.util.ArrayList; public class Bakterium extends Lebewesen { //Vermehrungsrate 0.25; Sterberate 0.0 public Bakterium(int position, int alter, ArrayList<Lebewesen> lebewesen) { super(position, alter, lebewesen, 0.25, 0.0); } public void vermehren() { Bakterium b; int wo; wo=super.platzSuchen(); if (wo>0) { b = new Bakterium(wo, 0, super.lebewesenGeben()); super.lebewesenGeben().add(b); } } public boolean istPilz() { return false; } }
JFrame:
import java.util.ArrayList; import javax.swing.*; import java.awt.*; public class Darstellung extends JFrame { ArrayList<Lebewesen> lebewesen; public Darstellung(ArrayList<Lebewesen> nLebenwesen) { super("Population"); //Name des Fensters/JFrames setSize(550,580); setVisible(true); lebewesen=nLebenwesen; } public void paint(Graphics g) { g.setColor(Color.yellow); g.fillRect(0, 0, 550, 580); g.setColor(Color.white); g.fillRect(25, 50, 500, 500); Lebewesen l; for (int i=0; i<lebewesen.size(); i++) { l = lebewesen.get(i); if (l.istPilz()==false) { g.setColor(Color.red); } else { g.setColor(Color.blue); } int x=(l.positionGeben()%100); if (x==0) {x=100;} int y=(l.positionGeben()-x); x=x*5+20; y=y/100*5+50; g.fillOval(x, y, 5, 5); } } }
shroom:
{ public Pilz(int position, int alter, ArrayList<Lebewesen> lebewesen) { super(position, alter, lebewesen, 0.9, 0.2); } public void vermehren() { Pilz p; int wo; wo=super.platzSuchen(); if (wo>0) { p=new Pilz(wo, 0, super.lebewesenGeben()); super.lebewesenGeben().add(p); } } public boolean istPilz() { return true; } public boolean istNachbar(int pos) { int position=super.positionGeben(); if ((position==(pos+1))|| (position==(pos-1))|| (position==(pos+99))|| (position==(pos+100))|| (position==(pos+101))|| (position==(pos-99))|| (position==(pos-100))|| (position==(pos-101))) return true; else return false; } public void bakterienAbtoeten() { Lebewesen l=null; ArrayList<Lebewesen> lebewesen; lebewesen=super.lebewesenGeben(); for (int i=0; i<lebewesen.size(); i=i++) { l=lebewesen.get(i); if((istNachbar(l.positionGeben())==true)&& (l.istPilz()==false)) {lebewesen.remove(i);} } lebewesen.trimToSize(); } }
Simlation:
import java.util.ArrayList; import java.util.Random; import java.awt.*; import javax.swing.*; public class Simulation { private ArrayList<Lebewesen> lebewesen; private Random rand; public Simulation() { rand=new Random(); lebewesen=new ArrayList<Lebewesen>(); } public void lebewesenErzeugen(int anzBakterien, int anzPilze) { //random bakterium for (int i=0; i<anzBakterien; i=i+1) { Bakterium b; b=new Bakterium(rand.nextInt(10000)+1, rand.nextInt(5), lebewesen); lebewesen.add(b); } //random pilz for(int i=0; i<anzPilze; i=i+1) { Pilz p; p=new Pilz(rand.nextInt(10000)+1, 0, lebewesen); lebewesen.add(p); } } public void simulationStarten(int dauer) { Darstellung d=new Darstellung(lebewesen); lebewesenErzeugen(1,1); for (int i=0; i<dauer; i=i+1) { pilzeToetenBakterienAb(); alleLebewesenVermehrenSich(); alleLebewesenAltern(); lebewesen.trimToSize(); } } private void alleLebewesenAltern() { Lebewesen l; double wahrscheinlichkeit; for (int i=0; i<lebewesen.size(); i++) { l=lebewesen.get(i); l.altern(); wahrscheinlichkeit=rand.nextDouble(); if ((wahrscheinlichkeit<l.pSterbenGeben())) { lebewesen.remove(i); } } } private void pilzeToetenBakterienAb() { Lebewesen l; for (int i=0; i<lebewesen.size(); i=i+1) { l=lebewesen.get(i); l.bakterienAbtoeten(); } } private void alleLebewesenVermehrenSich() { Lebewesen l; double wahrscheinlichkeit; int anzahl=lebewesen.size(); for (int i=0; i<anzahl; i++) { l=lebewesen.get(i); wahrscheinlichkeit=rand.nextDouble(); if ((wahrscheinlichkeit<l.pVermehrungGeben())) { l.vermehren(); } } } public int anzahlLebewesen() { int l; l=lebewesen.size(); return l; } }
lifeform:
import java.util.ArrayList; public class Lebewesen{ private int alter; private int position; private double pVermehrung; private double pSterben; private ArrayList<Lebewesen> lebewesen; public Lebewesen(int nPosition, int nAlter, ArrayList<Lebewesen> nLebewesen, double nPVermehrung, double nPSterben) { position=nPosition; alter=nAlter; pVermehrung=nPVermehrung; pSterben=nPSterben; } public void altern() { alter=alter++; pSterben=pSterben+0.05; } private boolean istFrei(int wo) { boolean ergebnis; ergebnis=true; Lebewesen l; for (int i=0; i<lebewesen.size(); i++) { l=lebewesen.get(i); if (wo==l.positionGeben()) {ergebnis=false;} } return ergebnis; } public void vermehren() { //nur Pilze und Bakterien } public int platzSuchen() { int ergebnis=-1; //links if (istFrei(position-1)) ergebnis=position-1; else // links oben if (istFrei(position-101)) ergebnis=position-101; else // oben if (istFrei(position-100)) ergebnis=position-100; else // rechts oben if (istFrei(position-99)) ergebnis=position-99; else // rechts if (istFrei(position+1)) ergebnis=position+1; else // rechts unten if (istFrei(position+101)) ergebnis=position+101; else // unten if (istFrei(position+100)) ergebnis=position+100; else // links unten if (istFrei(position+99)) ergebnis=position+99; else // nichts frei if (ergebnis<1 || ergebnis>10000) ergebnis=-1; return ergebnis; } // weitere Methoden public int alterGeben() {return alter;} public int positionGeben() {return position;} public double pSterbenGeben() {return pSterben;} public double pVermehrungGeben() {return pVermehrung;} public ArrayList<Lebewesen> lebewesenGeben(){return lebewesen;} //wird benötigt auch wenn später überschrieben public boolean istPilz() {return true;} public void bakterienAbtoeten() { /**void -> kein return**/} }
Yes I am from Germany.
So when I create an object of simulation and call the method simulationStarten(int dauer) [dauer means duration] it opens the JFrame with 2 dots, the created shroom and bacteria and then it says:
java.lang.NullPointerException
at Pilz.bakterienAbtoeten(Pilz.java:45)
at Simulation.pilzeToetenBakterienAb(Simulation.java: 72)
at Simulation.simulationStarten(Simulation.java:43)
the method with the problem is:
public void bakterienAbtoeten() { Lebewesen l; ArrayList<Lebewesen> lebewesen; lebewesen=super.lebewesenGeben(); [I]for (int i=0; i<lebewesen.size(); i=i++)[/I] { l=lebewesen.get(i); if((istNachbar(l.positionGeben())==true)&& (l.istPilz()==false)) {lebewesen.remove(i);} } lebewesen.trimToSize(); }
the fat code is marked. And if I delete this method out of simulationStarten(int dauer) the same error occours in:
private boolean istFrei(int wo) { boolean ergebnis; ergebnis=true; Lebewesen l; [B]for (int i=0; i<lebewesen.size(); i++)[/B] { l=lebewesen.get(i); if (wo==l.positionGeben()) {ergebnis=false;} } return ergebnis; }
what is the problem with my "for loop"?
I hope someone can help me!
Thanks in advance!