6

我正在创建一个包含三个字段的 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");
    }
}
}
4

11 回答 11

23

Better to use an enum for Gender:

public enum Gender {
    MALE, FEMALE
}
于 2012-07-24T20:59:59.813 回答
8

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

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

于 2018-02-03T19:16:01.570 回答
4

您可以使用 aboolean或者您可以创建一个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());
    }    
}
于 2012-07-24T21:02:58.527 回答
3

布尔值是不合适的,默认值也不合适,除非它是 UNKNOWN。您至少需要三个值,也许是四个。请参阅此答案以进行完整讨论。

于 2012-07-25T01:12:49.257 回答
3

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

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

于 2012-07-24T21:00:58.900 回答
2

从 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);

另请注意,an 的实例enum是常量,应遵循常量的命名约定。即,您应该将每个字母大写,并用下划线分隔后续单词。按照惯例,下划线字符从不在其他地方使用。

于 2015-03-10T14:38:56.763 回答
1

If you're using Java 1.5 or later, you can (and should) use enum types, which provide strong typing, convenient/implementation-independent naming, and extensibility.

Example:

public enum Gender {
    MALE,
    FEMALE,
}

// usage example
myEmployee.setGender(Gender.FEMALE);
于 2012-07-24T21:00:08.740 回答
1

这里有几件事是错误的。首先,在您的 if 语句中,您使用单个运算符将值f和性别分配给性别。你需要做 if (gender == true) 或 if (gender == false)。另外,我建议让 true 代表男性或女性,而 false 代表另一个性别。m=

于 2012-07-24T21:00:38.523 回答
1

由于多种原因之一,布尔方法是无用的:

性别和性别之间的区别将性别(个体生殖系统的解剖结构和第二性特征)与性别(基于人的性别的社会角色,通常是从文化上学到的)或基于个体对自己性别的个人识别区分开来。内部意识(性别认同。在某些情况下,个人的指定性别和性别不一致,结果有时是变性人。

于 2015-06-26T00:11:29.610 回答
0

Two ideas:

1) Make a boolean like isMale or isFemale

2) Make a Gender Enum that only has Gender.MALE and Gender.FEMALE

于 2012-07-24T21:00:12.137 回答
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(boolean gender) 方法甚至没有设置性别。

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

第四。

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

回答问题。

您可以使用一个布尔值而不是问题代码中使用的 3 个布尔值。要么 isMale 要么 isFemale 选择一个你不需要两者。如果 isMale 为 false,则员工为女性。

我会使用枚举。你可以在这里阅读枚举 或 Ted Hopp 的回答

于 2015-01-12T12:37:27.763 回答