当前位置: 首页 > 知识库问答 >
问题:

应该添加什么来计算和输出每个行为的可变能量的增加或减少?

锺高翰
2023-03-14

应该添加什么来计算和输出每个行为的可变能量的增加或减少?能量的初始值:个人、学生和学生工作者为10,专业人员和研究人员为8。

person: speak -2, eat +3, walk -3, sleep +3
student: speak -2, eat +3, walk -1, sleep +3, study -1
studentworker: speak -2, eat +3, walk -1, sleep +2, work -3, study -2
researcher: speak -2, eat +3, walk -2, sleep +3, research -2
professor: speak -2, eat +3, walk -2, sleep +3, research -1, teach -1
    null
java prettyprint-override">    class Person
    {
        int Energy = 10;
        void sleep() { System.out.println("sleep"); this.Energy += 3;}
        void eat() { System.out.println("eat"); this.Energy += 3; }
        void speak() { System.out.println("speak"); this.Energy -= 2;}
        void walk() { System.out.println("walk"); this.Energy -=3;}
        
        public void person(int Energy)
        {
            this.Energy = Energy;
        }
    }

    class Student extends Person
    {       
            int Energy = 10;
            void study()
            {
                System.out.println("study");
                this.Energy -= 1;
            }
    }

    class StudentWorker extends Student
    {
        int Energy = 10;
        void work()
        {   
            this.Energy -= 3;
            System.out.println("work");
        }
    }

    class Researcher extends Person
    {   
        int Energy = 8;
        void research()
        {   
            this.Energy -= 2;
            System.out.println("research");
        }
    }

    class Professor extends Researcher
    {   
        int Energy = 8;
        void teach()
        {   
            this.Energy -=1;
            System.out.println("teach");
        }
    }
    
    public class _java {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Person p = new Person();
            
            Student s = new Student();
            System.out.println("Case 1: Student: ");
            p.sleep(); p.eat(); p.walk(); p.speak(); s.study();

            StudentWorker sw = new StudentWorker();
            Researcher r = new Researcher();
            
            Professor pf = new Professor();
            System.out.println("Case 2: Professor: ");
            pf.teach(); p.speak(); p.walk(); r.research(); p.sleep();
            System.out.println();
            
            System.out.println("Case 3: Person: ");
            p.sleep(); p.eat(); p.speak(); p.walk();
        }
    }

共有1个答案

锺离玮
2023-03-14

您应该重新阅读一些关于继承、控制对字段和构造函数的访问的基本教程,以解决代码中的以下问题:

  1. person缺少一个默认构造函数,以及一个具有int energy参数的构造函数(而不是方法void person=应该是setterpublic void setEnergy(int value))
class Person {
    public Person() {
        this(10);
    }
    public Person(int energy) {
        this.energy = energy;
    }
// ...
}

但是通过getters/setters访问字段要好得多,这里可以实现spendenergy/gainenergy这样的方法来减少/增加能量量:

// class Person
public void setEnergy(int value) {
     this.energy = value;
}
public int getEnergy() {
     return energy;
}
public void spendEnergy(int delta) {
    this.energy -= delta;
}
public void gainEnergy(int delta) {
    this.energy += delta;
}

然后在sleep、eat、walk等中使用这些方法修改能量和重写方法walksleep等,以提供特定的值,例如:

// class Person
void eat() {
    System.out.println("eat");
    gainEnergy(3);
}
void walk() {
    System.out.println("walk");
    spendEnergy(3);
}

// class Student
void study() {
    System.out.println("study");
    spendEnergy(1);
}
void walk() {
    System.out.println("walk");
    spendEnergy(1);
}
// class StudentWorker
void sleep() {
    System.out.println("sleep");
    gainEnergy(2);
}
void study() {
    System.out.println("study");
    spendEnergy(2);
}
void work() {
    System.out.println("work");
    spendEnergy(3);
}

// walk from Student is used with energy spend 1
class Researcher extends Person {
    public Researcher() {
        super(8);
    }
// ...
}
 类似资料:
  • 本文向大家介绍Kafka 分区数可以增加或减少吗?为什么?相关面试题,主要包含被问及Kafka 分区数可以增加或减少吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 我们可以使用 bin/kafka-topics.sh 命令对 Kafka 增加 Kafka 的分区数据,但是 Kafka 不支持减少分区数。 Kafka 分区数据不支持减少是由很多原因的,比如减少的分区其数据放到哪里去?是删除,

  • 我整晚都在做这个,但是什么也没做出来。我希望我的代码对用户输入的所有数字求和,计算用户输入数字的次数。然后计算平均值。然后找到最大值和最小值,很容易就对了。是的,如果我被允许使用数组,但这是为了复习,我讨厌while循环。 这是我的密码。 以下是输出结果: 请输入一个整数:3您的数字之和为:3.0输入的值数为:1 请输入一个整数:2数字之和为:5.0输入的数值个数为:2 请输入一个整数:1数字之和

  • 问题内容: 我有一个看起来像这样的表: 并且我想计算出上一日期的column的增加/减少百分比。例如,结果将是这样的, 我已经搜寻并绞尽脑汁了几天。通常,我只是使用服务器端代码来完成此操作,但是现在我需要将其全部包含在查询中。 问题答案: 试试这个:

  • 问题内容: 自从我开始学习Java以来​​已经有3天了。我有这个计划,我不明白,在代码法和运营商。我什至不知道该怎么称呼(这些运算符的名称),谁能解释我的全部意思。 问题答案: 这些称为 前后递增/递减运算符 。 是相同的 是相同的 将运算符放在变量之前,首先要加1,然后使用新的值

  • 问题内容: 如何使用Java增加输出的WAV音频流的音量?我在使用各种Java TTS引擎和合成语音的输出量时遇到问题。有可以用来调高音量的API调用或doo- hickey.jar吗? 问题答案: 如果您使用的是Java Sound API,则可以使用MASTER_GAIN控件设置音量。

  • 问题内容: Java为什么要指定覆盖方法的访问说明符可以比覆盖方法允许更多但不能更少的访问?例如,超类中的受保护实例方法可以在子类中公开,但不能私有。 问题答案: 这是OOP中的基本原则:子类是父类的完整实例,因此必须至少提供与父类相同的接口。使受保护的/公共的东西不那么明显将违反这个想法;您可以使子类无法用作父类的实例。