2012-07-24 9 views
5

Tworzę klasę Pracowników zawierającą trzy pola: imię i nazwisko, wiek i płeć. Muszę utworzyć pole płci, ale użytkownik może wybrać tylko mężczyznę lub kobietę. Chyba muszę to zrobić w formie boolowskiej, ale nie wiem, jak to zrobię. Czy ktoś może mi pomóc?Pole płci w java

Do tej pory mam:

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

Dlaczego nie używać wyliczenia zamiast wartości boolowskiej? – JamesB

+1

Wyszukaj "enum". – JerseyMike

+4

Jak bardzo normalizuje się płeć. – millimoose

Odpowiedz

20

Lepiej użyć enum dla płci:

public enum Gender { 
    MALE, FEMALE 
} 
1

Jeśli używasz Java 1.5 lub nowszej, można (i należy) używać enum types, które zapewniają silne pisanie, wygodne/niezależne od implementacji nazewnictwo i rozszerzalność.

Przykład:

public enum Gender { 
    MALE, 
    FEMALE, 
} 

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

dwie idee:

1) Sprawdź wartość logiczną jak isMale lub isFemale

2) Zrób Gender Enum, który ma Gender.MALE i Gender.FEMALE

1

tam tylko kilka rzeczy jest nie tak. Po pierwsze, w instrukcjach if przypisujesz wartość f i m do płci za pomocą pojedynczego operatora =. Musisz zrobić jeśli (gender == true) lub if (gender == false). Poza tym, polecam posiadanie prawdziwego przedstawiciela płci męskiej lub żeńskiej, a fałszywe reprezentują inną płeć.

3

Jeśli zamierzasz używać wartości boolowskiej, powinna ona być nazywana isMale lub isFemale, a nie isGender. Zauważ, że ktokolwiek wybierzesz, ktoś prawdopodobnie będzie narzekał, że ich płeć jest uważana za false. Jest to powód, dla którego wyliczenie może być lepszą opcją.

Innym powodem, dla którego boolean może być nieodpowiedni, jest fakt, że w niektórych krajach nielegalne jest w niektórych sytuacjach zmuszanie ludzi do ujawniania swojej płci. Z tego powodu możesz podać enum z trzema opcjami: trzeci to zapis, że płeć nie została ujawniona.

4

Można użyć boolean albo można utworzyć Gender ENUM:

W Gender.java:

public enum Gender { 
    MALE, 
    FEMALE 
} 

W 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

logiczny nie jest odpowiednie, i żadna nie jest wartością domyślną, chyba że jest UNKNOWN. Potrzebujesz co najmniej trzech wartości, może czterech. Aby uzyskać pełną dyskusję, zobacz this answer.

0

Jest kilka błędów w kodzie w pytaniu.

Pierwsza.

Konstruktor powinien ustawić wartości zmiennych z klasy Employee. Zmienne typu męskiego i żeńskiego muszą zostać przypisane przed użyciem.

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; 

Po drugie.

= i == mają różne znaczenia. = przypisuje to, co jest po prawej stronie zmiennej po lewej stronie. == sprawdza pod kątem równości.

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

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

Trzeci.

Metoda setGender (boolean gender) nawet nie określa płci.

Czwarty.

Używanie wielu zmiennych boolowskich do sprawdzania tego samego, stwarza więcej okazji do wprowadzania błędów w kodzie. Na przykład Za każdym razem, gdy samiec jest ustawiony na wartość true, kobieta musi być ustawiona na wartość false i na odwrót.

Aby odpowiedzieć na pytanie.

Można użyć jednej wartości boolowskiej zamiast 3 używanej w kodzie w pytaniu. Albo isMale of isFemale wybierz jedną, której nie potrzebujesz. jeśli isMale jest fałszywe, emplyee jest kobietą.

Chciałbym użyć Enum. U można przeczytać o Enums here lub odpowiedzi Teda Hoppa

1

Od wersji Java 1.5 język obsługuje typy wyliczeniowe (enum), które są idealne dla tego rodzaju problemów.

Proste Płeć ENUM:

public enum Gender { 
    M, F, UNKNOWN 
} 

Wyrafinowane Płeć ENUM: Przykład

/** 
* 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; 
    } 
} 

Zastosowanie:

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

Zauważmy też, że przypadki o enum są stałe i powinny być zgodne z nazewnictwa konwencje dla stałych. To znaczy. powinieneś zamieniać każdą literę na wielką literę i oddzielać kolejne słowa znakiem podkreślenia. Zgodnie z konwencją znak podkreślenia nigdy nie jest używany w innym miejscu.

2

logiczna podejście jest bezużyteczne do jednego z wielu powodów:

Rozróżnienie płci i płeć różnicuje płeć (anatomii układu rozrodczego danej osoby, a wtórne seks charakterystyka) od płci (socjalna role zależne od płci osoby, z którą zazwyczaj się uczą) lub osobistej identyfikacji na podstawie świadomości wewnętrznej (tożsamość płciowa) W w niektórych okolicznościach przypisana płeć i płeć danej osoby nie są zgodne z wyrównać, a wynik jest czasem osoba transpłciowa.

-1

Określanie płci jako enum, ma swoje ograniczenia: Tylko 65535 atrybutów (i metody) można ustawić w jednej klasy Java, które w dzisiejszym świecie jest zróżnicowany unaccaptable.

Proponuję użyć BigInteger, którego maksymalna wartość jest równa (2^32)^2147483647.