2012-07-24 13 views
5

Sto creando una classe Employee contenente tre campi: nome, età e sesso. Devo creare un campo di genere ma l'utente può scegliere solo maschio o femmina. Credo di doverlo fare in una forma booleana, ma non so come lo farò. Qualcuno mi può aiutare?Campo sesso in java

Finora ho:

public class Employee { 

private String name; 
private int age; 
private boolean gender; 
private boolean male; 
private boolean female; 

public Employee(String name, int age, boolean gender) 
{ 
    this.name = name; 
    this.age = age; 

    boolean f = female; 
    boolean m = male; 

    if (gender = f) 
    { 
     System.out.print("female"); 
    } 

    else if (gender = m) 
    { 
     System.out.print("male"); 
    } 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getAge() { 
    return age; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

public boolean isGender() { 
    return gender; 
} 

public void setGender(boolean gender) 
{ 
    if (gender = f) 
    { 
     System.out.print("female"); 
    } 

    else if (gender = m) 
    { 
     System.out.print("male"); 
    } 
} 
} 
+3

Perché non usare un enum al posto di un booleano? – JamesB

+1

Cercare "enum". – JerseyMike

+4

Quanto genere-normativo. – millimoose

risposta

20

meglio usare un enum Sesso:

public enum Gender { 
    MALE, FEMALE 
} 
1

Se stai usando Java 1.5 o successivo, si può (e dovrebbe) utilizzare enum types, che forniscono una digitazione forte, una denominazione conveniente/indipendente dall'implementazione e l'estensibilità.

Esempio:

public enum Gender { 
    MALE, 
    FEMALE, 
} 

// usage example 
myEmployee.setGender(Gender.FEMALE); 
0

due idee:

1) Fai un valore booleano come isMale o isFemale

2) Fare un Enum Gender che ha solo Gender.MALE e Gender.FEMALE

1

Ci sono un paio di cose sbagliate qui. Prima di tutto, nelle tue istruzioni if, stai assegnando il valore di f e m a un singolo operatore con =. Devi fare se (gender == true) o se (gender == false). Inoltre, raccomando di rappresentare il vero maschio o femmina e il falso rappresenta l'altro genere.

3

Se si intende utilizzare un valore booleano, è necessario chiamarlo isMale o isFemale e non isGender. Nota che qualunque cosa tu scelga, qualcuno probabilmente si lamenterà che il loro genere è considerato come false. Questo è un motivo per cui un enum potrebbe essere un'opzione migliore.

Un'altra ragione per cui un booleano potrebbe essere inappropriato è che in alcuni paesi è illegale in alcune situazioni richiedere alle persone di rivelare il proprio sesso. Per questo motivo potresti voler fornire un enum con tre opzioni: la terza è di memorizzare che il genere non è stato divulgato.

4

È possibile utilizzare un boolean oppure è possibile creare un Gender enum:

In Gender.java:

public enum Gender { 
    MALE, 
    FEMALE 
} 

In Employee.java:

public class Employee { 

    private String name; 
    private int age; 
    private Gender gender; 

    public Employee(String name, int age, Gender gender) 
    { 
     this.name = name; 
     this.age = age; 
     this.gender = gender; 
     printGender(); 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public Gender getGender() { 
     return gender; 
    } 

    public void setGender(Gender gender) 
    { 
     this.gender = gender; 
    } 

    public final void printGender() { 
     System.out.println(gender.name().toLower()); 
    }  
} 
3

un booleano non è appropriato, e nessuno dei due è un valore predefinito a meno che non sia UNKNOWN. Hai bisogno di almeno tre valori, forse quattro. Vedi this answer per una discussione completa.

0

C'è qualche problema con il codice nella domanda.

Primo.

Un costruttore deve impostare i valori delle variabili della classe Employee. Le variabili booleane maschili e femminili devono essere assegnate prima di essere utilizzate.

public class Employee { 

    // other vars 
    private boolean male; 
    private boolean female; 

    public Employee(/*other vars*/, boolean gender) 
    { 
     /*THIS IS WRONG. male and female values not set 
      so you cant assign anything to f or m. it will be an error. 
     */ 
     boolean f = female; 
     boolean m = male; 

Secondo.

= e == hanno significati diversi. = assegna ciò che è a destra a variabile a sinistra. == controlla l'uguaglianza.

//will assign the value of f to gender 
if (gender = f){ 

// will check for equality 
if(gender == f){ 

Terzo.

Il metodo setGender (genere booleano) non imposta nemmeno il sesso.

//as it should be if you choose to use boolean. 
public void setGender(boolean gender) 
{ 
    this.gender = gender; 
} 

Quarto.

L'utilizzo di più variabili booleane per verificare la stessa cosa crea più opportunità per introdurre errori nel codice. Ad esempio Ogni volta che il maschio è impostato su true, la donna deve essere impostata su false e viceversa.

Per rispondere alla domanda.

È possibile utilizzare un valore booleano anziché il 3 utilizzato nel codice nella domanda. O isMale di isFemale sceglierne uno che non ti serve entrambi. se isMale è falso l'emplyee è una femmina.

Vorrei usare un Enum. U può leggere la risposta Enums here o Ted Hopp

1

Poiché Java 1.5, il linguaggio supporta i tipi di enumerazione (enum), che sono perfetti per questo tipo di problemi.

Semplice Sesso enum:

public enum Gender { 
    M, F, UNKNOWN 
} 

sofisticata Sesso enum: esempio

/** 
* Enumeration for reflecting user's gender. 
* @author naXa! 
*/ 
public enum Gender { 
    /** Male. */ 
    M("Male"), 
    /** Female. */ 
    F("Female"), 
    /** Gender is not known, or not specified. */ 
    UNKNOWN("Unknown"); 

    private final String name; 

    private Gender(String name) { 
     this.name = name; 
    } 

    /** 
    * @return The string representation of this element in the enumeration. 
    */ 
    public String getName() { 
     return this.name; 
    } 
} 

Usage:

Employee employee = new Employee("John Doe", 23, Gender.M); 

Si noti inoltre che le istanze di un enum sono costanti e dovrebbero seguire la denominazione convenzioni per costanti. Cioè si dovrebbe capitalizzare ogni lettera e separare le parole successive con il carattere di sottolineatura. Per convenzione, il carattere di sottolineatura non viene mai utilizzato altrove.

2

approccio booleana è inutile per uno dei tanti motivi:

La distinzione tra sesso e genere differenzia il sesso (l'anatomia del sistema riproduttivo di un individuo, e secondaria sesso caratteristiche) da genere (sociale ruoli basati sul sesso della persona , di solito appresa culturalmente), o identificazione personale di il proprio genere basato su una consapevolezza interna (identità di genere. In alcune circostanze, sesso e genere assegnati a una persona non allinea, e il risultato è a volte una persona transgender.

-1

Specificare il sesso come un enum, ha i suoi limiti: solo 65535 attributi (e metodi) possono essere impostati in una singola classe Java, che nel mondo di oggi è diversa unaccaptable.

Suggerisco di utilizzare BigInteger, che ha il suo valore massimo pari a (2^32)^2147483647.

Problemi correlati