Drie getallen op volgorde

Status
Niet open voor verdere reacties.

Tjennne

Gebruiker
Lid geworden
22 apr 2008
Berichten
33
De opdracht is: maak een applet met 3 tekstvakken waarin je 3 getallen invoert. Laat de applet de 3 getallen in oplopende volgorde via paint() op het scherm zetten.

Ik heb al een begin, maar ik weet niet hoe ik waarden kan laten verwisselen en waar ik dat moet plaatsen??? Moet ik in de ActionListener de waarden gaan sorteren??


Code:
public class opgave2_2 extends Applet
{
  TextField invoervak1, invoervak2,invoervak3; int getal1,getal2,getal3,

 public void init()
  {
    invoervak1 = new TextField(10);
    invoervak2 = new TextField(10);
    invoervak3 = new TextField(10);
    invoervak3.addActionListener(new invoervak3Handler());

    add(invoervak1);add(invoervak2);add(invoervak3);
  }

 public void paint( Graphics g)
  {
    if (getal1>getal2){g.drawString("" + getal2 + temp1+ getal3,60,60);
    if(getal2>getal3){g.drawString(" "+ getal1+getal3+getal2,60,60);
    if(getal1>getal2){g.drawString(" " + getal2+getal1+getal3,60,60);}}}
   }

class invoervak3Handler implements ActionListener
  {
 public void actionPerformed(ActionEvent e)
    {
      String invoerstring=invoervak1.getText();
      getal1 = Integer.parseInt(invoerstring);
      String invoerstring2=invoervak2.getText();
      getal2 = Integer.parseInt(invoerstring2);
      String invoerstring3=invoervak3.getText();
      getal3 = Integer.parseInt(invoerstring3);

      repaint();
    }
  }
}
 
Laatst bewerkt door een moderator:
Ben een eind verder, maar de applet zet de 3 getallen niet goed op volgorde. Ik heb iets verkeerd gedaan bij het sorteren en verwisselen, maar wat?
Dit heb ik nu:
Code:
package opgave2_2;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class opgave2_2 extends Applet
{
  TextField invoervak1, invoervak2,invoervak3; int getal1,getal2,getal3,
  temp1,temp2,temp3;

 public void init()
  {
    invoervak1 = new TextField(10);
    invoervak2 = new TextField(10);
    invoervak3 = new TextField(10);
    invoervak3.addActionListener(new invoervak3Handler());

    add(invoervak1);add(invoervak2);add(invoervak3);
  }

 public void paint( Graphics g)
  {
    g.drawString(" " + getal1 + getal2 + getal3, 60,60 );
   }

class invoervak3Handler implements ActionListener
  {
 public void actionPerformed(ActionEvent e)
    {
      String invoerstring=invoervak1.getText();
      getal1 = Integer.parseInt(invoerstring);
      String invoerstring2=invoervak2.getText();
      getal2 = Integer.parseInt(invoerstring2);
      String invoerstring3=invoervak3.getText();
      getal3 = Integer.parseInt(invoerstring3);

      if (getal1>getal2){temp1=getal1;getal1=getal2;getal2=temp1;}
      else if(getal2>getal3){temp2=getal2;getal2=getal3;getal3=temp2;}
      else if(getal1>getal2){temp1=getal1;getal1=getal2;getal2=temp1;}

      repaint();
    }
  }
}
 
Laatst bewerkt door een moderator:
Een vriendelijk verzoek aan Tjennne om in het vervolg
Code:
 en
tags te gebruiken bij het plaatsen van code.
 
Meh, wat een slechte methode om te sorteren :p

hier is wat beter.

Code:
int[] array = {1,4,3,2,5};
int tussenwaarde;
int x;

for(x = 0;x<=array.length-2;x++){

if(array(x) > array(x+1)){

tussenwaarde = array(x);
array(x) = array(x+1);
array(x+1) = tussenwaarde;
x=0;
}

}

