【问题标题】:Variable not being defined in object变量未在对象中定义
【发布时间】:2014-01-22 09:50:02
【问题描述】:

我创建了一个学生班级,我需要使用学生的名字后跟他们的代码(第一个学生是 1000,nxt 是 1001)来创建一个 loginId 使用 姓名的第一个字母 + 姓氏(或者如果姓氏超过 4 个字母,则只有姓氏的 4 个字母)+ 代码的结尾数字 例如约翰贝克将是,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 没有被保存到全局变量中,这是为什么。

【问题讨论】:

  • 没有保存是什么意思?当您尝试从其他方法访问它时,您无法看到 loginId 的值? (假设 setloginId() 在您尝试获取此值的方法之前运行)
  • 你在哪里打电话setloginId()
  • 是的,当我尝试从另一种方法访问 loginId 时,我只得到一个空字符串。抱歉,我是新手,我只是创建该构造函数以尝试将 loginId 设置为值。
  • “我只是创建了那个构造函数来尝试将loginId设置为一个值”然后你应该在构造函数中调用方法setloginId()
  • 这是正确的编程方式吗?在风格方面。

标签: java string variables object


【解决方案1】:

您需要在某处调用setloginId() 方法。从您的 cmets 来看,您似乎想在构造函数中执行此操作:

我只是创建该构造函数来尝试将 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;

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      相关资源
      最近更新 更多