The_HulkMedlem sedan juni 20031 937 inlägg
går det att ha en referens till en int[] i java?
ex:
public void fyllArray(int[] en_array)
{
en_array = new int[10];
for(int i=0; i < en_array.length; ++i)
{
en_array[i] = i;
}
}
int[] min_array;
fyllArray(min_array);
jag vill nu att min_array ska ha värden de fick i metoden/funktionen. För att det ska fungera måste jag väl skicka in den som en referens annars är det väl inte samma kopia jag använder efter "= new ..."?
CompusaMedlem sedan jan. 20022 952 inlägg
Visserligen inte svaret på din fråga men varför skriver du inte så att metoden istället kan retunera din array?
public int[] fyllArray(int[] en_array)
{
int[] en_array = new int[10];
for(int i=0; i < en_array.length; ++i)
{
en_array[i] = i;
}
return en_array;
}
int[] min_array = fyllArray(min_array);
The_HulkMedlem sedan juni 20031 937 inlägg
för ibland vill man kunna returnera mer än en sak.
då är det bra att kunna ändra på inparametrarna så man kan spara i dem och få tillgång till den informationen utanför.
suzizMedlem sedan maj 20053 inlägg
Du kan inte göra new i metoden eftersom att anropande metod då inte vet vars arrayen skapas... Följande borde dock fungera som du tänkt:
public void fyllArray(int[] en_array)
{
for(int i=0; i < en_array.length; ++i)
{
en_array[i] = i;
}
}
int[] min_array = new int[10];
fyllArray(min_array);
The_HulkMedlem sedan juni 20031 937 inlägg
Det var tråkigt. Känns som en ganska stor svaghet i java.
I c/c++ är det ju inte problem för där skickar man bara med en peckar till minnesadressen och så kan man sedan skapa en ny array på den minnesplatsen så får man tillgång till den utanför metoden.
LimeMedlem sedan sep. 2001837 inlägg
Men du KAN göra det även i Java.
Ditt problem ligger i att du återdeklarerar en_array.
public int[] fyllArray([blue]int[] en_array[/blue] )
{
[red]int[] en_array = new int[10];[/red]
for(int i=0; i < en_array.length; ++i)
{
en_array[i] = i;
}
return en_array;
}
Den blå deklarationen av en_array är den som du skickar in och innehåller referensen till den array du skapat utanför fyllArray:s metod.
Den röda en_array deklarerar du INNE i fyllArray:s metod-scope. Eftersom en metods deklarerade variabler går före exteran så är det denna som du skriver i och returnerar.
Du gör dock ingenting åt den "blå" en_array.
Testa med att köra koden i en debugger så får du se...
suzizMedlem sedan maj 20053 inlägg
The_Hulk skrev:
I c/c++ är det ju inte problem för där skickar man bara med en peckar till minnesadressen och så kan man sedan skapa en ny array på den minnesplatsen så får man tillgång till den utanför metoden.
Inte riktigt sant, i så fall måste du ju skicka in en pekare till en pekare för att det ska bli rätt.
Edit: Fast det var kanske så du menade ser jag nu när jag läser igenom ditt svar igen :OO
I java fungerar följande lösning på samma sätt:
public void fyllArray(int[][] en_array)
{
en_array[0] = new int[10];
for(int i=0; i < en_array[0].length; ++i)
{
en_array[0][i] = i;
}
}
int[][] min_array = new int[1][];
fyllArray(min_array);