亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我正在嘗試編寫使用方法重載打印出我的語句的代碼

我正在嘗試編寫使用方法重載打印出我的語句的代碼

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 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號