为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_遁去的一_1 2021-12-30 20:56:24
我有这个程序,必须询问用户是只想输入学生姓名还是输入学生姓名和横幅 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;  }    }
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

由于 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 example

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);

}

您当前的代码没有定义任何构造函数,但是当您没有定义构造函数时,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;

    }

}


查看完整回答
反对 回复 2021-12-30
?
米脂

TA贡献1836条经验 获得超3个赞

当您创建一个新Student对象时,您将创建并初始化另外 3 个 Student 对象。这会导致 Student 创建的递归,从而导致java.lang.StackOverflowError.

您似乎也没有您的Student类的构造函数(例如public Student () {...})。理想情况下,构造函数是您初始化类变量的地方。

试试这个:不要Student在类本身中创建 3 个对象,而是在main方法中创建它们。还为您的Student类添加构造函数方法


查看完整回答
反对 回复 2021-12-30
  • 2 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号