Ik hoop dat dit juist is, het is een tijdje geledn dat ik dit nog gebruikte.

m.v.g.
 
Laatst bewerkt:
Meh, wat een slechte methode om te sorteren :p

Het mag dan misschien een 'slechte methode' zijn, dan blijft nog altijd het feit dat mensen hier komen om te leren. Dus om te leren hoe ze hun eigen methodes kunnen verbeteren.
Denk hier in het vervolg heel goed om.
 
Nou, ik geprobeerd het antwoord op mijn vraag te verwerken, maar ik heb nu een warboel en met die array kunnen er toch niet 3 willekeurige getallen ingevoerd worden??


Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class opgave2_2 extends Applet
{
  TextField invoervak1, invoervak2,invoervak3; int getal1,getal2,getal3,
  temp1,temp2,temp3;
  int[] array = {1,4,3,2,5};
  int tussenwaarde;
  int x;

 public void init()
  {
    invoervak1 = new TextField(10);
    invoervak2 = new TextField(10);
    invoervak3 = new TextField(10);
    invoervak3.addActionListener(new invoervak3Handler());

    add(invoervak1);add(invoervak2);add(invoervak3);
  }

 public void paint( Graphics g)
  {
    g.drawString(" " + getal1 + getal2 + getal3, 60,60 );
   }

class invoervak3Handler implements ActionListener
  {
 public void actionPerformed(ActionEvent e)
    {
      String invoerstring=invoervak1.getText();
      getal1 = Integer.parseInt(invoerstring);
      String invoerstring2=invoervak2.getText();
      getal2 = Integer.parseInt(invoerstring2);
      String invoerstring3=invoervak3.getText();
      getal3 = Integer.parseInt(invoerstring3);

      for(x = 0;x<=array.length-2;x++)
        {
           if(array(x) > array(x+1)){
           tussenwaarde = array(x);
           array(x) = array(x+1);
           array(x+1) = tussenwaarde;
           x=0;
        }

      repaint();
    }
  }
}
}
 
Het mag dan misschien een 'slechte methode' zijn, dan blijft nog altijd het feit dat mensen hier komen om te leren. Dus om te leren hoe ze hun eigen methodes kunnen verbeteren.
Denk hier in het vervolg heel goed om.

natuurlijk, ik bedoelde daar helemaal niks mee hoor :)

trouwens, ik kan er zelf ook nog niks van ^^ (howja , weinig)

sry in elk geval
 
Nou, ik geprobeerd het antwoord op mijn vraag te verwerken, maar ik heb nu een warboel en met die array kunnen er toch niet 3 willekeurige getallen ingevoerd worden??
...

Niet getest, maar zo zou je het kunnen oplossen:

Code:
public void actionPerformed(ActionEvent e)
{
  // sla de getallen op in een tijdelijke array
  int[] getallen = {
      Integer.parseInt(invoervak1.getText()),
      Integer.parseInt(invoervak2.getText()),
      Integer.parseInt(invoervak3.getText())
  };
  
  // sorteer de array van laag naar hoog
  java.util.Arrays.sort(getallen);
  
  // getal1 is de laagste, getal2 de middelste en getal3 de hoogste
  getal1 = getallen[0];
  getal2 = getallen[1];
  getal3 = getallen[2];
  
  repaint();
}
 
ja, men sorteermethode was niet geheel correct :p

Code:
for(x1 = 0;x1<=array.length-1;x1++){

for(x = x1;x<=array.length-2;x++)
        {
           if(array(x) < array(x1)){
           tussenwaarde = array(x);
           array(x) = array(x1);
           array(x1) = tussenwaarde;
           x1=0;
        }

}
}

zo is ie goed d8 ik.

m.v.g.
 
Laatst bewerkt:
ja, men sorteermethode was niet geheel correct :p

En nog steeds niet.


Code:
for(x1 = 0;x1<=array.length-1;x1++){

for(x = x1;x<=array.length-2;x++)
        {
           if(array(x) < array(x1)){
           tussenwaarde = array(x);
           array(x) = array(x1);
           array(x1) = tussenwaarde;
           x=0;
        }

}

zo is ie goed d8 ik.

m.v.g.

Buiten het feit dat die code nooit zal compileren door welke Java-compiler dan ook (de waarden in een array worden d.m.v. [ en ] opgevraagd, niet met ( en )). Maar buiten de compileer fouten, is je algoritme ook niet correct. Loop het maar na: array {3,2,1} zal gesorteerd worden als {2,3,1}.

Het is handig als je mensen antwoord op een publiek forum dat je test wat je aanraadt.
 
Laatst bewerkt:
ja ik weet het , ik heb de sorteermethode al duizend keer gemaakt,

sry dat ik hem niet vanbuiten ken...

ik zal ns zien

ziezo,

x=0 moest zijn x1=0 en ik was een { vergeten, aiaiai

Code:
for(x1 = 0;x1<=array.length-1;x1++){

for(x = x1;x<=array.length-2;x++)
        {
           if(array(x) < array(x1)){
           tussenwaarde = array(x);
           array(x) = array(x1);
           array(x1) = tussenwaarde;
           x1=0;
        }

}
}
 
Laatst bewerkt:
ja ik weet het , ik heb de sorteermethode al duizend keer gemaakt,

sry dat ik hem niet vanbuiten ken...

ik zal ns zien

ziezo,

x=0 moest zijn x1=0 en ik was een { vergeten, aiaiai

Code:
for(x1 = 0;x1<=array.length-1;x1++){

for(x = x1;x<=array.length-2;x++)
        {
           if(array(x) < array(x1)){
           tussenwaarde = array(x);
           array(x) = array(x1);
           array(x1) = tussenwaarde;
           x1=0;
        }

}
}

Heb je het getest? Dit sorteert (na het fixen van de fouten) weer {3,2,1} als {2,3,1}.
Nogmaals: misschien moet je je code eerst testen voor het plaatsen hier!
 
Heb je het getest? Dit sorteert (na het fixen van de fouten) weer {3,2,1} als {2,3,1}.
Nogmaals: misschien moet je je code eerst testen voor het plaatsen hier!

Nee niet getest, maar dat kan niet denk ik, want als als de if-voorwaarde voldaan is,
wordt de gehele loop gereset. (x1=0)

eerste stap zou moet zijn=>

3,2,1
2,3,1
-reset
2,3,1 => juist, gaat naar volgende (3 en 1)
2,1,3
-reset
1,2,3
-reset
1,2,3

m.v.g.
 
Nee niet getest, maar dat kan niet denk ik, want als als de if-voorwaarde voldaan is,
wordt de gehele loop gereset. (x1=0)

eerste stap zou moet zijn=>

3,2,1
2,3,1
-reset
...

Nee, die 'reset' gebeurt niet. Test je code maar. Je array.length-2 en array.length-1 gooien roet door het eten.
Ik snap niet precies waarom je in discussie gaat: een simpele test van je code maakt duidelijk dat het niet werkt.
 
Code:
public class Test {
    
    public static void loxeriumSort(int[] array) {
        System.out.println("  voor sorteren : "+java.util.Arrays.toString(array));
        for(int x1 = 0;x1<=array.length-1;x1++) {
            for(int x = x1;x<=array.length-2;x++) {
                if(array[x] < array[x1]){
                    int tussenwaarde = array[x];
                    array[x] = array[x1];
                    array[x1] = tussenwaarde;
                    x1=0;
                }
            }
        }
        System.out.println("  na sorteren   : "+java.util.Arrays.toString(array));
    }
    
    public static void sort(int[] array) {
        System.out.println("  voor sorteren : "+java.util.Arrays.toString(array));
        for(int i = 0; i < array.length-1;) {
            if(array[i] > array[i+1]) {
                int temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
                i = i < 2 ? 0 : i-2;
            } else {
                i++;
            }
        }
        System.out.println("  na sorteren   : "+java.util.Arrays.toString(array));
    }
    
    public static void main(String[] args) {
        System.out.println("loxeriumSort(...)");
        loxeriumSort(new int[]{4,3,5,1,2});
        System.out.println("sort(...)");
        sort(new int[]{4,3,5,1,2});
    }
}

/* output:
            loxeriumSort(...)
              voor sorteren : [4, 3, 5, 1, 2]
              na sorteren   : [1, 3, 4, 5, 2]
            sort(...)
              voor sorteren : [4, 3, 5, 1, 2]
              na sorteren   : [1, 2, 3, 4, 5]
*/

M.a.w., jouw sorteer methode levert alleen een geordende array op als in de laatste plaats van de array de hoogste waarde van de array staat.
 
De laatste geposte code van Tjennne, syntaxfouten en redeneerfouten verbeterd. Uitgetest en werkend.

Het algoritme dat hier gebruikt wordt is eigenlijk een vereenvoudigde versie van bubblesort, als je op zoek bent naar een algoritme dat niet barslecht is, en toch begrijpbaar is moet je daar maar es op googlen.

Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class opgave2_2 extends Applet
{
  TextField invoervak1, invoervak2,invoervak3; int getal1,getal2,getal3,
  temp1,temp2,temp3;
  int tussenwaarde;
  int x;

    @Override
 public void init()
  {
    invoervak1 = new TextField(10);
    invoervak2 = new TextField(10);
    invoervak3 = new TextField(10);
    invoervak3.addActionListener(new invoervak3Handler());

    add(invoervak1);add(invoervak2);add(invoervak3);
  }

    @Override
 public void paint( Graphics g)
  {
    g.drawString(" " + getal1 + "  " + getal2 + "  " + getal3, 60,60 );
   }

class invoervak3Handler implements ActionListener
  {
 public void actionPerformed(ActionEvent e)
    {
      String invoerstring=invoervak1.getText();
      getal1 = Integer.parseInt(invoerstring);
      String invoerstring2=invoervak2.getText();
      getal2 = Integer.parseInt(invoerstring2);
      String invoerstring3=invoervak3.getText();
      getal3 = Integer.parseInt(invoerstring3);

      // het is natuurlijk de bedoeling dat die getallen in die array terechtkomen
      int[] array = {getal1,getal2,getal3};
      
      // het gekozen sorteeralgoritme moet voor n elementen n-1 keer uitgevoerd worden
      for(int i=0;i<array.length-1;i++) {
          
      for(x = 0;x<=array.length-2;x++)
        {
          //vierkante ipv ronde haakjes gebruiken 
          if(array[x] > array[x+1]){
            tussenwaarde = array[x];
            array[x] = array[x+1];
            array[x+1] = tussenwaarde;
            x=0;
           } //accolade was vergeten
        }

      }
      
      //en natuurlijk eerst de getallen wegsteken
      getal1 = array[0];
      getal2 = array[1];
      getal3 = array[2];
      
      repaint();
    }
  }
}
 
Zo ik heb het uiteindelijk getest :) en het klopte, ik was mis.

ondertussen heb ik de fout gevonden: ipv van tot array.length-2, doe je tot -1. en ipv -1 tot -2 :p

Code:
for(x1 = 0;x1<=array.length-2;x1++){

for(x = x1;x<=array.length-1;x++)
        {
           if(array[x1] > array[x]){
           tussenwaarde = array[x];
           array[x] = array[x1];
           array[x1] = tussenwaarde;
           x1=0;
           
          
           }
          
        }

}

sorrie hiervoor, ik zal in het vervolg mijn antwoorden controleren :p

m.v.g.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan