Trójwymiarowa tablica

Odpowiedz Nowy wątek
2019-08-29 13:22
0

Witam wszystkich,
Chciałbym prosić o pomoc w naprowadzeniu mnie na rozwiązanie ćwiczenia. Nie umiem sobie wyobrazić jak dokładnie ma wyglądać ta tablica. Uczę się javy i zadanie jest takie:

Utwórz trójwymiarową tablicę dla wartości typu int (będzie to struktura, którą można
sobie wyobrazić jako prostopadłościan składający się z sześcianów; każdy sześcian będzie
pojedynczą komórką). Powinna umożliwiać przechowywanie trzydziestu wartości.
Poszczególne komórki wypełnij liczbami od 30 do 59. Zawartość wyświetl na ekranie.

Ja zacząłem tak:

int tab[][][]=new int[31][30][30];
int wypelniacz=30;

        for (int i=0; i<tab.length; i++)
        {

            for (int j=0; j<tab[j].length; j++)
            {   wypelniacz=30;
                for (int k=0; k<tab[k].length; k++)
                {
                tab[i][j][k]=wypelniacz++;

                }               
            }

        }
        for (int i=0; i<tab.length; i++)
        {

            for (int j=0; j<tab[j].length; j++)
            {   
                for (int k=0; k<tab[k].length; k++)
                {wypelniacz=30;
                tab[i][j][k]=wypelniacz++;
System.out.println("Rząd "+i+" komórka 1 "+j+" komórka2 "+k+" "+tab[i][j][k]);

                }               
            }

        }

Będę wdzięczny za pomoc

edytowany 2x, ostatnio: cerrato, 2019-09-16 11:57

Pozostało 580 znaków

2019-08-29 13:36
0

Skoro tablica ma pomieścić 30 wartości to przykładowe rozmiary: new int[2][3][5].

Pozostało 580 znaków

2019-08-29 13:41
1

Jak powyżej, Poprawione również granice pętli:

int tab[][][]=new int[5][3][2];
int wypelniacz=30;
  System.out.println(tab.length); // -> 5
   System.out.println(tab[0].length); // -> 3
    System.out.println(tab[0][0].length); // -> 2
        for (int i=0; i<tab.length; i++)
        {

            for (int j=0; j<tab[j].length; j++)
            {   
                for (int k=0; k<tab[k][j].length; k++)
                {
                tab[i][j][k]= wypelniacz++;
                }               
            }

        }

          for (int i=0; i<tab.length; i++)
        {

            for (int j=0; j<tab[j].length; j++)
            {   
                for (int k=0; k<tab[k][j].length; k++)
                {

System.out.println("Rząd "+i+" komórka 1 "+j+" komórka2 "+k+" "+tab[i][j][k]);

                }               
            }

        }

"for (int j=0; j<tab[j].length; j++)" - serio - _13th_Dragon 2019-09-18 20:06

Pozostało 580 znaków

2019-08-29 18:31
0

Dzięki wielkie za odpowiedź :) Pytanie, dlaczego rozmiar w 3 pętli jest j i k?

Pozostało 580 znaków

2019-08-29 19:02
1

Tak to jest w trójwymiarowych tablicach, wydrukowałem Ci nawet, dydaktycznie, kolejne rozmiary:) Jak sobie to Wyobrazisz, jako pięć ułożonych na sobie prostokątów 3 x 2, zaimplementowane jest to tak, że nazwa tablicy to pierwszy wymiar (5), pierwszy bok prostokąta (tab[0]) to 3 i drugi bok (tab[0][0] lub tab[j][k], nieważne byleby w zasięgu) to 2.


edytowany 1x, ostatnio: lion137, 2019-08-29 19:02

Pozostało 580 znaków

2019-08-31 15:00
0
lion137 napisał(a):

Tak to jest w trójwymiarowych tablicach, wydrukowałem Ci nawet, dydaktycznie, kolejne rozmiary:) Jak sobie to Wyobrazisz, jako pięć ułożonych na sobie prostokątów 3 x 2, zaimplementowane jest to tak, że nazwa tablicy to pierwszy wymiar (5), pierwszy bok prostokąta (tab[0]) to 3 i drugi bok (tab[0][0] lub tab[j][k], nieważne byleby w zasięgu) to 2.

Miałbym jeszcze jedno pytanie, ale jeśli można to bez pisania kodu, po prostu nie do końca rozumiem jak ma wyglądać ta tablica. Polecenie jest takie:

