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.

  1. 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.
  2. 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ą.