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