簡體   English   中英

接受參數化構造函數的值的方法

[英]Method to take in values for parameterized constructor

我在這里遇到問題。 有人告訴我通過參數化構造函數初始化值。 編寫方法“ getInput”以獲取這些屬性的值,調用參數化的構造函數,然后返回Child對象。

我認為這就是我所做的...但是當我調用該方法時,我得到的是這樣的:Child @ 75d9fd51這僅僅是對象引用嗎? 我正在嘗試打印輸入的年齡,姓名和等級。 先感謝您!

到目前為止,這就是我所擁有的:

import java.util.Scanner;

class Child{
    int age;
    String name;
    char grade;

public Child(){

}

public Child(int age, String name, char grade) {
    this.age = age;
    this.name = name;
    this.grade = grade;
}
public int getAge() {
    return age;
}
public void setAgel(int age) {
    this.age = age;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public char getGrade() {
    return grade;
}
public void setGrade(char grade) {
    this.grade = grade;
}
}

public class Data {

public static Child getInput(Child s){
    Scanner input = new Scanner(System.in);
    System.out.println("Input age: ");
    int age = input.nextInt();
    System.out.println("Input name: ");
    String name = input.next();
    System.out.println("Input grade: ");
    char grade = input.next().charAt(0);
    s = new Child(age, name, grade);

    return s;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub


    Child x = new Child(20, "James", 'A');   //I want this to be changed with input

    getInput(x);

    System.out.print(x);
}

覆蓋子類中的toString方法

public String toString(){
        return age + " " + name + " " + grade;
    }

當您在代理類(即數據)中運行此行時

public static void main(String...args){
   Child x = new Child(20, "James", 'A');   
   System.out.print(x.toString());
  }

輸出:

Input age: 
32
Input name: 
izak
Input grade: 
A
32 izak A

不,“ Child @ 75d9fd51”不是對象引用。 它是存儲在Child類的實例x中的數據。 在Java編程語言中,每個類都提供一個hashCode()方法,該方法將存儲在該類實例中的數據摘要為單個哈希值(32位帶符號整數)。

如果要獲取輸入數據並打印輸入的數據(年齡,姓名和等級),則應進行一些更改:

首先,更改getInput(x); x = getInput(x); 該語句將新類別分配給類別x。

二,放方法

public String toString() { 
   return "Input age: " + getAge() + "\nInput name: " + getName() + "\nInput grade: " +        getGrade(); 
}

內孩子課。 當您調用System.out.print(x); 在主要方法上, System.out.print(x.toString()); 實際上被稱為。

通用Object沒有特定的可打印表示形式,因為Java不能僅僅猜測您要如何打印它。 因此,您獲得的是內存中的引用。

但是該語言為您提供了Object類的public String toString()方法,可以重寫該方法以提供您想要的特定表示形式。 將對象傳遞給println方法時,將自動調用此方法。

例如:

class Child {
  public String toString() { 
       return name + "," + grade + "," + age;
  }
}

傳遞對象時, System.out.println()將打印出對象的toString方法的結果。 默認輸出采用您看到的格式。 如果您想查看更多有用的信息,則可以分別傳遞字段

System.out.println("Age: " + x.getAge());
System.out.println("Name: " + x.getName());
System.out.println("Grade: " + x.getGrade());

或者您可以重寫Child上的toString方法:

@Override
public String toString() {
    return "Age: " + this.age + ", Name: " + this.name + ", Grade: " + this.grade;
}

現在,您可以像以前一樣調用System.out.println(x)

附帶說明一下,創建並傳遞Child的實例只是用getInput的新實例替換它是沒有意義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM