Archief - Random waarde uit enum

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

boro

Legacy Member
Hey,

Hoe haal je makkelijk een random waarde uit een enum?


Code:
public enum Kleur
{
      rood,groen,blauw
}


1 van deze kleuren moet gekozen worden en dan moet er voor deze kleur nog een random waarde tussen 5 en 50 in int waarde r, g of b geplaatst worden:


Code:
int r = (int)(Math.random()*45)+5;


Heb niet veel kennis van die enum, weet wel dat het veel gebruikt wordt :p

boro

Legacy Member
Druppel tekenen (View klasse):

Code:
private int r,gr,b;

if(druppel.getKleur() == 0)
                    {
                        r = druppel.getR();
                        g.setColor(new Color(r,0,0));
                    }
                    else if(druppel.getKleur() == 1)
                    {
                        gr = druppel.getR();
                        g.setColor(new Color(0,gr,0));
                    }
                    else if(druppel.getKleur() == 2)
                    {
                        b = druppel.getB();
                        g.setColor(new Color(0,0,b));
                    }
                    
                    g.fillOval((i*grootte)+6,(j*grootte)+6,8,8);

Kleur uit enum halen en instellen (Druppel klasse):

Code:
private int r,g,b = 0;
private static final randomKleur<Kleur> kleur = new randomKleur<Kleur>(Kleur.class);

private static class randomKleur<E extends Enum>
    {
        private static final Random RND = new Random();
        private final E[] values;

        public randomKleur(Class<E> token)
        {
            values = token.getEnumConstants();
        }
        
        public E random()
        {
            return values[RND.nextInt(values.length)];
        }
    }

    public void setKleur()
    {
        r = (int)(Math.random()*45)+5;
        g = (int)(Math.random()*45)+5;
        b = (int)(Math.random()*45)+5;
    }
    
    public int getKleur()
    {
        int kleurcode;
        
        switch(kleur.random())
        {
            case rood:  kleurcode = 0;
            break;
            case groen: kleurcode = 1;
            break;
            case blauw: kleurcode = 2;
            break;
            default: kleurcode = 0;
        }
        
        return kleurcode;
    }

public int getR()
    {
        return r;
    }
    
    public int getG()
    {
        return g;
    }
    
    public int getB()
    {
        return b;
    }

Uit die link heb ik deze code gevonden en dingetjes bijgeplakt om mijn bedoeling als in de eerste post te krijgen, ook voeg ik setKleur(); toe aan de start van Druppel() en wanneer de druppel van boven opnieuw begint.
De enum ziet er hetzelfde uit als de eerste post.

Als ik compile krijg ik geen fouten maar als ik dan het spel run krijg ik :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

En dit slaat op de regel uit mijn View klasse namelijk:

Code:
if(druppel.getKleur() == 0)

Maar die kleurcode uit de Druppel klasse is toch altijd een waarde en niet null?

NeverwinterX

Legacy Member
Is de druppel zelf niet gewoon null daar?

Begrijp ook niet echt waarom je een enum gebruikt om de kleur te selecteren als je hem toch direct gaat converten naar een getal: gebruik dan gewoon nextInt(3) uit Random.

Cycloon

Legacy Member
Een enum is wel goed, maar dan moet je hem goed gebruiken. Je steekt best al de nodige kleurgegevens in je enum. Voor meer informatie zie: Enums (meer specifiek het voorbeeld met de planeten).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan