我创建了一个学生班级,我需要使用学生的名字以及他们的代码(第一个学生是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/