我创建了一个学生班级,我需要使用学生的名字以及他们的代码(第一个学生是1000,nxt是1001)来创建loginId
 名字的第一个字母+姓氏(如果姓氏长于4个字母,则姓氏仅4个字母)+代码的结尾数字
例如John Baker应该是jbake00

    public class Student
    {
//Instance variables
private double coursecount = 0;
private static int lastAssignedNumber = 1000;
private double credit;
private String course;
//Variables
public String name;
public String address;
public String loginId = "";
public int accountNumber;
public double gpa;

//Constructs new student
public Student(String name) {
    this.name = name;
    this.accountNumber = lastAssignedNumber;
    lastAssignedNumber++;
            setloginid();//edited this one in
}

public void setloginId()        {
    int position = this.name.indexOf(' ');
    String first_name = this.name.substring(0,1);
    String last_name = this.name.substring(position + 1);
    if(last_name.length() >= 4)
        last_name = last_name.substring(0,4);
    first_name = first_name.toLowerCase();
    last_name = last_name.toLowerCase();
    String digit_word = new Integer(accountNumber).toString();
    String digit_short = digit_word.substring(2);
    loginId += first_name + last_name + digit_short;
        this.loginId = loginId;
}


我这里的问题是,loginId没有保存到全局变量中,这是为什么。

最佳答案

您需要在某处调用setloginId()方法。根据您的评论,您似乎想在构造函数中执行此操作:


  我只是创建该构造函数以尝试将loginId设置为值


如下:

public Student(String name) {
    this.name = name;
    this.accountNumber = lastAssignedNumber;
    lastAssignedNumber++;
    setloginId(); //need to call this
}


您可能还想私有化setloginId()方法,因为不必公开它:

private void setloginId() {


同样,您可以更改以下内容:

    loginId += first_name + last_name + digit_short;
    this.loginId = loginId;


至:

    this.loginId = first_name + last_name + digit_short;


不必执行+=,因为它将添加到现有字符串中,这可能是您不希望的。

关于java - 变量未在对象中定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21279391/

10-12 05:39