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

Odpowiedz Nowy wątek
2018-11-10 14:31
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?

edytowany 1x, ostatnio: s4uden4, 2018-11-10 14:39

Pozostało 580 znaków

2018-11-10 14:55
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

edytowany 1x, ostatnio: Kermii, 2018-11-10 14:57

Pozostało 580 znaków

2018-11-10 18:36
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ł?

edytowany 1x, ostatnio: s4uden4, 2018-11-10 18:37

Pozostało 580 znaków

2018-11-10 18:45
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++];
}

Java to taki C# tyle że z gorszą składnią.
edytowany 1x, ostatnio: neves, 2018-11-10 18:46
W końcu ktoś mądry pozamiatał. Dzięki wielkie! - s4uden4 2018-11-10 18:51

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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