变量未在对象中定义

时间:2014-01-22 09:50:03

标签: java string variables object

我创建了一个学生班,我需要使用学生的名字,然后是他们的代码(第一个学生是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没有保存到全局变量中,为什么会这样。

2 个答案:

答案 0 :(得分:2)

您需要在某处调用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;

没有必要执行+=,因为它会附加到您可能不想要的现有字符串。

答案 1 :(得分:0)

您必须从对象的构造函数中运行方法setLoginID。并且您可以将该方法设为私有方法,我认为从其他任何地方访问它都没有任何用处,而不是从构造函数中访问它