Tablica złożona z drugiej wpisanej kilka razy

0

Cześć, mam za zadanie zrobić tablicę, do której wpiszę drugą tyle razy ile będzie wpisane w kodzie. Na razie mam coś takiego i nie wiem co dalej. Dodatkowo jak sobie sprawdzam to wychodzi mi taki ciąg. Jak robiłem to na zajęciach to wszystko było ok. Oczywiście nie oczekuję zrobienia tego, tylko nakierowania mnie, bo nie mam pomysłów.

public static void main(String[] args) {
        int okres = 2;
        int liczba = 5;
        
        int tablicaLiczb[];
        tablicaLiczb=new int[liczba]; //wielkosc tablicy zalezna jest od liczba
        int tablicaOkresow[];
        tablicaOkresow=new int[liczba*okres]; //wielkosc tablicy zalezna jest od iloczynu liczby i okresu (tyle bedzie miejsc)
       
        for(int i=0;i<liczba;i++)
        {
            tablicaLiczb[i]=i;
            System.out.println(tablicaLiczb);
        }

    }
[I@15db9742
0

Przy wypisywaniu odwołujesz sie do metody toString, ktora standardowo przekazuje tak własnie zakodowaną tablice. Przy prntln dopisz po prostu [i], jak masz linijke wyżej.

0

Okej, dzieki. To sprawa z tym ciągiem załatwiona. Pozostała sprawa z drugą częścią. Wiem, że muszę zrobić pętlę for ale nie wiem kompletnie co ma w niej być.

0

To, jeśli chcesz, opisz co ma być w tej drugiej pętli a postaram się pomóc.

0

Mam za zadanie napisać program, który wpisze mi tablicę do drugiej tablicy tyle razy ile jest podane w zmiennej okres. Czyli coś takiego:
Mam tablicę 0,1,2,3,4 i muszę ją wpisać w tym wypadku 2 razy do drugiej. Na samym końcu ma mi to wyświetlić na ekranie. Wpisałem sobie linijkę

System.out.println(Arrays.toString(tablicaLiczb));

żeby sprawdzić czy na tym etapie program mi działa, więc nie jest potrzebna poźniej. Na końcu ma wyświetlić tablicę:

[0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
0

Ja bym to zrobił tak:

public static void main(String[] args) {
        int okres = 2;
        int liczba = 5;
        int pointer = 0;

        int tablicaLiczb[];
        tablicaLiczb=new int[liczba]; 
        int tablicaOkresow[];
        tablicaOkresow=new int[liczba*okres]; 

        for(int i=0;i<liczba;i++)
        {
            tablicaLiczb[i]=i;
        }

       for(int i=0;i<tablicaOkresow.length;i++)
       {
           if(pointer > liczba) pointer = 0;
           tablicaOkresow[i] = tablicaLiczb[pointer];
           pointer++;
       }
    }
0

Okej, mógłbym tylko prosić o małe wytłumaczenie?

0

W drugim for wszystko z tablicy tablicaLiczb jest wpisywane do tablicaOkresow po kolei. Jedyny problem: tablicaOkresow jest w tym przypadku dwa razy większa, niż tablicaLiczb. Dodałem więc do for int pointer, który zachowuje się jak int i. Za każdym razem na początku for sprawdzamy, czy pointer jest już większy od tablicaLiczb porównując pointer i liczba, dlatego, że liczba to wielkość tablicy tablicaLiczb. Tak więc moglibyśmy porównać też pointer z tablicaLiczb.length.
Jeżeli pointer jest większy, to znaczy, że doszliśmy już do końca tablicy tablicaLiczb i trzeba zacząć od początku.
Jeśli coś jeszcze nie jasne - pisz.

0

Już rozumiem, a co mam wpisać w println, żeby mi wyskoczyła już cała tablica? Jak wpisuję ```
println(tablicaOkresow[i];

0

Tam jeszcze powinno być zamknięcie nawiasu oczywiście i wpisuję to w pętli for ale poza if

0

Hmm może ja tu zrobiłem jakiś błąd. Potrzebowałbym usiąść przy komputerze bo na telefonie piszę, ale zastanowię się.

0

Poza drugą to nie zadziała z tym intem i, bo on jest zadeklarowany oczywiście tylko w pętli for.

Spróbuj zrobić 3 pętle, tylko, żeby sprawdzić:

for(int i=0;i<tablicaOkresow.length;i++)
System.out.println(tablicaOkresow[i]
0

Dalej wyskakują same zera

0

Naprawdę nie wiem czemu, musiałbym sam przepuścić cały kod przez kompilator, poeksperymentować. A podałbyś cały kod?

0
public static void main(String[] args) {
        int okres = 2;
        int liczba = 5;
        int pointer = 0;
 
        int tablicaLiczb[];
        tablicaLiczb=new int[liczba]; 
        int tablicaOkresow[];
        tablicaOkresow=new int[liczba*okres]; 
 
        for(int i=0;i<liczba;i++)
        {
            tablicaLiczb[i]=i;
        }
 
       for(int i=0;i<tablicaOkresow.length;i++)
       {
           if(pointer > liczba) 
           {
               pointer = 0;
           
           tablicaOkresow[i] = tablicaLiczb[pointer];
           pointer++;
           }
           System.out.print(tablicaOkresow[i]);
       }
       
    }
       
    
0

A widzisz. Po if(pointer > liczba) i po pointer++; nie powinno być klamer.

0

Wtedy wyskakuje mi taki błąd

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
0

W której linijce?

0

Nie pokazuje mi, w której. Cały błąd:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at okres.tablic.OkresTablic.main(OkresTablic.java:29)
01234C:\Users\pszum\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
0

Tam jak jest OkresTablic.java:29, to 29 to linijka z klasy OkresTablic

0

To nie wiedziałem. To jest ta linijka

           tablicaOkresow[i] = tablicaLiczb[pointer];

0

To tam wcześniej zamiast if(pointer > liczba) napisz if(pointer == liczba) i powinni być ok.

0

Dzięki wielkie za pomoc, teraz wyświetla poprawnie. Dużo mnie nauczyło to zadanie, które wbrew pozorom jest bardzo proste. Pozdrawiam ;)

0

Ja też się napisałem, ale na telefonie to wiadomo :D To cieszę się. Tak jeszcze na przyszłość: jeżeli będziesz miał właśnie taki błąd z tablicą, to najprawdopodobniej znaczy, że chcesz się odwołać do nieistniejącego pola tablicy. Na przykładzie tego zadania: w pętli for odwoływaliśmy się po kolei do 1, 2, 3, 4, 5 i 6 pola tablicy, w której zarezerwowane było tylko 5 pół.

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