Toon posts:

[java] Elementen verwisselen in een array

Pagina: 1
Acties:
  • 783 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo beste mensen,

Mijn examen java komt er maandag al aan :r en wij moeten sorteer algoritmes kennen.

Ik moet bubblesort kunnen inplementere, wat op zich niet zo erg moeilijk is.
Ik vind echter niet de juiste syntaxis om 2 elementen binnen een tabel te verwisselen.

Voorbeeld:

hulp= rij[i];
rij[i] = rij[i+1];
rij[i+1]=hulp;


Hier stop ik het eerste element van de array (die ik rij noem hier) in hulp ( gewone integer)

dan stop ik het 2de element (rij [i+1]) op de plaats van het eerste (rij[i]), en het eerste element dat in hulp zit stop ik op de plaats van het 2de (rij[i+1])

Nu weet ik dat als je "=" zet dat je adressen toekent als je werkt met rijen

bv: rij1=rij2 wilt gewoon zeggen dat rij 1 en 2 hetzelfde adres hebben maar ze zijn in principe geen kopies van elkaar.


Weet er soms iemand de juiste syntax om elementen van plaats te verwisselen?

Alvast superbedankt!

Verwijderd

Verwijderd schreef op zaterdag 15 januari 2005 @ 17:42:
Voorbeeld:

hulp= rij[i];
rij[i] = rij[i+1];
rij[i+1]=hulp;


Hier stop ik het eerste element van de array (die ik rij noem hier) in hulp ( gewone integer)

dan stop ik het 2de element (rij [i+1]) op de plaats van het eerste (rij[i]), en het eerste element dat in hulp zit stop ik op de plaats van het 2de (rij[i+1])

Nu weet ik dat als je "=" zet dat je adressen toekent als je werkt met rijen

bv: rij1=rij2 wilt gewoon zeggen dat rij 1 en 2 hetzelfde adres hebben maar ze zijn in principe geen kopies van elkaar.

Weet er soms iemand de juiste syntax om elementen van plaats te verwisselen?
Gewoon hetzelfde.
De elementen blijven op dezelfde plaats in het geheugen staan.

Alleen wissel je de verwijzing in de array van plaats.

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Geheugen management doet de jvm voor je, kan je als programmeur helemaal niets aan doen, dacht ik. :o

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:50

Robtimus

me Robtimus no like you

Gert schreef op zondag 16 januari 2005 @ 12:45:
Geheugen management doet de jvm voor je, kan je als programmeur helemaal niets aan doen, dacht ik. :o
Hooguit references op null zetten, zodat de garbage collector weet dat het object niet meer gebruikt wordt.

Je kan wel System.gc() of Runtime.getRuntime().gc() aanroepen, maar die hoeft niet altijd even goed te werken.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op zaterdag 15 januari 2005 @ 17:42:
bv: rij1=rij2 wilt gewoon zeggen dat rij 1 en 2 hetzelfde adres hebben maar ze zijn in principe geen kopies van elkaar.

Weet er soms iemand de juiste syntax om elementen van plaats te verwisselen?
Je bedoelt dit?
Java:
1
2
3
int[] hulp = rij1;
rij1 = rij2;
rij2 = hulp;


Wat is het probleem hierbij dan precies?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Verwijderd schreef op zaterdag 15 januari 2005 @ 17:42:
Nu weet ik dat als je "=" zet dat je adressen toekent als je werkt met rijen

bv: rij1=rij2 wilt gewoon zeggen dat rij 1 en 2 hetzelfde adres hebben maar ze zijn in principe geen kopies van elkaar.
Je haalt waarschijnlijk wat dingen door elkaar. Ik zal het nog even kort herhalen:

De basiskennis:
Bij de primitieve types (bool, int, etc.) gebruik je de waarde als je er mee werkt. Bij een array of object gebruik je een adres. De inhoud van zo'n ding staat in het geheugen en het adres hiervan gebruik je.

Bij de index-operator (rij[i]) haal je een deel van de inhoud van je array op uit het geheugen. Dit deel kan zowel een waarde of een adres zijn (afhankelijk van het type).


Zo gebruik je die basiskennis:
Bij de "=" zeg je dat het linkerdeel hetzelfde moet worden als het rechterdeel. Als je rijA = rijB hebt, dan zeg je dat rijA hetzelfde adres moet krijgen als rijB. Het gevolg van deze "=" is dat rijA en rijB hetzelfde adres hebben. Ze verwijzen dus naar dezelfde inhoud die in het geheugen staat. Het zijn geen kopies, want als je via de index-operator in rijA gaat zitten veranderen dan verandert rijB ook.

Bij de "==" vergelijk je het linkerdeel met het rechterdeel. Als je rijA == rijB hebt, dan vergelijk je het adres van rijA met het adres van rijB. Dit geeft alleen waar als beide adressen hetzelfde zijn. Als de inhoud van beide arrays hetzelfde is hoeft dit niet altijd zo te zijn (bv als rijA een kopie van rijB is).

Bij het aanroepen van functies moet je er ook rekening mee houden dat je bij een array of object een adres gebruikt en bij de rest niet. Wat je mee geeft als argument komt bij het aanroepen van een functie in een apart stukje geheugen te staan (de stack). Bij de primitieve types komt hier de waarde te staan. Als je daar in je functie mee gaat werken, dan verandert je oorsponkelijke variabele niet. Bij de arrays en objecten geef je het adres mee en via dit adres kan je bij de inhoud in het geheugen komen. Het standaard schoolvoorbeeld hierbij is het swappen:
Dus dit werkt niet:
Java:
1
2
3
4
5
6
7
8
9
void swap(int a, int b) {
  int temp = a;
  a = b;
  b = temp;
}
// in main:
int a = 1;
int b = 2;
swap(a, b);
En zoiets werkt wel:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class IntInObject {
  // hoort met get en set
  public int value;
  IntInObject(int value) {
    this.value = value;
  }
}

void swap(IntInObject a, IntInObject b) {
  int temp = a.value;
  a.value = b.value;
  b.value = temp;
}
// in main:
IntInObject a = new IntInObject(1);
IntInObject b = new IntInObject(2);
swap(a, b);

  • MacWebber
  • Registratie: September 2000
  • Niet online
En als je het stoer wilt doen, doe je het zonder hulpvariabele ;)

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat dus alleen werkt op integral types

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Voor de kijkers thuis (bron):
Java:
1
2
3
4
5
6
7
8
9
10
// Swap references a and b without a temporary
// It works on the principle that if you xor
// with something twice you
// get back to where you started.
// Note, this is slower than using a swap temp variable.
int a = 17;
int b = 42;
a = a ^ b;
b = a ^ b; // a ^ b ^ b = a
a = a ^ b; // a ^ b ^ a ^ b ^ b = b


Het kan ook zo (bron):
Java:
1
2
3
i -= j;
j += i; // j gets the original value of i
i = (j - i); // i gets the original value of j


Heb ik weer wat geleerd. :)

[ Voor 19% gewijzigd door Daos op 17-01-2005 00:21 ]

Pagina: 1