Java 您好,我无法获取公共字符串getGenderName()来输出用户要输入的内容

Java 您好,我无法获取公共字符串getGenderName()来输出用户要输入的内容,java,Java,我无法获取公共字符串getGenderName()以输出用户将输入的内容。它只是不断输出错误的输入。请帮助我,我对java有点陌生,所以请不要半点解释。我的密码怎么了?请让我知道,如果有人知道如何实施公共enum性别,我也有兴趣了解您对此的看法 import java.text.NumberFormat; import java.util.Scanner; public class Employee { private String firstName; private String last

我无法获取公共字符串getGenderName()以输出用户将输入的内容。它只是不断输出错误的输入。请帮助我,我对java有点陌生,所以请不要半点解释。我的密码怎么了?请让我知道,如果有人知道如何实施公共enum性别,我也有兴趣了解您对此的看法

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