无法获取对象类中的方法来识别给定的 String 变量

问题描述 投票:0回答:1

我用于创建学生 ID 的代码无法找到姓氏,并且我不确定代码的哪一部分导致它无法看到创建新学生对象时给出的姓氏

这是我收到的错误代码: java.lang.NullPointerException:无法调用“String.substring(int,int)”,因为“this.familyName”为空

这是对象类代码:

public class Student{

    private String givenName;
    private String familyName;
    private String userName;
    private String major;
    public static String institutionEmailAddress = "@student.otago.ac.nz";

    public Student(String name, String famName, String maj){
    
      name = givenName;
  
       
      famName = familyName;
      
       userName = createUserName();
    }
    private String createUserName(){
      String s1, s2;
      s1 = familyName.substring(0, 3);
      s2 = givenName.substring(0, 2);
      int firstN = s1.indexOf(1);
      int secondN = s2.indexOf(1);
      int Num = (firstN * secondN);
      String Num2 = String.valueOf(Num);
      String finalNum = Num2.substring(0, -3);
      String finalUserName = (s1 + s2 + finalNum);
      return finalUserName.toLowerCase();
      
    }
    public String getEmailAddress(){
      return (userName + institutionEmailAddress);
    }
    public void setMajor(String maj){
      maj = major;
    }
    public String toString(){
      return "meow";
    }
    } 

我尝试更改变量的初始化方式,以不同的方式调用它并使用其他方法来尝试让它识别姓氏,但遇到了困难

javascript java object calling-convention
1个回答
0
投票

在当前的实现中,您尝试通过直接将参数 namefamName 设置给这些字段来为 givenNamefamilyName 分配值。但是,这不起作用,因为您正在重新分配参数而不是设置类字段。

要解决此问题,您应该使用 this 关键字将构造函数参数分配给类字段,该关键字引用类的当前实例。这是您的课程的更正版本:

public Student(String name, String famName, String maj) {
    this.givenName = name;      // Correct assignment
    this.familyName = famName;  // Correct assignment
    this.major = maj;           // Assign major to the class field

    this.userName = createUserName();
}

public void setMajor(String maj) {
        this.major = maj;  // Correct assignment
    }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.