Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    maschera binaria sui tipi Enum

    ciao, sto sviluppando un giochino in java, in pratica questo è l'enum dell'input da tastiera:

    public enum Key {

    UP (2),
    DOWN (4),
    LEFT (8),
    RIGHT (16),

    JUMP (32),
    FIRE (64),
    SPECIAL (128);

    private final int bit;
    Key(int x)
    {
    c=x;
    }
    }

    adesso, mi chiedevo come mai non potessi fare cose come

    Key salto = Key.JUMP | Key.LEFT;

    e se non è possibile, che metodi alternativi posso usarE?
    grazie

    (ps. sto chiedendo anche su un chan #java su IRC, mi sa che faccio prima ad aspettare una risposta in un forum haha)
    http://csms.indivia.net/ - an SMS Client project

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: maschera binaria sui tipi Enum

    Originariamente inviato da Spocchioso
    adesso, mi chiedevo come mai non potessi fare cose come

    Key salto = Key.JUMP | Key.LEFT;
    Perché ovviamente Key.JUMP ecc... sono oggetti (quindi no OR!!).

    L'unica cosa di particolare che hai fatto è quella di mettere in ogni costante della enum (che ripeto ancora una volta è un oggetto) una proprietà di tipo int. Che comunque non la stai usando perché non hai messo un metodo getter per leggerla (quindi che serve??).

    Originariamente inviato da Spocchioso
    e se non è possibile, che metodi alternativi posso usarE?
    Se vuoi puoi usare un EnumSet che è un "set" specializzato e ottimizzato per gestire costanti di una enum.
    Esempio:

    codice:
    EnumSet<Key> set = EnumSet.noneOf (Key.class);
    
    set.add (Key.UP);
    set.add (Key.DOWN);
    
    System.out.println (set.contains (Key.DOWN));
    E in ogni caso, quella proprietà int non ti serve e non ti sarebbe in alcun modo utile (altrimenti che usi una enum a fare???)

    Altrimenti avrebbe più senso ritornare alle classiche costanti intere, che quindi puoi mettere tranquillamente in OR.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ok grazie, cercavo proprio EnumSet!


    ps. il simbolo pipe non è un OR ma operatore che fa un or BINARIO tra due interi,

    quello che volevo ottenere era una sorta di

    codice:
    MessageBox(NULL,"msgbox in c++",
    "sto usando delle maschere binarie come se fossero flag!",
    MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST);
    http://csms.indivia.net/ - an SMS Client project

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Spocchioso
    il simbolo pipe non è un OR
    Certo che è una "OR"!!!

    Originariamente inviato da Spocchioso
    ma operatore che fa un or BINARIO tra due interi
    L'operatore | in Java è un OR binario se gli operandi sono primitivi interi mentre è un OR logico (non "short-circuit") se gli operandi sono boolean.
    E quello che speravi fosse possibile (cioè Key.JUMP | Key.LEFT) non è né l'uno né l'altro ....

    Grazie ... ma non c'era bisogno che mi spiegassi gli operatori.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.