Sorteren van integers

Status
Niet open voor verdere reacties.

Luukie

Gebruiker
Lid geworden
14 sep 2008
Berichten
105
Goeiedag, ik heb een spelletje gemaakt genaamd lotto. Hij genereert 7 unieke getallen uit de lijst van 1 t/m 45. Nou geeft de window van BleuJ een rijtje met die 7 getallen in willekeurige volgorde. Nou wil ik deze van klein naar groot gesorteerd hebben op het schermpje. Hoe is dit mogelijk?

Mvg Luuk

Dit is een de code:

Code:
import java.util.*;

public class ScoreBoard
{
    private Vector<Glas> score;

    /**
     * Constructor for objects of class ScoreBoard
     */
   
    
    public ScoreBoard()
    {
        score = new Vector<Glas>();
        GlazenBol bolletje = new GlazenBol();
        for(int i=0; i<7; i++){
            
            score.add(new Glas(bolletje.schepBal()));
        }
    }

    public void ShowScore(){
    {
        System.out.println ("Trekking:");
        for (Glas glasnummer : score) 
        System.out.print (" " + glasnummer.getNummer());
    }
 
    System.out.println (" Bonusgetal:");
}

}
 
Je kan gebruik maken van Collections.sort(score).
Maar je klasse score moet dan Comparable interface implementeren. (Deze heeft maar 1 functie compareTo)
 
Je kan gebruik maken van Collections.sort(score).
Maar je klasse score moet dan Comparable interface implementeren. (Deze heeft maar 1 functie compareTo)

Dit begrijp ik niet helemaal, kunt u misschien laten zien hoe dat moet?
Scorebord Klasse:
Code:
import java.util.*;

public class ScoreBoard
{
    // instance variables - replace the example below with your own
    private Vector<Glas> score;

    /**
     * Constructor for objects of class ScoreBoard
     */
   
    
    public ScoreBoard()
    {
        score = new Vector<Glas>();
        GlazenBol bolletje = new GlazenBol();
        for(int i=0; i<7; i++){
            
            score.add(new Glas(bolletje.schepBal()));
        }
    }

    public void ShowScore(){
    {
        System.out.println ("Trekking:");
        for (Glas glasnummer : score) {
            System.out.println (" getal:"+ glasnummer.getNummer());
        }
    
    }
}


}
 
kan je de code van klasse Glas eens posten.. Deze moet namelijk worden aangepast.
 
kan je de code van klasse Glas eens posten.. Deze moet namelijk worden aangepast.

Glas klasse:
Code:
public class Glas
{
    private int Bal;

    /**
     * Constructor for objects of class Glas
     */
    public Glas(int nummer)
    {
        Bal = nummer;
   
    }
    public int getNummer(){
    
        return this.Bal;
    }


}
 
in je klasse scoreboard:

Code:
 public void ShowScore(){
    {
        System.out.println ("Trekking:");
        Collections.sort(score);
        for (Glas glasnummer : score) 
        System.out.print (" " + glasnummer.getNummer());
    }

Collections.sort(score) gaat je "score" sorteren. Omdat score een lijst van Glas zal deze sort functie Glas.compareTo() gebruiken om zien wat de volgorde moet worden.

de klasse glas gaat er dan zo uit zien:

Code:
public class Glas implements Comparable<Glas>
{
    private final int bal;

    /**
     * Constructor for objects of class Glas
     */
    public Glas(int nummer)
    {
        bal = nummer;
   
    }
    public int getNummer(){
    
        return this.bal;
    }

    public int compareTo(Glas o) {
        return this.bal - o.bal;
    }


}

de functie compareTo vergelijkt object "this" met object "o" en moet een negatief getal terug geven als "this" object kleiner is dan object "o",
0 als ze gelijk zijn en een positief getal als this groter is dan o.
 
Hardstikke bedankt! het werkt (natuurlijk) prima.
Nu zou het nog mooier zijn als de weergave van de 7 getallen iets anders zou zijn, namelijk:
Trekking: (getal1 t/m6)
Bonusgetal: (bonusgetal)

Is dit mogelijk?

Bedankt in ieder geval!
 
Ja dat kan.. moet glas aanpassen zodat deze weet dat het een bonus getal is..De compareTo aanpassen zodat een bonus getal altijd groter is dan een gewoon getal..

en het scorebord een beetje aanpassen zodat de laatste bal een reserve bal is..

Code:
public class ScoreBoard
{
    private Vector<Glas> score;

    /**
     * Constructor for objects of class ScoreBoard
     */
   
    
    public ScoreBoard()
    {
        score = new Vector<Glas>();
        GlazenBol bolletje = new GlazenBol();
        for(int i=0; i<6; i++){
            score.add(new Glas(bolletje.schepBal()));
        }
        score.add(new Glas(bolletje.schepBal(),true)); // bonus getal
    }

    public void ShowScore(){
    {
        System.out.println ("Trekking:");
        Collections.sort(score);
        for (Glas glasnummer : score) 
        // alleen glas weet nog dat het bonus getal is dus deze toString() van glas print of het al dan niet een bonus getal is..
        System.out.print (glasnummer.toString()+ " "); 
    }
}

}

Code:
public class Glas implements Comparable<Glas>
{
    private final int bal;
    private final boolean bonus;

    /**
     * Constructor for objects of class Glas
     */
    public Glas(int nummer)
    {
        this(nummer, false);
    }
    
    public Glas(int nummer, boolean bonus) {
        this.bal = nummer;
        this.bonus = bonus;
    }
            
    public int getNummer(){
    
        return this.bal;
    }

    public int compareTo(Glas o) {
        if (this.bonus == o.bonus) {
            return this.bal - o.bal;
        } 
        else {
            return bonus ? 1 : -1;
        }
    }
    
    @Override
    public String toString() {
        return bal + (bonus ? "(Bonus getal)" : "");
    }

}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan