Gå til innhold

Hjelp med å tolke en lett oppgave i Java.


Anbefalte innlegg

Har en oppgave hvor deler av teksten lyder:

 

"The swap method takes an int array and two int indices as parameters. It swaps the elements in the array at the specified indices. The method returns nothing, the result is the side-effect on the array."

 

Den siste setningen bekymrer meg. Når man kaller en metode sendes jo _verdien_ av argumentene som parametre, gjør de ikke? Slik at metoden har sin egen lokale versjon av argumentene å jobbe på?

 

Når ingenting returneres vil vel da endringene være lokale for metoden og ikke ha noen innvirkning på den originale integer-tabellen. Det jeg først tenkte var å sende en peker til tabellen, men det står jo ingen ting om at vi skal gjøre det.

 

Er det et eller annet smart triks Java har, eller noe jeg har glemt å tenke på?

Lenke til kommentar
Videoannonse
Annonse
Java sender alltid pekere når det gjelder objekter. Kun verdier av primitive typer blir kopiert.

7693304[/snapback]

Gah, så teit. "Primitive typer", gjelder det da char, int, long, double, float og de der..?

 

Så String, arrays og objekter f.eks. vil få en peker tilsendt metodene selv om jeg ikke ber om det?

Lenke til kommentar
Har en oppgave hvor deler av teksten lyder:

 

"The swap method takes an int array and two int indices as parameters. It swaps the elements in the array at the specified indices. The method returns nothing, the result is the side-effect on the array."

 

Den siste setningen bekymrer meg. Når man kaller en metode sendes jo _verdien_ av argumentene som parametre, gjør de ikke? Slik at metoden har sin egen lokale versjon av argumentene å jobbe på?

 

Når ingenting returneres vil vel da endringene være lokale for metoden og ikke ha noen innvirkning på den originale integer-tabellen. Det jeg først tenkte var å sende en peker til tabellen, men det står jo ingen ting om at vi skal gjøre det.

 

Er det et eller annet smart triks Java har, eller noe jeg har glemt å tenke på?

7692954[/snapback]

 

hmm, litt usikker nå.

Men - hvis du har en klasse og den har et attributt av typen int-array så vil arrayet endres. Det er kun hvis du oppretter en int-array inni metoden at det ikke vil gi noe synlig resultat.

 

 

Eks:

	public class ArraySwapper{

private int[] myIntArray;

public ArraySwapper(){
 myIntArray = new int[6];
}

 public void fill(){
 	for (int i = 0; i < myIntArray.length; i++)	{
   myIntArray[i] = (int)(Math.random()*20) +1;
 	}
 }

public void swap(int[] array, int index1, int index2){
 int tmp = array[index2];
 array[index2] = array[index1];
 array[index1] = tmp;
}
 public int[] getArray() { return myIntArray; }
 public void printOut(){
 	for (int i = 0; i < myIntArray.length; i++)	{
   System.out.print(myIntArray[i] + " ");
 	}

 	System.out.println();
 }

 public static void main(String[] args)	{
 ArraySwapper a = new ArraySwapper();
 a.fill();
 System.out.print("before: ");
 a.printOut();
 a.swap(a.getArray(), 1, 3);
 System.out.print("After: ");
 a.printOut();
 
}
}

 

Edit: litt treig der ja.

Endret av CruellaDeVille
Lenke til kommentar

Takk for svar til deg også :]

 

Vil dog stille et spørsmål til:

Jeg har definert en metode som følger

public static void swap(int[] array, int i1, int i2){
 int temp = array[i1];
 array[i1] = array[i2];
 array[i2] = temp;
}

 

Og jeg bruker den slik

swap(numbers, 1, 5);

 

Hvorfor klager den når jeg kaller metoden dersom jeg utelater 'static' i metode-deklarasjonen?

 

Det er lenge siden jeg har programmert noe særlig, og det var C++ og ikke Java, men forelesningene er for trege til at jeg gidder å vente med å få svar på alt jeg lurer på :p

Lenke til kommentar
Takk for svar til deg også :]

 

Vil dog stille et spørsmål til:

Jeg har definert en metode som følger

public static void swap(int[] array, int i1, int i2){
 int temp = array[i1];
 array[i1] = array[i2];
 array[i2] = temp;
}

 

Og jeg bruker den slik

swap(numbers, 1, 5);

 

Hvorfor klager den når jeg kaller metoden dersom jeg utelater 'static' i metode-deklarasjonen?

 

Det er lenge siden jeg har programmert noe særlig, og det var C++ og ikke Java, men forelesningene er for trege til at jeg gidder å vente med å få svar på alt jeg lurer på :p

7693676[/snapback]

 

Sikkert fordi numbers ikke er opprettet i main.

 

Skal du bare ha en mainmetode og ingen objektinstanser av klassen blir det slik:

public class ArraySwapper{

 public static void main(String[] args)  {
 	int[] numbers = new int[5];
 	fill(numbers);
 	printOut(numbers);
 	swap(numbers, 1, 4);
 	printOut(numbers);
 }
 public static void printOut(int[] numbers){
 	for (int i = 0; i < numbers.length; i++)	{
   System.out.print(numbers[i] + " ");
 	}

 	System.out.println();
 }

 public static int[] fill(int[] myIntArray){
 	for (int i = 0; i < myIntArray.length; i++)	{
   myIntArray[i] = (int)(Math.random()*20) +1;
 	}
 	return myIntArray;
 }

public static void swap(int[] array, int index1, int index2){
 int tmp = array[index2];
 array[index2] = array[index1];
 array[index1] = tmp;
}
}

 

variabler opprettet i en statisk metode (eks main) kan bare kalle andre statiske metoder

Endret av CruellaDeVille
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...