Witam. Jestem w trakcie pisania aplikacji i napotkałem pewien problem. Aplikacja jest symulatorem życie 4 organizmów(bakterii,pelzaczy,pelzaczofagów i teleportatorów). Problemem jest funkcja odpowiadająca za zjadanie bakterii przez pelzacze o nazwie
zjedz(Lista lista)[linijka 125 klasa Pelzacz],która jest wywoływana przez funkcje ruch()[linijka 81 klasa pełzacz] która jest wywolywana w linijce 49 klasy NowySwiat. Funkcja ruch(Lista lista) korzysta z funkcji czyJestBakteria(int pozycjaX, int pozycjaY)[linijka 82 klasa Lista] i usunBakterie(int pozycjaX, int pozycjaY) [linijka 107 klasa Lista]. Przechodząc do sedna problem polega na tym, że w zależności od tego ile bakterii zje pełzacz tyle pełzaczy jest pomijanych w kolejce. Bardzo proszę o pomoc, siedzę już nad tym parenaście godzin i nie mogę nic wymyślić. Poniżej wklejam kody powyższych klas.
KLASA NowySwiat(Główna):
package nowyswiat;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class NowySwiat {
public static int wczytajInt() {
Scanner wczytaj = new Scanner(System.in);
return wczytaj.nextInt();
}
public static int losuj(int zakres) {
Random r = new Random();
return r.nextInt(zakres);
}
public static void main(String[] args) {
int N = wczytajInt();
int M = wczytajInt();
Lista kolejka = new Lista();
for (int indeks = 0; indeks < N * M * 20; indeks++) {
Bakteria bakteria = new Bakteria(losuj(N), losuj(M));
bakteria.indeks = indeks;
kolejka.dodaj(bakteria);
}
for (int indeks = 0; indeks < N * M * 6; indeks++) {
Pelzacz pelzacz = new Pelzacz(losuj(N), losuj(M));
pelzacz.indeks = indeks;
kolejka.dodaj(pelzacz);
}
for (int indeks = 0; indeks < N * M * 1; indeks++) {
Pelzaczofag pelzaczofag = new Pelzaczofag(losuj(N), losuj(M));
kolejka.dodaj(pelzaczofag);
}
for (int indeks = 0; indeks < N * M * 1; indeks++) {
Teleportator teleportator = new Teleportator(losuj(N), losuj(M));
kolejka.dodaj(teleportator);
}
do{
kolejka.rozmiar=kolejka.zyjatka.size();
for(int indeks = 0;indeks<kolejka.rozmiar;indeks++){
Zyjatko zyjatko = kolejka.daj(indeks);
zyjatko.ruch(M, N, kolejka);
}
}while(false);
}
}
KLASA Lista:
package nowyswiat;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
public class Lista {
List<Zyjatko> zyjatka = new LinkedList<Zyjatko>();
private List<Bakteria> bakterie = new LinkedList<Bakteria>();
private List<Pelzacz> pelzacze = new LinkedList<Pelzacz>();
int rozmiar;
public void dodaj(Zyjatko zyjatko) {
this.zyjatka.add(zyjatko);
if(zyjatko instanceof Bakteria){
Bakteria bakteria = (Bakteria) zyjatko;
this.bakterie.add(bakteria);
System.out.println("Dodałem do bakterii");
}else if(zyjatko instanceof Pelzacz){
Pelzacz pelzacz = (Pelzacz) zyjatko;
this.pelzacze.add(pelzacz);
}
}
public Zyjatko daj(int indeks) {
return this.zyjatka.get(indeks);
}
public void usunWedlugIndeksu(int indeks) {
Zyjatko zyjatko =this.daj(indeks);
this.zyjatka.remove(zyjatko);
if(zyjatko instanceof Bakteria){
this.bakterie.remove(zyjatko);
}else if(zyjatko instanceof Pelzacz){
this.pelzacze.remove(zyjatko);
}
this.rozmiar--;
}
public void usunWedlugObiektu(Zyjatko zyjatko){
this.zyjatka.remove(zyjatko);
if(zyjatko instanceof Bakteria){
this.bakterie.remove(zyjatko);
}else if(zyjatko instanceof Pelzacz){
this.pelzacze.remove(zyjatko);
}
this.rozmiar--;
}
public Zyjatko dajlosowy(){
Random los = new Random();
return zyjatka.get(los.nextInt(zyjatka.size()));
}
public void liczPunktyTurowe(Zyjatko zyjatko,int indeks){
Random los = new Random();
int szczescie = los.nextInt(23);
if(zyjatko instanceof Bakteria){
Bakteria bakteria = (Bakteria) zyjatko;
bakteria.setPunktyTurowe(indeks+szczescie);
}else if(zyjatko instanceof Pelzacz){
Pelzacz pelzacz = (Pelzacz) zyjatko;
pelzacz.setPunktyTurowe(szczescie+indeks+(10-pelzacz.getWaga()));
}else if(zyjatko instanceof Pelzaczofag){
Pelzaczofag pelzaczofag = (Pelzaczofag) zyjatko;
pelzaczofag.setPunktyTurowe(szczescie+indeks+(8-pelzaczofag.getIQ()));
}else if(zyjatko instanceof Teleportator){
Teleportator teleportator = (Teleportator) zyjatko;
teleportator.setPunktyTurowe(szczescie+indeks);
}
}
public boolean czyJestBakteria(int pozycjaX, int pozycjaY) {//funkcja sprawdzająca czy na danym polu jest bakteria
for (Bakteria bakteria : bakterie) {
int i=0;
i++;
if (bakteria.getPozycjaX() == pozycjaX && bakteria.getPozycjaY() == pozycjaY) {
return true;
}
}
return false;
}
public boolean czyJestPelzacz(int pozycjaX, int pozycjaY) {
for (Pelzacz pelzacz : pelzacze) {
if (pelzacz.getPozycjaX() == pozycjaX && pelzacz.getPozycjaY() == pozycjaY) {
return true;
}
}
return false;
}
public void usunBakterie(int pozycjaX, int pozycjaY){//funkcja usuwajaca bakterie
for (int indeks = 0; indeks < bakterie.size(); indeks++) {
Zyjatko zyjatko =this.daj(indeks);
if (zyjatko.getPozycjaX() == pozycjaX && zyjatko.getPozycjaY() == pozycjaY && zyjatko instanceof Bakteria) {
this.usunWedlugObiektu(zyjatko);
break;
}
}
}
public void usunPelzacza(int pozycjaX, int pozycjaY){
for (int indeks = 0; indeks < pelzacze.size(); indeks++) {
Zyjatko zyjatko =this.daj(indeks);
if (zyjatko.getPozycjaX() == pozycjaX && zyjatko.getPozycjaY() == pozycjaY && zyjatko instanceof Pelzacz) {
this.usunWedlugObiektu(zyjatko);
}
}
}
}
KLASA Pelzacz:
package nowyswiat;
import java.util.Random;
public class Pelzacz implements Zyjatko {
int pozycjaX;
int pozycjaY;
int waga;
int punktyTurowe;
int indeks;
Pelzacz(int x, int y) {
this.pozycjaX = x;
this.pozycjaY = y;
Random r = new Random();
this.waga = r.nextInt(11);
this.punktyTurowe = 0;
}
Pelzacz(int x, int y, int waga) {
this.pozycjaX = x;
this.pozycjaY = y;
this.waga = waga;
this.punktyTurowe = 0;
}
Pelzacz() {
}
@Override
public int getPozycjaX() {
return pozycjaX;
}
@Override
public int getPozycjaY() {
return pozycjaY;
}
public int getWaga() {
return waga;
}
@Override
public int getPunktyTurowe() {
return punktyTurowe;
}
@Override
public void setPozycjaX(int pozycjaX) {
this.pozycjaX = pozycjaX;
}
@Override
public void setPozycjaY(int pozycjaY) {
this.pozycjaY = pozycjaY;
}
public void setWaga(int waga) {
this.waga = waga;
}
@Override
public void setPunktyTurowe(int punktyTurowe) {
this.punktyTurowe = punktyTurowe;
}
@Override
public void ruch(int granicaX, int granicaY, Lista lista) {
System.out.println("Pełzne " + this.indeks);
this.przemieszczenie(granicaX, granicaY);
this.zjedz( lista);
}
public void przemieszczenie(int granicaX, int granicaY) {
System.out.println("Pełzne " + this.indeks);
System.out.println("Przemieściłem się z: " + this.getPozycjaX() + " x " + this.getPozycjaY());
Random los = new Random();
int wyjscie = 0;
do {
switch (los.nextInt(4)) {
case 0:
if (this.getPozycjaX() + 1 < granicaX) {
this.setPozycjaX(this.getPozycjaX() + 1);
wyjscie++;
}
break;
case 1:
if (this.getPozycjaX() > 0) {
this.setPozycjaX(this.getPozycjaX() - 1);
wyjscie++;
}
break;
case 2:
if (this.getPozycjaY() + 1 < granicaY) {
this.setPozycjaY(this.getPozycjaY() + 1);
wyjscie++;
}
break;
case 3:
if (this.getPozycjaY() > 0) {
this.setPozycjaY(this.getPozycjaY() - 1);
wyjscie++;
}
break;
}
} while (wyjscie == 0);
System.out.println(" na: " + this.getPozycjaX() + " x " + this.getPozycjaY());
}
public void zjedz(Lista lista) {// To jest funkcja która sprawia problem
do {
if (lista.czyJestBakteria(this.getPozycjaX(), this.getPozycjaY())) {
System.out.println("Zjadłem");
lista.usunBakterie(this.getPozycjaX(), this.getPozycjaY());
this.setWaga(this.getWaga() + 1);
} else {
break;
}
} while (this.getWaga() < 10);
}
public void rozbijanie(Lista lista) {
System.out.println("Penkłem");
this.setWaga(2);
}
public void przedstawSie() {
}
}
Interfejs z którego korzysta Klasa Pełzacz:
package nowyswiat;
public interface Zyjatko {
public int getPozycjaX();
public int getPozycjaY();
public int getPunktyTurowe();
public void setPozycjaX(int pozycjaX);
public void setPozycjaY(int pozycjaY);
public void setPunktyTurowe(int punktyTurowe);
public void ruch(int granicaX,int granicaY,Lista lista);
}