pętla i przekazywanie argumentu do metody

0

Hej , chciałbym się zwrócić o pomoc gdyż jestem początkujący w javie.
Mój problem polega na tym, że nie wiem jak napisać kod, który będzie cały czas przekazywać tą samą tablice do metody(bez żadnych modyfikacji)
Wrzucam przykładowy kod (który jest bez sensu) ale obrazuje problem

package pl.javastart.first;

public class Costam {

    public int[] jakas(int b[])
    {
        for(int i=0;i<b.length;i++) //petla ktora wyswietla co jest przekazane do tablicy
        {
            System.out.println(b[i]);
        }
        for(int i=0;i<b.length;i++)
        {
            if(b[i]==0)
            {
                b[i]=2;
            }
        }

        return b;
    }
    public static void main(String[] args) {

        int[] tab={1,2,0,3,0};

        int[] tablica=new int [5];

        for(int i=0; i<10;i++)

        {   
            int licznik=0;
            Costam klasa=new Costam();

            tablica=klasa.jakas(tab); //przkaazujemy wartosc tab={1,2,0,3,0} która po pierwszej iteracji zmienia wartosc
            for(int k=0;k<5;k++)
            {
                if(tablica[k]==2)
                {
                    licznik++;
                }
            }
            if(licznik==0)
            {
                break;
            }
            System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$");
        }

    }

}

z góry dziękuje za pomoc

0

W metodzie jakas() stwórz nową tablicę, którą wypełnisz na podstawie danych w tablicy b[], a następnie tą nowo utworzoną tablicę zwrócisz.

Ewentualnie przy wywoływaniu metody klasa.jakas(tab) możesz w tym miejscu przekazać kopię tablicy, np. korzystając z System.arraycopy().
http://docs.oracle.com/javase[...].lang.Object,%20int,%20int%29

0

Chodzi o cos takiego ?

public int[] jakas(int b[])
    {
        int[] a=new int[5];

        a=b;
        for(int i=0;i<b.length;i++)
        {
            System.out.println(b[i]);
        }

        for(int i=0;i<b.length;i++)
        {
            if(b[i]==0)
            {
                a[i]=2;
            }
        }

        return a;
    } 

Niestety nie działa mi to
tak samo jak to

System.arraycopy(klasa.jakas(tab),0, tablica,0, 5); 
1
public int[] jakas(int b[])
    {
        int[] a=new int[5];

        System.arraycopy(b, 0, a, 0, a.length);

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

        for(int i=0;i<b.length;i++)
        {
            if(b[i]==0)
            {
                a[i]=2;
            }
        }

        return a;
    } 
0

Działa :D , dzięki wielkie za pomoc !

0

Poczytaj trochę o referencjach w javie oraz o przekazywaniu argumentów funkcji przez wartość, bo Twoje ostatnie podejście nie działało ze względu na linijkę a=b.

0

Tak zrobię , dzięki

0

Oraz zastanów się, co się stanie, gdy tablica b[] nie będzie miała rozmiaru 5 ;)

0

chyba wtedy int[] a=new int [b.length]
Z tablicami dwuwymiarowymi powinno tak samo działać ?

0

Jeżeli zrobisz dobrze, to powinno działać ;)

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