Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的性别字段_Java - Fatal编程技术网

java中的性别字段

java中的性别字段,java,Java,我正在创建一个包含三个字段的Employee类:name、age和gender。我需要创建一个性别字段,但用户只能选择男性或女性。我想我必须以布尔形式来做这件事,但我不知道该怎么做。有人能帮我吗 到目前为止,我已经: public class Employee { private String name; private int age; private boolean gender; private boolean male; private boolean female; public

我正在创建一个包含三个字段的Employee类:name、age和gender。我需要创建一个性别字段,但用户只能选择男性或女性。我想我必须以布尔形式来做这件事,但我不知道该怎么做。有人能帮我吗

到目前为止,我已经:

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

最好对性别使用枚举:

public enum Gender {
    MALE, FEMALE
}

如果您使用的是Java1.5或更高版本,那么您可以(也应该)使用,它提供了强大的类型、方便的/独立于实现的命名和可扩展性

例如:

public enum Gender {
    MALE,
    FEMALE,
}

// usage example
myEmployee.setGender(Gender.FEMALE);
两个想法:

1) 生成一个布尔值,如
isMale
isFemale


2) 做一个
Gender
枚举,该枚举只包含
Gender.MALE
Gender.MALE

这里有两个错误。首先,在if语句中,您使用一个
=
操作符将
f
m
的值赋值给性别。您需要执行if(gender==true)或if(gender==false)。此外,我建议使用true表示男性或女性,false表示其他性别。

如果要使用布尔值,则应将其命名为
isMale
isFemale
,而不是
isGender
。请注意,无论你选择哪一个,都可能有人抱怨他们的性别被认为是错误的。这就是为什么枚举可能是更好的选择的原因


布尔值可能不合适的另一个原因是,在某些国家,在某些情况下要求人们披露自己的性别是非法的。因此,您可能希望为枚举提供三个选项:第三个选项是存储未公开的性别。

您可以使用
布尔值或创建
性别
枚举:

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

布尔值不合适,除非未知,否则也不是默认值。你至少需要三个值,也许四个。有关完整的讨论,请参阅。

问题中的代码有一些问题

首先。

构造函数应该设置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为假,则雇员为女性


我会使用枚举。您可以阅读Ted Hopp的答案,因为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;
    }
}
复杂的性别枚举:

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
的实例是常量,应该遵循常量的命名约定。也就是说,你应该大写每个字母,并用下划线字符分隔后面的单词。按照惯例,下划线字符从不在其他地方使用

布尔方法是无用的原因有很多:

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


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


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

为什么不使用枚举而不是布尔值?使用枚举更好请注意,性别多于男性或女性