Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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 如何在get方法中将字符值显示为set方法中的字符串值_Java - Fatal编程技术网

Java 如何在get方法中将字符值显示为set方法中的字符串值

Java 如何在get方法中将字符值显示为set方法中的字符串值,java,Java,我有下面的动物课。现在,有了Animal类的测试文件 我正在尝试获取字符值m,并将其显示为male。不知道该把逻辑放在哪里。我是把它放在setGender方法还是其他地方。请给出答案 package chapter4; public class Animal { private int lifeExpectancy; private int weight; String name; Character gender; public String type

我有下面的动物课。现在,有了
Animal
类的测试文件

我正在尝试获取字符值
m
,并将其显示为
male
。不知道该把逻辑放在哪里。我是把它放在setGender方法还是其他地方。请给出答案

package chapter4;

public class Animal {
    private int lifeExpectancy;
    private int weight;
    String name;
    Character gender;
    public String type;
    /*
    public void printValues() {
        String animal = new String();
        System.out.println(lifeExpectancy + "" + weight + "" + name + "" + gender + "" + type);
    }
    */


    public Animal(int lifeExpectancy, int weight, String name, Character gender, String type) {
        //super();
        this.lifeExpectancy = lifeExpectancy;
        this.weight = weight;
        this.name = name;
        this.gender = gender;
        this.type = type;
    }

    public int getLifeExpectancy() {
        return lifeExpectancy;
    }

    public void setLifeExpectancy(int lifeExpectancy) {
        this.lifeExpectancy = lifeExpectancy;
    }

    public int getWeight() {
        return weight;
    }



    public void setWeight(int weight) {
        this.weight = weight;
    }

    public String getName() {
        return name;
    }

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

    public  Character getGender() {
        /*
        if (gender == 'm' || gender == 'M')
            //gender.equals(obj)"Male";
          this.setGender(gender);
          return "Male";
        */
        return gender;
    }

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

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

/*

    public String printValues() {
        return "Animal [lifeExpectancy=" + lifeExpectancy + ", weight=" + weight + ", name=" + name + ", gender="
                + gender + ", type=" + type + "]";
    }
*/

    @Override
    public String toString() {
        return "Animal [lifeExpectancy=" + lifeExpectancy + ", weight=" + weight + ", name=" + name + ", gender="
                + gender + ", type=" + type + "]";
    }

}
试验动物类

public class AnimalTst {

    public static void main(String[] args) {
        Animal animal = new Animal (65, 14000 ,"Jumbo", 'm', "elephant");

        System.out.println("A " + animal.getGender() + " " + animal.getType() + " named " + animal.getName() 
        + " should live to be " + animal.getLifeExpectancy() + " and weigh " + animal.getWeight() + " pounds");
    }
} 

一个
字符
就是一个字符不能返回“male”,因为这是几个字符。您可以做的是将
gender
Character
类型更改为
String
类型,然后可以将'm'或'm'作为
字符
,并使用它创建逻辑,将
gender
设置为“Male”,这将是
字符串
,因为您正在调用gender上的getter,这就是你需要你的逻辑来展示性别的全部形式

您可以在动物类中添加性别枚举

private enum GENDER {Male, Female};
您的getter可以具有返回完整表单以用于显示的逻辑

public  String getGender() {
        return (this.gender == 'm' ? GENDER.Male.name() : GENDER.Female.name());
    }
另外,Animal类中的toString方法可以使用getter方法来避免复制那里的逻辑。

如果不能返回字符串(或字符数组),请在
getGender()方法中执行此操作:

public  Character getGender() 
{
   return this.gender;
}
在您的
main()
中:


使用conditional将字符的字符串值与“m”/“f”进行比较,并打印“Male”或“Female”或“Unknown”。

基本答案是如何显示值应在显示点决定;它不一定是
动物类的特性。这是一个责任分离的问题。动物在性别方面的唯一工作应该是知道它是什么性别。它不应该,事实上也不可能,被期望去处理向外界展示这些信息的细节

想象一下,你可能需要以各种不同的方式向人类展示动物的性别:

最简单的情况是当你需要在句子中插入“雄性”或“雌性”这个词时,比如“这种动物的性别是???”

在另一个例子中,你可能需要在句子开头加上大写的“Male”或“femal”:“像这样的动物……”

在另一种情况下,你可能需要所有格形式“男性的”或“女性的”:“颜色与其周围环境相融合……”

在另一个例子中,你可能需要法语中的“m–le”和“femelle”:“Sexe de cet animal est?”


在另一种情况下,您可以通过从标记为“男性”和“女性”的一对单选按钮中选择适当的一个,在GUI上显示性别

ok方法字符get-gender应该枚举get-gender。我试过了,它错误地说枚举和字符之间的类型不匹配。我的错。更新了答案。您需要将返回类型更改为String并返回enumI Preference Kevin的答案的字符串形式,即您不希望逻辑返回
Animal
类中的显示字符串。但是,如果您这样做,我认为您仍然需要一个方法来返回实际值(在原始示例中是
字符
,但我喜欢将其设置为
枚举
)。让
getGender
返回一个
String
,而没有任何方法返回一个更简单的值,这是一个糟糕的主意。此外,枚举的惯例是将类名做成驼峰大小写,就像任何类一样(因此,
Gender
),并使枚举值大写(因此,
男性
女性
)。在这种情况下,您将无法使用<代码>名称()>代码>以获得所需的字符串——这是很好的,我认为,因为EnUM常量标识符不必匹配要显示的字符串(如果您决定添加一个带有空格或连字符的情况),那么您应该考虑得到的投票答案。
public static void main (String[] args) throws java.lang.Exception
{

    System.out.println("A " + ( animal.getGender().toString().equalsIgnoreCase("m") ? "Male" : animal.getGender().toString().equalsIgnoreCase("f") ? "Female" : "Unknown") + " " + animal.getType() + " named " + animal.getName() 
    + " should live to be " + animal.getLifeExpectancy() + " and weigh " + animal.getWeight() + " pounds");


}