Krótkie zadanie - naprzemienne wypełnianie nowej tablic dwiema poprzednimi.

0

Siemano! Mam utworzone dwie tablice typu float o różnej długości. Muszę je połączyć w jedną nową tablicę i wypełnić ją naprzemiennie wartościami z pierwszej i drugiej tablicy. Jeżeli któraś tablica jest większa to muszę zakończyć nową tablice jej wartościami.

public class Main {
    public static void main(String[] args) {

        float arr1[] = new float[2];
        float arr2[] = new float[3];

        for (int i = 0; i < arr1.length; i++) {
            arr1[i] = (float) (Math.random() * 10);
        }

        for (int i = 0; i < arr2.length; i++) {
            arr2[i] = (float) (Math.random() * 10);
        }

       float[] myNewTab = new float[arr1.length + arr2.length];

        int k = 0, l = 0, m = 0;

        while (k <= arr1.length && k <= arr2.length) {
            if (k % 2 == 0) {
                myNewTab[k] = arr1[l];
                l++;
            } else {
                myNewTab[k] = arr2[m];
                m++;
            }
            k++;
        }

Mam problem z dalszym wypełnieniem tablicy. Ktoś nakieruje jak ją wypełnić pozostałymi elementami z dłuższej tablicy?

0

Stwórz sobie zmienne pomocnicze longerTab i shorterTab i do nich przypisz odpowiednie tablice (sprawdź pierw która jest dłuższa i która krótsza)
A później po prostu 2 pętle

for (int i = 0; i < longerTab.length; i++) {
    newTab[i] = longerTab[i];
}
for (int i = 0; i < shorterTab.length; i++) {
    newTab[longerTab.length + i] = shorterTab[i];
}

EDIT: doczytałem że naprzemiennie dopiero teraz :)

for (int i = shorterTab.length; i < longerTab.length; i++) {
    newTab[i] = longerTab[i];
}

Po wypełnieniu naprzemiennie sprawdź która była dłuższa i zaczynając od indeksu którego nie ma już w tej krótszej przepisz tablicę do końca

0
Kermii napisał(a):

Stwórz sobie zmienne pomocnicze longerTab i shorterTab i do nich przypisz odpowiednie tablice (sprawdź pierw która jest dłuższa i która krótsza)
A później po prostu 2 pętle

for (int i = 0; i < longerTab.length; i++) {
    newTab[i] = longerTab[i];
}
for (int i = 0; i < shorterTab.length; i++) {
    newTab[longerTab.length + i] = shorterTab[i];
}

EDIT: doczytałem że naprzemiennie dopiero teraz :)

for (int i = shorterTab.length; i < longerTab.length; i++) {
    newTab[i] = longerTab[i];
}

Po wypełnieniu naprzemiennie sprawdź która była dłuższa i zaczynając od indeksu którego nie ma już w tej krótszej przepisz tablicę do końca

Tok tego zadania jak najbardziej rozumiem. Zmodyfikowałem pętle while i naprzemiennie wypełnia nową tablicę do momentu, aż brakuje już indeksów w krótszej.

float[] myNewTab = new float[arr1.length + arr2.length];

       int k = 0, l = 0, m = 0;

       while (k <= arr1.length + 1 && k <= arr2.length + 1) {
           if (k % 2 == 0) {
               myNewTab[k] = arr1[l];
               l++;
           } else {
               myNewTab[k] = arr2[m];
               m++;
           }
           k++;
       }

W Twojej pętli na dalsze wypełnienie błędne jest zakończenie iteracji. Nowa pętla musi iterować do końca nowej tablicy (myNewTab.length). Też mi nie pasuje jedna zmienna w iteracji (newTab[i] = longerTab[i];). W pewnym momencie i naszej nowej tablicy będzie większe od i dłuższej. To wydaje się tak banalne :/ Masz jakiś pomysł?

1
int k = 0, i = 0, j = 0;

while (i < arr1.length && j < arr2.length) 
{ 
    myNewTab[k++] = arr1[i++];
    myNewTab[k++] = arr2[j++];
}

while (i < arr1.length) 
{ 
    myNewTab[k++] = arr1[i++];
}

while (j < arr2.length) 
{ 
    myNewTab[k++] = arr2[j++];
}

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