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-09-16 14:48
0

Poddaję się =P
Masz tu rozwiązanie, może załapiesz o co chodzi.

Generalnie masz problem ze zrozumieniem co to jest ten ów magiczny this i co to są pola

class Punkty
{
    int x;
    int y;

    public int ustawX(int noweX)
    {
        int poprzednieX = this.x;
        this.x=noweX;
        return poprzednieX ;
    }
    public int ustawY(int noweY)
    {
        int poprzednieY = this.Y;
        this.y=noweY;
        return poprzednieY ;
    }

    void wyswietlXY()
    {
        System.out.println(x);
        System.out.println(y);
    }
}
edytowany 1x, ostatnio: Tyvrel, 2019-09-16 14:49

Pozostało 580 znaków

2019-09-18 11:53

Odpowiadając na twoje pytania przesłane na priv:

A byłbyś w stanie mi napisać dlaczego ja robiłem to źle? Też jako argument przyjąłem int. To źle że Twoją klasę test przyjąłem jako main?

oraz

A bardzo chętnie będę pytał, bo często się z czymś męczę. Chciałem stworzyć obiekt w klasie Punkty żeby wywołać za jego pomocą x i y, to zły tok myślenia?

Punkt jak obiekt może być nieco zbyt abstrakcyjny. Może spróbuj sobie wyobrazić, że masz klasę Pionek, który reprezentuje ci tego zwykłego pionka szachowego.
Wyobraź sobie, że kładziesz te pionki na szachownicy, tylko zmiast pól 1-8 i A-H masz je określone za pomocą liczb. 1-8 to u ciebie oś X, która może przyjmować wartości od 0 do 7 (bo liczymy od zera =P), a A-H to u ciebie oś Y, która może przyjmować wartości też od 0 do 7.
Masz tą klasę pionka, która ma dwa pola: x i y. One mówią w jakim miejscu znajduje się pionek na szachownicy.
Zrobisz tak:

Pionek pionek1 = new Pionek();
pionek1.x = 3;
pionek1.y = 4;

To stworzysz nowego pionka, który będzie znajdował się na pozycji (3,4);

Zrobisz tak:

Pionek pionek1 = new Pionek();
pionek1.x = 3;
pionek1.y = 4;
Pionek pionek2 = new Pionek();
pionek2.x = 6;
pionek2.y = 2;

To stworzysz dwa nowe pionki, z których pierwszy będą znajdował się na pozycji (3,4), a drugi (6,2);

Zrobisz tak:

Pionek pionek1 = new Pionek();
pionek1.x = 3;
pionek1.y = 4;
Pionek pionek2 = new Pionek();
pionek2.x = 3;
pionek2.y = 4;

To też stworzysz dwa nowe pionki, ale uwaga będą stały na dokładnie tym samym polu szachownicy: (3,4). Nie zmienia to faktu, że to są dwa różne pionki i możesz przesunąć jednego, a zostawić na tym polu drugiego.

Zrobisz tak:

Pionek pionek1 = new Pionek();

To też stworzysz nowego pionka. I gdzie on będzie siedział? Nie, wcale nie poza szachownicą. W twojej klasie pola x i y to są typu int. Jeśli pól nie zainicjalizujesz, to mają domyślne wartości. W przypadku inta jest to zero. Więc Pionek pionek1 = new Pionek(); stworzy ci pionka i położy go na polu (0,0).

Mając tą wiedzę możemy się przyglądnąć bliżej operacji:

1. Pionek pionek1 = new Pionek();
2. pionek1.x = 3;
3. pionek1.y = 4;

Stworzenie i położenie pionka na polu (3,4) składa się z trzech oddzielnych operacji.
W pierwszym kroku tworzysz nowy pionek i układasz go na domyślnym polu, czyli (0,0)
W drugim kroku przesuwasz ten pionek na oś x=3, więc twój pionek znajduje się na pozycji (3,0)
W trzecim kroku przesuwasz ten pionek na oś y=4, więc twój pionek znajduje się na pozycji (3,4)

Rozwijając program dalej stworzyłeś sobie metody ustawX i ustawY. Powinny one analogicznie zmieniać x i y, więc powinieneś móc bez problemu zamienić powyższy przykład z poniższym i efekt powinien być taki sam:

1. Pionek pionek1 = new Pionek();
2. pionek1.ustawX(3);
3. pionek1.ustawY(4);

Dodatkowo metody ustaw mają zwracać ci stare położenie pionka:

Pionek pionek1 = new Pionek();
int stareX = pionek1.ustawX(3); //stareX wynosi 0
int stareY = pionek1.ustawY(4); //stareY wynosi 0

Dlaczego akurat 0? Bo taka jest domyślna i pierwsza wartość pól x i y

Pionek pionek1 = new Pionek();
int najstarszeX = pionek1.ustawX(3); //najstarszeX wynosi 0
int najstarszeY = pionek1.ustawY(4); //najstarszeY wynosi 0
int stareX = pionek1.ustawX(5); //stareX wynosi 3
int stareY = pionek1.ustawY(2); //stareY wynosi 4

Mam nadzieje, że do teraz jest wszystko jasne. Teraz dlaczego twoja implementacja nie działa?

0. public int ustawX(int old) {
1.    Punkty wywolanie1=new Punkty();
2.    old=this.x;
3.    this.x=wywolanie1.x;
4.    return old;
}

Wywołujesz int stareX = pionek1.ustawX(5); (czyli chcesz przesunąć pionek z pola (3,4) na pole (5,4)) i wchodzisz do środka metody ustawX

  • W kroku 0. jesteśmy przed wszystkim co się dzieje. Znajdujemy się w środku obiektu pionek1, więc this to jest pionek1. Przekazaliśmy jako parametr 5 więc old wynosi 5. Wartość pionek1.x (czyli this.x) wynosi 3, a wartość pionek1.y (czyli this.y) wynosi 4

  • W kroku 1. tworzysz nowy pionek, nazywasz go wywołanie1 i kładziesz na domyślnym polu na szachownicy. W tej chwili masz dwa pionki: pionek1 na polu (3,4) i wywolanie1 na polu (0,0)

  • W kroku 2. zmieniasz zmienną old na this.x. this.x, to to samo co pionek1.x więc wynosi 3. Zmieniasz wartość old z 5 na 3.

  • W kroku 3. zmieniasz pole this.x (czyli pionek1.x) na wywołanie1.x. wywołanie1 to twój nowy pionek, który właśnie stworzyłeś i położyłeś go na domyślnym polu (0,0), więc wywołanie1.x wynosi 0. Zmianiasz wartość this.x (czyli pionek1.x) na 0. Czyli przesuwasz pionek1 na pole (0,4) z pola (3,4)

  • W kroku 4 zwracasz wartość old, która wynosi 3. Czyli do stareX przypisujesz wartość 3.

Po całej operacji masz następujący wynik:

  • zmienna stareX wynosi 3, czyli sukces, bo tyle wynosiło poprzednie x pionka1
  • przemieściłeś pionek z (3,4) na (0,4), czyli źle, bo chciałeś (5,4)
  • stworzyłeś całkowicie nowy, niepotrzebny pionek i położyłeś go na polu (0,0)
edytowany 2x, ostatnio: Tyvrel, 2019-09-18 11:54

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