Podstawowe zadania z klas obiektów i metod

0

Panowie, ponownie potrzebuję Waszej pomocy.
Rozwiązałem proste zadanie polegające na utworzeniu klasy Dzem z odpowiednimi konstruktorami (zadanie polegało miedzy innymi na poćwiczeniu przeciążania konstruktorów),


public class Dzem {
		String smak;
		double waga
			
		Dzem(double waga){
			this("No name",waga);
			}
					
		Dzem(String smak){
			this(smak,-100.0);	
			}
			
		Dzem (String smak, double waga){
			this.smak = smak;
			this.waga = waga;
			}
		 
		public String toString(){//overriding the toString() method  
			 return smak+" "+waga; 
			 }  	
}

stworzyłem klasę Słoik, do której będę pakował dzem:

Nastepnie utwórz obiekt klasy Sloik i napełnij go wybranym rodzajem dzemu, operacje
powtórz dla wszystkich rodzajów dzemów.
Uwaga: nakladanie dzemu do zamknietego słoika lub pozostawienie słoika nie zamknietego
moze prowadzic do zepsucia sie produktu!>

public class Sloik {

	Dzem dzem;
	boolean otwarty;
	
	
	Sloik(boolean czyOtwarty, Dzem rodzaj){//w konstruktorze powinno byc sprawdzenie czy słoik jest otwarty jak nie to go otworzyc, napelnic i zamknac
		otwarty = czyOtwarty;
		if(czyOtwarty==false) otworz();
		dzem = rodzaj;
		zamknij();
		}

	boolean otworz(){
		return otwarty = true;
	}
	
	boolean zamknij(){
		return otwarty = false;
	}
	
	boolean czyOtwarty(){
		return otwarty;
	}
	
	public String toString(){
		return "Rodzaj Dzemu: " + dzem +
				"\nCzy słoik jest otwarty: " + otwarty;
	}
}

i na koniec:

Utwórz klase Fabryka, która przez metode przyjmij bedzie skupowała owoce,
nastepnie gdy zbierze sie 10 kg owoców, fabryka bedzie mogła wytworzyc 10 słoików
dzemu.>
ale tu progam przestaje działac. chce po spełnieniu warunku że zostało uzbierane 10 kg owoców odpalić konstruktor Słoik którego jednym z parametrów jest konstruktor Dzem... Można coś takiego w ogóle zrobić?

import java.util.Random;

public class Fabryka {
	int stanOwocy = 0;
	Sloik[] sloik = new Sloik[0];
	String [] dzem = {"malinowy","truskawkowy","porzeczkowy"};
	Random r = new Random();
	int liczba = dzem.length;
	
	
	public int przyjmij(){
		stanOwocy += r.nextInt(2);
		if(stanOwocy>=10) {
			for(int i =0; i<=sloik.length;i++)
				sloik[i] = new Sloik(false, Dzem(dzem[r.nextInt(liczba)], 1.0));
				}
			else System.out.println("Niewystarczająca ilosc owoców do wyprodukowania dzemu");
	}
}
0

A gdzie pytanie/problem?
@Edit: Zauważyłem już problem, ale nie mogę usunąć posta.

0

Przyjmij, że metoda przyjmij przyjmuje owoce/smak jako argument.

0
jarekr000000 napisał(a):

Przyjmij, że metoda przyjmij przyjmuje owoce/smak jako argument.

tylko wtedy, jeżeli chce żeby powstał za każdym razem słoik z pseudo losowym (innym) dżemem, to muszę zmienić wnętrze metody, a pętle zastosować na metodzie przyjmij podając losowy argument? Dobrze rozumiem?

Obecnie metoda przyjmij wywala mi ulubiony bład początkujących tj.:
"java.lang.ArrayIndexOutOfBoundsException: 2"
grrrr...
najgorsze że nie wiem w którym miejscu (wydawało mi się, że się zabezpieczyłem przed przekroczeniem zakresu tablicy poprzez tab.length...):

public void przyjmij(){
		
		do{stanOwocy += r.nextInt(3);
		}while (stanOwocy<10);
		if(stanOwocy>=10) {
			for(int i=0; i<=sloik.length;i++){
				sloik[i] = new Sloik(false, new Dzem(dzem[r.nextInt(liczba)]));
				System.out.println("Wyprodukowano dzem " + sloik[i]);
				}
			}
			else System.out.println("Niewystarczająca ilosc owoców do wyprodukowania dzemu");
	}

co ciekawe tworzy obiekty, ale po ich utworzeniu wywala błąd.

1

Źle się zabezpieczyłeś przed przekroczeniem zakresu

i<=sloik.length

zamień na

i<sloik.length
0

Dziekuje.

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