Utwórz tablicę dwuwymiarową, w której liczba komórek w kolejnych rzędach będzie
równa dziesięciu kolejnym wartościom ciągu Fibonacciego, poczynając od elementu
o wartości 1 (1, 1, 2, 3, 5 itd.). Wartość każdej komórki powinna być jej numerem w danym
wierszu w kolejności malejącej (czyli dla wiersza o długości trzech komórek kolejne
wartości to 3, 2, 1). Zwartość tablicy wyświetl na ekranie.

Czy ja mam wyświetlić wszystkie wartości komórek w każdym rzędzie, do wartości ciągu Fibonacciego? (czyli kolejne rzędy mają mieć długosć 1,1,2,3,5,8, itd)?

Pozostało 580 znaków

2019-08-31 16:02
1

Tak, tylko, że to nie będzie tablica dwuwymiarowa n x m, bo w każdym (prawie) wierszu będzie inna ilość elementów; to będzie lista list;
[[1], [1], [2, 1], [3, 2, 1], [5, 4, 3, 2, 1], [8, 7, ....., 1], ..., [55, 54, ..., 1]]


Pozostało 580 znaków

2019-09-02 08:32
0
lion137 napisał(a):

Tak, tylko, że to nie będzie tablica dwuwymiarowa n x m, bo w każdym (prawie) wierszu będzie inna ilość elementów; to będzie lista list;
[[1], [1], [2, 1], [3, 2, 1], [5, 4, 3, 2, 1], [8, 7, ....., 1], ..., [55, 54, ..., 1]]

Czyli chodzi o coś takiego?

tab [0] = 1
tab [1] = 1
tab [2] = 1 2
tab [3] = 1 2 3
tab [4] = 1 2 3 4 5
tab [5] = 1 2 3 4 5 6 7 8

Tylko tutaj deklarowałem długość wierszy na początku, a rozumiem że muszę to zrobić "automatycznie"

Dokładnie, masz to zrobić automatycznie. Zwróć uwagę jeszcze na to: "Wartość każdej komórki powinna być jej numerem w danym wierszu w kolejności malejącej". - Delor 2019-09-02 08:36

Pozostało 580 znaków

2019-09-02 10:45
0

Poddaję się, nie wiem jak zrobić żeby kolejne długości rzędów były sumą dwóch poprzednich. Zrobiłem jedynie z deklaracją długości, na razie do 6 rzędu

int tab[][]=new int[6][];
        tab[0]=new int[1];
        tab[1]=new int[1];
        tab[2]=new int[2];
        tab[3]=new int[3];
        tab[4]=new int[5];
        tab[5]=new int[8]; 
        int b;
        int wypelniacz=1;
        /* dla rzędu 0: */ 
        for (int i=0; i<tab.length; i++)
        { 

            wypelniacz=tab[i].length;
            for (int j=0; j<tab[i].length; j++)
            { 
                if (i==1||i==2)
                {

                    tab[i][j]=1;    
                }

                    tab[i][j]=wypelniacz--; 

                }
            }

        for (int i=0; i<tab.length; i++)
        {
            System.out.print("tab ["+i+"] = ");
            for (int j=0; j<tab[i].length; j++)
            {

                if (wypelniacz==1||wypelniacz==2)
                {
                    tab[i][j]=1;
                    System.out.print(tab[i][j]+" ");
                }

                System.out.print(tab[i][j]+" ");

            }
            System.out.print("\n");
        }

    }
}
edytowany 2x, ostatnio: cerrato, 2019-09-16 11:56

Pozostało 580 znaków

2019-09-02 11:24
0

Zrób to po ludzku - poszukaj gotowca na n-ty wyraz ciągu Fibonacciego.

int fib(int n) { 
   if (n <= 1) 
      return n; 
   return fib(n-1) + fib(n-2); 
} 

Ta funkcja wyżej zwraca ci n-ty element ciągu. Użyj sobie tej funkcji.

Pozostało 580 znaków

2019-09-02 11:29
0
szweszwe napisał(a):

Zrób to po ludzku - poszukaj gotowca na n-ty wyraz ciągu Fibonacciego.

int fib(int n) { 
   if (n <= 1) 
      return n; 
   return fib(n-1) + fib(n-2); 
} 

Ta funkcja wyżej zwraca ci n-ty element ciągu. Użyj sobie tej funkcji.

Tak właśnie zrobiłem, ale nie umiem tego zapisać dla rozmiaru rzędu tablicy. tab[i].length=?

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