猿问

我正在尝试编写使用方法重载打印出我的语句的代码

我有这个程序,必须询问用户是只想输入学生姓名还是输入学生姓名和横幅 ID。然后他们可以输入“just name”或“both”,然后会出现相应的问题。使用Student我创建的类,我必须使用适当的构造函数将答案打印到屏幕上,或者只是学生姓名或学生姓名和横幅 ID。我想我对如何创建构造函数感到困惑,指令说要创建三个构造函数,一个接受名称和横幅 ID,一个只接受名称,一个不接受任何参数,它希望我创建他们在Student班级中,我认为他们是在main班级内部创建的以访问Student班级。


package classwork6_2;

import java.util.Scanner;


public class ClassWork6_2 {


  public static void main(String[] args) {


    Scanner s = new Scanner(System.in);


    System.out.print("Would you like to enter student's name only or name and banner ID?: ");

    String response = s.nextLine();

    String name;

    long banID;

    if(response.equalsIgnoreCase("just name")){

        System.out.print("Enter student's name: ");

        name = s.nextLine();

    } else if(response.equalsIgnoreCase("both")){


        System.out.print("Enter students name: ");

        name = s.nextLine();

        System.out.print("Enter student's banner ID: ");

        banID = s.nextLong();



    }


    Student nameBanID = new Student();

    nameBanID.setNameBanID(name, banID);

    Student n = new Student(); 

    n.setName(name);


    System.out.print("Students name is: " + n.getName());

    System.out.print("Student's banner ID is: " + n.getNameBanID()); 

  }   

}

学生班


package classwork6_2;


public class Student {



  private String name;

  private String bannerID;



  Student nameBanID = new Student();

  Student n = new Student();

  Student none = new Student();


  public String getNameBanID(){


    return bannerID + name;

  }


  public String getName(){


    return name;

  }


  public void setNameBanID(String name, long banID){


    bannerID = bannerID + name;

  }


  public void setName(String name){


    this.name = name;

  }    

}


qq_遁去的一_1
浏览 186回答 2
2回答

繁星coding

由于 Student 类中的这些行,您收到堆栈溢出错误Student nameBanID = new Student();Student n = new Student();Student none = new Student();在您调用 ClassWork6_2 时,Student nameBanID = new Student();您正在创建 Student 类的实例并将其分配给nameBanID变量。当您创建该类的实例时,它会立即遇到该行,该行表示Student nameBanID = new Student();使您的代码经历创建新学生的循环,直到发生堆栈溢出错误为止。以下是三个构造函数的外观private String name;//changed bannerID to long to match input from code exampleprivate long bannerID;public Student(String name){    setName(name);}public Student(long bannerID){    setBannerID(bannerID);}public Student(String name, long bannerID){    setName(name);    setBannerID(bannerID);}您当前的代码没有定义任何构造函数,但是当您没有定义构造函数时,java 会为您创建一个默认构造函数。一旦定义了构造函数,您就可以使用这些构造函数创建一个 student 对象。String studentName = "Jeffery";long bannerID = 123456789;Student studentWithName = new Student(studentName);Student studentWithBannerID = new Student(bannerID);Student studentWithNameAndBannerID = new Student(studentName,bannerID);这是我对你的学生类所做的所有修改class Student {    private String name;    private long bannerID;    public Student(String name){        setName(name);    }    public Student(long bannerID){        setBannerID(bannerID);    }    public Student(String name, long bannerID){        setName(name);        setBannerID(bannerID);    }    public Student(){}    public String getNameBanID(){        return bannerID + name;    }    public String getName(){        return name;    }    public long getBannerID(){        return bannerID;    }    public void setBannerID(long bannerID){        this.bannerID = bannerID;    }    public void setName(String name){        this.name = name;    }}

米脂

当您创建一个新Student对象时,您将创建并初始化另外 3 个 Student 对象。这会导致 Student 创建的递归,从而导致java.lang.StackOverflowError.您似乎也没有您的Student类的构造函数(例如public Student () {...})。理想情况下,构造函数是您初始化类变量的地方。试试这个:不要Student在类本身中创建 3 个对象,而是在main方法中创建它们。还为您的Student类添加构造函数方法
随时随地看视频慕课网APP

相关分类

Java
我要回答