Witajcie
Mam na studiach kilka zdań algorytmicznych i z jednym z nich nie jestem w stanie sobie poradzić. Wkleję tylko część kodu która dotyczy problemu.
Mam zmienne globalne:
static final int MAX_V = 10;
static final int[] V = {6, 2, 3, 2, 3, 1};
static final int[] W = {6, 4, 5, 7, 10, 2};
static final Random losuj = new Random();
static final int LICZBA_LOSOWAN = 10;
Dostałem opis do metody z którą mam problem:
"Do plecaka pakujemy kolejno losowo wybrane przedmioty. Jeśli kolejny przeznaczony do zapakowania przedmiot nie zmieści się już do plecaka, to kończymy pakowanie."
I oto metoda którą dostałem załączoną do tego:
static boolean[] losujPrzedmioty() {
boolean[] przedmioty = new boolean[V.length];
int i = losuj.nextInt(V.length);
int v = V[i];
while (v <= MAX_V) {
przedmioty[i] = true;
i = losuj.nextInt(V.length);
if (!przedmioty[i]) {
v = v + V[i];
}
}
return przedmioty;
}
Teraz mam dwa zadania do wykonania.
- Mam poprawić metodą losujPrzedmioty tak aby była prawna. Jako podpowiedź mam, że ta metoda zadziała prawidłowo tylko przy konkretnych wartościach m.in. przy takich jakie mam w zadaniu.
- Mam zmienić metodę losujPrzedmioty tak aby działała według tych wytycznych: "Do plecaka staramy się zapakować w losowej kolejności wszystkie przedmioty. Jeśli wybrany do zapakowania przedmiot nie mieści się do plecaka, to go odrzucamy i wybieramy kolejny przedmiot spośród pozostałych. "
Jak ktoś chce to w załączniku umieszczam cały kod tego programu.
Bardzo liczę na pomoc, gdyż pomimo sporej ilości poświęconego czasu to nie potrafię sobie poradzić z tymi dwoma zadaniami, a niestety terminy już mnie gonią.