Co zrobić aby nie nadawać polom na sztywno staic.

0

Witam.
Mam classę Tablica, w której tworzę tablicę... teraz chcę wyświetlić wartość tablicy o indeksie index.
Na początku tworzę metodę

public int wezTablicaIndeks(int index){
		
		return tab[index];
		
	}

No i jej wywołanie.

System.out.println("Wartość tablicy o indeksie = "+tab.wezTablicaIndeks(3));

Problem polega na tym, że nie wiem jak teraz uzyskać właśnie nr indeksu, czyli żeby ładnie mi się wyświetlało.
Wymyśliłem, że utworzę pole

int a;

i jego użyję do zwrócenia wyniku czyli return tab[a];

 ale oczywiście wyskoczył błąd, że a nie jest static więc nadałem <code class="java">static int a;

No i wywołanie metody.System.out.println("Wartość tablicy o indeksie "+"["+a+"] = "+tab.wezTablicaIndeks());

 ale nie podoba mi się ta metoda bo gdzieś muszę na sztywno wpisać wartość a. Wolał bym podawać to jako parametr do metody tylko jak wtedy uzyskać nr indexu?
0

Jedyno pytanie: WTF?
Nie rozumiem ani słowa z tego co napisałeś. Umiesz pisać po polsku? Chodzi ci o to że chcesz mieć metodę która wypisze ci na ekran wartość która w tablicy jest pod n-tym indeksem? Czemu n nie może być argumentem metody? o_O

1

Zasada nr 1:
Podanie kodu, który się kompiluje i obrazuje problem, dramatycznie zwiększa szanse na otrzymanie sensownej odpowiedzi.

0
public class Tablica {
	
	int[] tab;
	int a=0;
	
	public Tablica(int rozmiar){
		tab = new int[rozmiar];
		
	}
	public Tablica(){
	}
	public int wezTablicaIndeks(int index){
		a=index;
		return tab[index];
	}
	public int zwrocA(){
		return a;
	}
	public void tworzTablice(){
		for(int i=0;i<tab.length;i++){
		tab[i]=(int) (Math.random()*100);
		System.out.println("Tablica["+i+"]"+tab[i]);
		}
	}
	public int sumaTablicy(){
		int suma=0;
		for(int i=0;i<tab.length;i++){
			suma+=tab[i];
		}
		return suma;
	}
	public int maksymalnaWartoscTablicy(){
		int max=0;
		for(int i=0;i<tab.length;i++){
			if(max>tab[i]){
				
			}
			else{
				max=tab[i];
			}
		}
		return max;
	}
	public int elementMaksymalny(){
		
		return tab[tab.length-1];
	}
	
	public static void main(String[] args) {
		Tablica tab = new Tablica(10);
		tab.tworzTablice();
		System.out.println("Suma tablicy = "+tab.sumaTablicy());
		System.out.println("Wartość tablicy o indeksie "+"["+tab.zwrocA()+"] = "+tab.wezTablicaIndeks(3));
		System.out.println("Maksymalna wartość tablicy = "+tab.maksymalnaWartoscTablicy());
		System.out.println("Element maksymalny = "+tab.elementMaksymalny());
	}

	
}

A bo namieszałem strasznie. Ogolnie chodzi o to, że jest to getter, który ma zwrócić wartość indexu podanego przez parametr, ale chcę przy okazji zwrócić tą wartość(tego indexu) i wypisać jaki to był index.

0

Primo:
W linijce

System.out.println("Wartość tablicy o indeksie = "+tab.wezTablicaIndeks(3));

od razu widać, że indeksem jest 3, więc po co go dodatkowo przepychać?

Secundo:
Jeśli chcesz zwracać N wartości z metody, to zrób klasę o N polach odpowiednich typów (może to być klasa generyczna, wtedy wystarczy jedna dla wszystkich kombinacji typów) i posługuj się obiektami tej klasy.

0

primo :) żeby było ładnie :)

secundo nie do końca rozumiem nie dawno rozpocząłem przygodę z java i nie miałem jeszcze na uczelni pojęcia klasy generycznej (chyba, że spałem wtedy na wykładzie :P)

0

Generyki można jak na razie ominąć.

Zrób klasę:

class ElementZIndeksem {
  int element;
  int indeks;
  // gettery, setttery, konstruktory, whatever
}

Następnie posługuj się obiektami tej klasy, tzn np zrób metodę która zwraca obiekt tej klasy i wypisuj dane z tego obiektu.

0

aha rozumiem :) to przy okazji się zapytam czemu w tej metodzie

public boolean czyIstnieje(int wartosc){
		for(int i=0;i<tab.length;i++){
			if(wartosc==tab[i]){
				return true;
			}
			else{
				return false;
			}
		}		
	}

wywala mi, że nie zwracam wyniku:/

0

A co jeśli tab.length == 0? Poza tym kompilator Javy nie wykonuje sobie kodu podczas kompilacji, co najwyżej może analizować stałe znane na etapie kompilacji.

Poza tym ta metoda nie robi tego co powinna, else'a powinieneś wyrzucić, a return false dać na koniec metody.

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