java中的性别字段

时间:2012-07-24 20:57:37

标签: java

我正在创建一个包含三个字段的Employee类:名称,年龄和性别。我需要创建一个性别字段,但用户只能选择男性或女性。我想我必须以布尔形式执行此操作,但我不知道我将如何做到这一点。任何人都可以帮助我吗?

到目前为止,我有:

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");
    }
}
}

11 个答案:

答案 0 :(得分:20)

最好使用enum for Gender:

public enum Gender {
    MALE, FEMALE
}

答案 1 :(得分:4)

您可以使用boolean,否则您可以创建Gender枚举:

在Gender.java中:

public enum Gender {
    MALE,
    FEMALE
}

在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());
    }    
}

答案 2 :(得分:3)

如果您要使用布尔值,则应将其称为isMaleisFemale,而不是isGender。请注意,无论您选择哪一个,有人可能会抱怨他们的性别被视为false。这就是为什么枚举可能是更好的选择。

布尔可能不合适的另一个原因是,在某些国家/地区,要求人们披露其性别是违法的。出于这个原因,您可能希望提供一个包含三个选项的枚举:第三个是存储未披露性别的内容。

答案 3 :(得分:3)

布尔值不合适,除非是UNKNOWN,否则它们都不是默认值。您至少需要三个值,可能是四个。有关完整讨论,请参阅this answer

答案 4 :(得分:2)

由于以下原因之一,

布尔方法无用

  

性别和性别之间的区别区分性别(解剖学   个人生殖系统和第二性别   性别(基于性别的社会角色)   人,通常是文化学习的),或个人识别   基于内部意识(性别认同)的自己的性别   在某些情况下,个人指定的性别和性别不会   对齐,结果有时是变性人。

答案 5 :(得分:1)

如果您使用的是Java 1.5或更高版本,则可以(并且应该)使用enum types,它提供强类型,方便/独立于实现的命名和可扩展性。

示例:

public enum Gender {
    MALE,
    FEMALE,
}

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

答案 6 :(得分:1)

这里有一些错误。首先,在if语句中,您使用单个f运算符将m=的值分配给性别。您需要执行if(gender == true)或if(gender == false)。此外,我建议真正代表男性或女性,而虚假代表另一性别。

答案 7 :(得分:1)

从Java 1.5开始,该语言支持枚举类型(enum),它们非常适合此类问题。

简单的性别枚举:

public enum Gender {
    M, F, UNKNOWN
}

复杂的性别枚举:

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

用法示例:

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

另请注意,enum的实例是常量,应遵循常量的命名约定。即你应该将每个字母大写,并用下划线字符分隔后续的单词。按照惯例,下划线字符从未在别处使用过。

答案 8 :(得分:0)

两个想法:

1)制作一个类似isMaleisFemale

的布尔值

2)制作仅GenderGender.MALE

Gender.FEMALE枚举

答案 9 :(得分:0)

问题中的代码存在一些问题。

首先。

构造函数应该设置Employee类的变量值。必须在使用前指定男性和女性布尔变量。

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;

第二。

=和==有不同的含义。 =将左侧的变量赋予变量。 ==检查是否相等。

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

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

<强>第三

setGender(布尔性别)方法甚至没有设置性别。

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

第四。

使用多个布尔变量来检查相同的事情会为在代码中引入错误创造更多机会。例如,每次将男性设置为true时,必须将女性设置为false,反之亦然。

回答这个问题。

你可以使用一个布尔值而不是问题代码中使用的3个布尔值。要么是男性的女性选择一个你不需要两个。如果isMale是假的,则emplyee是女性。

我会使用枚举。你可以阅读Enums here或Ted Hopp的回答

答案 10 :(得分:-1)

将性别指定为enum有其局限性:在一个java类中只能设置65535个属性(和方法),这在当今多样化的世界中是无法解决的。

我建议使用BigInteger,其最大值高达(2 ^ 32) ^ 2147483647