Zwracanie zmiennej pętli, jak to zrobić?

0

Witam

Próbowałem znaleźć coś wśród dostępnych tematów ale skończyła mi się wyobraźnia podczas wpisywania haseł do wyszukiwarki..
Otoż mam taki problem:

private int maximum (){
       int max = dist[1];
       int pom;
       int i;
       for(i=2;i<=size;i++){
               if(max<dist[i]){
                       max=dist[i];
                       pom = i;
               }
       }
       System.out.println(pom);
       return pom;
    }

pomijam tablice dist bo nie o nią się rozchodzi, w każdym razie chce zapamiętać i zwrócić index danego minimum ale krzyczy mi, że zmienna może być nie zainicjalizowana, kiedy to zrobie podczas deklaracji, zmienna pom nie ulega żadnej zmianie w wyniku przypisania do niej indexu.
Nie ukrywam, że kod bazowo zaczerpnięty jest z C++, tam użyty był wskaźnik na int, który skutecznie uporał się z zagwostką a co moge zrobić tutaj, w Javie?

Prosze o pomoc i pozdrawiam,
Shaar :)

0
private int maximum (){
       int max = dist[1];
       int pom=1;
       int i;
       for(i=2;i<=size;i++){
               if(max<dist[i]){
                       max=dist[i];
                       pom = i;
               }
       }
       System.out.println(pom);
       return pom;
    }

Poza tym tablice indeksujemy od 0 do lenght-1

0

Twoja propozycja nic nie zmienia, nie zaleznie co przypiszesz w petli w linijce pom = i; to pom i tak bedzie mial wartosc jaka zadeklarowales na poczatku, w tym przypadku 1. Probowalem juz tego :/

Moze ktos jeszcze ma jakis pomysl?

0

Błędna logika...

  1. Zmienna musi być zainicjowana przed jakimkolwiek użyciem jej(np zwróceniem), a kompilator przypuszcza, że jej zainicjowanie w pętli for może się nigdy nie wykonać(i ma rację...), co wtedy miałoby Ci to zwrócić?
  2. a) Tablice indeksuje się od zera, a nie od jeden...
    b) ...więc i kończy się ona na długość-1, a nie na długość
	private int maximum(int[] dist)
	{
		int max = dist[0];
		int pom = 0;
		for (int i = 1; i < dist.length; i++)
		{
			if (max < dist[i])
			{
				max = dist[i];
				pom = i;
			}
		}
		return pom;
	}
0

Dzieki z ta tablica, ale od poczatku pisalem ze to nie o nia chodzi... to jak sie indexuje wiem, a ze dane wejsciowe mojego zadania po prostu latwiej interpretuje sie pozostawiajac dist[0] nie zainicjowane badz zainicjowane pewna okreslona wartoscia ale to nie jest moim problemem.

Za to przypisane pewnej wartosci tak jak napisaliscie w waszych kodach owszem pozwoli przekompilowac i uruchomic program ale nie rozwiaze problemu, wartosc jaka wpiszecie na poczatku pozostanie nie zmieniona, przypisanie pom = i; po prostu nie skutkuje, czemu tak sie dzieje, nie wiem, podejrzewam ze zmienna petli "i" nie ma takiego zakresu i zaraz po zakonczeniu petli dane na temat tego parametru zostaja utracone i zgarniete przez GC, pytanie co tu zrobic zeby je zachowac? ;-P

0

@Shaar opowiadasz głupoty, kod @Keraja jest poprawny i zwraca indeks największego elementu tablicy (a dokładniej, indeks pierwszego wystąpienia największego elementu).

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