Java 您好,我无法获取公共字符串getGenderName()来输出用户要输入的内容
我无法获取公共字符串getGenderName()以输出用户将输入的内容。它只是不断输出错误的输入。请帮助我,我对java有点陌生,所以请不要半点解释。我的密码怎么了?请让我知道,如果有人知道如何实施公共enum性别,我也有兴趣了解您对此的看法Java 您好,我无法获取公共字符串getGenderName()来输出用户要输入的内容,java,Java,我无法获取公共字符串getGenderName()以输出用户将输入的内容。它只是不断输出错误的输入。请帮助我,我对java有点陌生,所以请不要半点解释。我的密码怎么了?请让我知道,如果有人知道如何实施公共enum性别,我也有兴趣了解您对此的看法 import java.text.NumberFormat; import java.util.Scanner; public class Employee { private String firstName; private String last
import java.text.NumberFormat;
import java.util.Scanner;
public class Employee {
private String firstName;
private String lastName;
private static String gender;
private int dependents;
private double annualSalary;
private NumberFormat nf = NumberFormat.getCurrencyInstance();
private static Scanner scan;
private static char sex;
public Employee() {
firstName = "not given";
lastName = "not given";
gender = "";
dependents = 0;
annualSalary = 20.000;
}
public Employee(String first, String last, char sex, int dep, double salary) {
setFirstName(first);
setLastName(last);
Character.toString(sex);;
setDependents(dep);
setAnnualSalary(salary);
}
public double calculatePay() {
return annualSalary / 52;
}
public void displayEmployee() {
System.out.println("First Name: " + getFirstName());
System.out.println("Last Name: " + getLastName());
System.out.println("Gender: " + getGenderName());
System.out.println("Dependents: " + getDependents());
System.out.println("Annual Salary: " + nf.format(getAnnualSalary()));
System.out.println("Weekly Pay: " + nf.format(calculatePay()));
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
***public String getGenderName()
{
if ("m".equalsIgnoreCase(gender))
return "Male";
if ("f".equalsIgnoreCase(gender))
return "Female";
else
return "Wrong Input";
}***
public void setDependents(int dependents) {
this.dependents = dependents;
}
public int getDependents() {
return dependents;
}
public void setAnnualSalary(double annualSalary) {
this.annualSalary = annualSalary;
}
public double getAnnualSalary() {
return annualSalary;
}
public static void displayDivider(String outputTitle) {
System.out.println("**************** " + outputTitle + " ****************");
}
public static String getInput(String inputType) {
System.out.println("Enter the " + inputType + ": ");
scan = new Scanner(System.in);
String input = scan.next();
return input;
}
public static void main(String[] args) {
// Create an Employee object using the default constructor
displayDivider("Create an Employee object using the default constructor");
Employee employee1 = new Employee();
Employee.setGender(Employee.gender);
String input;
int dependents;
double annualSalary;
input = getInput("First Name");
employee1.setFirstName(input);
input = getInput("Last Name");
employee1.setLastName(input);
input = getInput("Gender");
setSex(input.charAt(0));
Employee.setGender("gender");
input = getInput("Dependents");
dependents = Integer.parseInt(input);
employee1.setDependents(dependents);
input = getInput("Annual Salary");
annualSalary = Double.parseDouble(input);
employee1.setAnnualSalary(annualSalary);
displayDivider("Employee Information");
employee1.displayEmployee();
displayDivider("Create a second Employee object using the multi-argument constructor");
Employee employee2 = new Employee("John", "Doe", 'M', 3, 46000.0);
displayDivider("Employee Information");
employee2.displayEmployee();
}
private static void setGender(String string) {
// TODO Auto-generated method stub
}
/**
* @return the sex
*/
public static char getSex() {
return sex;
}
/**
* @param sex the sex to set
*/
public static void setSex(char sex) {
Employee.sex = sex;
}
}
输出:
Enter the Annual Salary:
Enter the First Name:
g
Enter the Last Name:
hhj
Enter the Gender:
m
Enter the Dependents:
7
Enter the Annual Salary:
9
**************** Employee Information ****************
First Name: g
Last Name: hhj
Gender: **Wrong Input**
Dependents: 7
Annual Salary: $9.00
Weekly Pay: $0.17
**************** Sample Employee Information ****************
First Name: John
Last Name: Doe
Gender: **Wrong Input**
Dependents: 3
Annual Salary: $46,000.00
Weekly Pay: $884.62
当前,您没有在构造函数中为性别分配任何内容。你应该写:
gender = Character.toString(sex);
您的setGender
方法为空
private static void setGender(String string) {
// TODO Auto-generated method stub
}
其内容应为:
public static void setGender(String string) {
gender = string;
}
注意:您不应该将性别作为静态的,这没有任何意义。您呼叫
Employee.setGender("Gender");
所以性别变量得到字符串'gender',它永远不是m或f。
为什么性别和性是静态的?你所有的员工都是同性!
使它们成为非静态的,并且在您的主要方法中:
input = getInput("Gender");
employee1.setGender(input.charAt(0));
我不明白你为什么需要一个额外的可变性别
将性别作为一个名词:
public class Employee {
public enum Gender {
Male('m'), Female('f');
private char sign;
private Gender(char sign )
{
this.sign=sign;
}
public static Gender valueOf(final char s)
{
switch(s){
case 'm': return Male;
case 'f':return Female;
}
System.err.println("invalid gender:"+s);
return null;
}
}
private Gender gender;
public void setGender(Gender g)
{
this.gender=g;
}
public Gender getGender()
{
return gender;
}
}
示例如何使用它:
public static void main(String args[])
{
input = getInput("Gender");
employee1.setGender(Gender.valueOf(input.charAt(0)));
}
setGender未实现,因此您永远不会更改gender的值。另外,setGender()是一个私有静态方法?我没有在publicstaticvoid中正确地实现它吗?感谢您为示例方法所做的工作,它现在显示为Male。但是对于用户输入,我仍然会得到错误的输入为什么将sex
和gender
作为两个单独的字段?无论您在哪里调用setex
方法,您都应该只调用setGender
方法。当我输入员工的性别(M、F、M、F、男性、女性)时,出于某种原因,我仍然会得到错误的输入。但是它在我的示例部分工作,所以我已经完成了一半,谢谢你的帮助,因为你正在传递字符串中的字符,好的,谢谢我取出了额外的性别变量,你是对的。好的,为我指出了正确的方向来回答问题的第二部分,谢谢,我需要输入employee1.setGender(input.substring(0));而不是employee1.setGender(input.charAt(0));。这是我第一次这样做,真是太棒了,每个人都非常乐于助人,谢谢uDid,在我纠正了所有错误后,yall向我展示了错误所在,枚举像一个符咒一样工作感谢Be carefull:input。子字符串(0)不会返回第一个字符,但会返回从位置0=完整字符串开始的字符串。如果要使用子字符串,则必须使用input.substring(0,1);