przekazanie tablicy jako argumentu metody

0

Witam serdecznie Panie i Panów programistów, jako początkujący praktyk Javy (-samouk z książki Thinking in Java ed 3) natknełem się na pewien problem ktoóry mam nadzieje pomożecie mi Państwo rozwiązać, otóż w ćwiczeniu mam stworzyć jedną metodę tworzącą tablice(int) i wypełniającą ją losowymi wartościami , a następnie z main wywołać 2 metodę wypisującą wartość: oto mój kod

import java.util.*;

class table{

static Random r = new Random();


static int[] make(){
	int[] tab = new int[r.nextInt(5)];
	
	for(int i = 0 ; i < tab.length; i++){
		tab[i] = r.nextInt(10);
	}
	
	return tab;
}


static void print(int[] tab){
	for(int i = 0; i < tab.length;i++){
		System.out.println(i + " --- " + tab[i]);
	}
}

public static void main(String[] args){
	 
	table.make();
	 
	table.print(int[] tab);     <------------------- tu jest mój problem
}

}

a teraz problem: nie wiem jak przekazać tą tablice do metody print?! Bardzo proszę o poprawienie mojego kodu ,ale i o wytłumaczenie dlaczego tak a nie inaczej. Dziekuje

0
ljames napisał(a)

Witam serdecznie Panie i Panów programistów, jako początkujący praktyk Javy (-samouk z książki Thinking in Java ed 3) natknełem się na pewien problem ktoóry mam nadzieje pomożecie mi Państwo rozwiązać, otóż w ćwiczeniu mam stworzyć jedną metodę tworzącą tablice(int) i wypełniającą ją losowymi wartościami , a następnie z main wywołać 2 metodę wypisującą wartość: oto mój kod

import java.util.*;

class table{

static Random r = new Random();

static int[] make(){
int[] tab = new int[r.nextInt(5)];

  for(int i = 0 ; i < tab.length; i++){
  	tab[i] = r.nextInt(10);
  }
  
  return tab;

}

static void print(int[] tab){
for(int i = 0; i < tab.length;i++){
System.out.println(i + " --- " + tab[i]);
}
}

public static void main(String[] args){

  table.make();
   
  table.print(int[] tab);     <------------------- tu jest mój problem

}
}

a teraz problem: nie wiem jak przekazać tą tablice do metody print?! Bardzo proszę o poprawienie mojego kodu ,ale i o wytłumaczenie dlaczego tak a nie inaczej. Dziekuje

aha dodam jeszcze ze jak przezuce wypisanie indeksow i wartosci do metody make i wykomentuje metode print wszystko dziala

1

Troche tak niebardzo konstruujesz program ...ale to z czasem przyjdzie :-)

problem twoj polega na tym ze nie przekazujesz referencji do tablicy ...twoja metoda zwraca tablice ktora nigdzie nie przypisujesz

 public static void main(String[] args){
                                     
                table.print(table.make());  
        }

taki kod zalatwia sprawe

A zeby miec referencje w mainie mozna zrobic cos takiego:

    
        public static void main(String[] args){
                int tab[];
                tab = table.make();   
                table.print(tab);  
        }

Na szybkiego poprawilem twoj kod....ja bym cos takiego stworzyl :

import java.util.*;

class table{
        
        Random r = new Random();
        private int[] tab;
        
        int[] make(){
                tab = new int[r.nextInt(5)];
                
                for(int i = 0 ; i < tab.length; i++){
                        tab[i] = r.nextInt(10);
                }
                
                return tab;
        }
        
        
        void print(int[] tab){
                for(int i = 0; i < tab.length;i++){
                        System.out.println(i + " --- " + tab[i]);
                }
        }
        
        int[] returnTab(){
        	return tab;
        }
        
        public static void main(String[] args){
        	table tab = new table();
        	tab.make();
        	tab.print(tab.returnTab());
        }
}
0

Dziekuje Ci bardzo :) no tak zgubilem referencje... mam nadzieje ze dostalem nauczke z ta referencja, jeszcze raz dzieki

0

pozwól, że wróce jednak na chwile do tematu, a co z tablica 2d, 3d itd.... byłoby analogicznie tylko dodając jeden wymiar [] i dodać odpowiednio zagnierzdzonego fora ????

1
Ljames napisał(a)

pozwól, że wróce jednak na chwile do tematu, a co z tablica 2d, 3d itd.... byłoby analogicznie tylko dodając jeden wymiar [] i dodać odpowiednio zagnierzdzonego fora ????

import java.util.*;
class table{

    Random r = new Random();
    private int[][] tab;
   
    int[][] make(){
            tab = new int[r.nextInt(5)][r.nextInt(5)];
           
            for(int i = 0 ; i < tab.length; i++){
            	tab[i] = new int[r.nextInt(10)];
                    for(int j = 0; j < tab[i].length;j++){
                    	tab[j] = new int[r.nextInt(10)];
                    	 
                    }
            }
           
            return tab;
    }
   
   
    void print(int[][] tab){
            for(int i = 0; i < tab.length;i++){
            	for(int j = 0;j < tab[i].length;j++){
            		System.out.println(i + " " + j + " --- " + tab[i][j]);
            	}
                    
            }
            System.out.println(tab[0][2]);
    }
   
    int[][] returnTab(){
            return tab;
    }
   
    public static void main(String[] args){
            table tab = new table();
            tab.make();
            tab.print(tab.returnTab());
         
    }

}

moim skromnym zdaniem tak, ale bzdury mi wypisuje :)

1

oj ale dałem plame w ustalaniu wartości tablicy dalem tablica[i] = new int(r.nextInt(5)];

moje fopa oczywiście powinno tego tam nie być a 2 linijki w=niżej kod wygląda tak
tablica[i][j] = r.nextInt(10);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.