关于#ar#的问题,如何解决?

创建内部类报错了
要求:按照下面要求编写程序:
(1)定义一个名为 Person 的类,包含私有属性:姓名(name),年龄(age),体重(weight),身高(height);包含一个4个参数的构造方法,通过形参完成对成员变量的赋值操作。
(2) Person中有一个成员内部类Heart:其中包含属性:心率(heartRate);包含方法: showPersonInfo(),显示Person以及Heart的全部属性
(3)在类Test的主方法中,创建一个名叫张三,年龄20,身高180,体重150的对象,调用方法showPersonInfo()显示张三的全部信息。

public class Person {
    private String name;
    private String age;
    private String weight;
    private String height;

    public Person(String name,String age,String weight,String height) {
        this.name=name;
        this.age=age;
        this.weight=weight;
        this.height=height;
    }
    
    public class Heart(){
        public int heartRate;
        public void showPersonInfo() {
            System.out.println(name+age+weight+height+heartRate);
        }
        
    }
}



public class Text {
    public static void main(String[] args) {
        Person p=new Person("张三"+"20"+"180"+"155");
        Person.Heart h=outer.new.Heart();
                

    }

参考如下:

public class Person {
    private String name;
    private int age;
    private float weight;
    private float height;

    public Person(String name, int age, float weight, float height) {
        this.name = name;
        this.age = age;
        this.weight = weight;
        this.height = height;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", weight=" + weight +
                ", height=" + height +
                '}';
    }

    class Heart {
        int heartRate;

        Heart(int heartRate) {
            this.heartRate = heartRate;
        }

        public void showPersonInfo() {
            System.out.print(Person.this.toString() + "heartRate:" + heartRate);
        }
    }
}
public class Test  {

    public static void main(String[] args) {
        Person person = new Person("张三", 20, 180, 150);
        Person.Heart heart = person.new Heart(80);
        heart.showPersonInfo();
    }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    解决方案:

    首先,创建Person类,并在其中定义一个成员内部类Heart。

    class Person:
        def __init__(self, name, age, height, weight):
            self.name = name
            self.age = age
            self.height = height
            self.weight = weight
            self.heart = self.Heart()
    
        class Heart:
            def __init__(self):
                self.rate = 70
    
            def showPersonInfo(self):
                print("Name:", self.name)
                print("Age:", self.age)
                print("Height:", self.height)
                print("Weight:", self.weight)
                print("Heart rate:", self.rate)
    

    在这里,我们将Heart类作为Person类的成员内部类进行定义。在初始化方法中,我们为心率属性设置了默认值,并定义了showPersonInfo方法,用于显示所有属性。

    接下来,我们可以创建一个张三对象,并调用他的showPersonInfo方法,来显示他的所有属性。

    person = Person("张三", 20, 180, 150)
    person.heart.showPersonInfo()
    

    这里我们将张三的年龄、身高和体重等属性传递给了Person类,同时调用了成员内部类Heart中的showPersonInfo方法,输出所有属性。

    完整代码:

    class Person:
        def __init__(self, name, age, height, weight):
            self.name = name
            self.age = age
            self.height = height
            self.weight = weight
            self.heart = self.Heart()
    
        class Heart:
            def __init__(self):
                self.rate = 70
    
            def showPersonInfo(self):
                print("Name:", self.name)
                print("Age:", self.age)
                print("Height:", self.height)
                print("Weight:", self.weight)
                print("Heart rate:", self.rate)
    
    person = Person("张三", 20, 180, 150)
    person.heart.showPersonInfo()
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^