【问题标题】:Extract attributes from methods从方法中提取属性
【发布时间】:2018-04-30 23:18:33
【问题描述】:

由于我是 Java 初学者,所以我有很多问题。对于我的大学,我必须编写一个健身应用程序。我们有一些提示,但大部分代码将由我们创建。任务的制定有点糊涂,因此,我在解决任务时遇到了一些问题。但是现在,我想告诉你,我必须做什么。 我必须使用此属性设置一个“健身器材”类:

  1. 姓名
  2. 类型
  3. 受过训练的肌肉群(另一类)
  4. max.trainingduration
  5. 每小时消耗的卡路里

除了这个属性,还有一些方法,我必须实现:

  1. 构造函数
  2. int calorieconsumption (int minutes) -> 返回给定时间内一次训练的卡路里消耗量(以分钟为单位)
  3. int calorieconsumption (int hours, int minutes) -> 返回给定时间(小时和分钟)内一次训练的卡路里消耗
  4. 布尔支持(弦肌)-> 如果设备支持肌肉,则返回 true
  5. 布尔支持(肌肉群肌肉群) -> 如果设备支持肌肉群,则返回 true
  6. boolean needspower() -> 如果设备需要电源,则返回 true。

我是这样创建的:

public class Fitness-Equipment {

    private String name;
    private String type;
    private Musclegroupe mousclegroupe;
    private int max.trainingduration;
    private int burnedcaloriesperhour;
    boolean power;

    public Fitness-Equipment(String name, String type, Musclegroupe mousclegroupe, int max.trainingduration, int burnedcaloriesperhour) {
        this.name = name;
        this.type = type;
        this.mousclegroupe = mousclegroupe;
        this.max.trainingduration = max.trainingduration;
        this.burnedcaloriesperhour = burnedcaloriesperhour;
    }

    //Setter & Getter for all attributes above//

    public int calorieconsumption (int trainingduration) {
        return (burnedcaloriesperhour =  trainingduration * (burnedcaloriesperhour / 60));
    }

    public boolean supports (String muscle) {
        return (muskelgroupe.contains(muscle));
    }

    public boolean supports (Musclegroupe musclegroupe) {
        return (this.musclegroupe.equals(musclegroupe));
    }

    public boolean needspower () {
        return (power = true);
    }

}

我是这样实现的吗?有时我不确定是否必须为我的类添加一些属性,或者这些方法是否会为我做这些。最大的问题是,任务没有很好地制定,所以我在解决它们时非常没有安全感。对不起我的英语,它不是我的母语,代码是用德语写的,所以我不得不翻译它:D

【问题讨论】:

  • 您是否已经尝试编译您的代码?
  • Stackoverflow 问题询问有关“如何进行”以及您的代码是否“好”的建议,这将为您赢得负面声誉。你现在得到了通行证,因为你显然是新人。我建议您在声誉下降之前阅读 stackoverflow 如何提问页面。

标签: java class methods constructor


【解决方案1】:

如果我正确理解了您的问题,那么我会说您是在正确的轨道上。 (但请参阅下面有关您的代码的一些反馈。)

属性适用于数据的价值与对象的性质有关的事物

方法用于操作/算法/逻辑对对象的性质很重要的事情

属性只有在被赋予特定值时才有意义,通常是在对象实例化时。 (但是,该值肯定会在实例化对象的整个生命周期内发生变化。)方法在对象实例化之前完全定义(即,它们是为类定义的),并且不会改变。 (尽管它们的确切输出和效果当然会根据不同的输入而有所不同。)

因此,以您的班级为例,burnedcaloriesperhour 之类的属性适合作为属性,因为它是定义特定健身器材的一部分,而calorieconsumption() 之类的东西是适合作为一种方法,因为计算的逻辑是不变的,并且对于所有健身器材都是相同的。

这有很多细微差别。有些属性变化很快;某些属性在对象实例化时未定义,仅在调用此或该方法后才取值; class constants 类似于属性,但对于该类的所有对象具有相同的值;还有很多很多。但是,您学习 Java 的一部分将获得一个不断扩展的概念上下文来理解这些细微差别。

我确实想指出一些关于您的代码的事情:

  1. 我认为max.trainingduration; 不会像我认为的那样工作。这就是说“属于名为'max'的对象的属性'trainingduration'。我想你想要maxTrainingduration或类似的东西。

  2. 代码 return (power = true); 将 (a) 设置 power 等于 true,并且 (b) 始终返回 true。我想你的意思是return (power == true);

  3. 代码return (burnedcaloriesperhour = trainingduration * (burnedcaloriesperhour / 60));每次调用都会改变burnedcaloriesperhour的值;我想你想要的只是返回计算trainingduration * (burnedcaloriesperhour / 60)

  4. 我不清楚您的代码注释 //Setter & Getter for all attributes above// 是否是未显示的 setter 和 getter 方法的替代品,或者它是否旨在将其下方的方法标识为 setter 和 getter 方法。如果它是未显示的方法的替代,那很好。如果是对它下面的方法的评论,我想指出它们实际上并不是 setter 和 getter 方法。

我希望我已经回答了您的问题,并为您提供了前进的信心。获得信心和加深理解的最佳方法是进行实验。从小处着手;编译-运行-修复,直到你有一些工作;进行小的增量改进;添加输出行以查看正在发生的事情以及发生的位置;花时间尝试假设情景;并一遍又一遍地重复这个循环。您将牢牢掌握类结构以及属性和方法的作用。

维尔厄弗格!

【讨论】:

  • Getter & Setter 行仅声明,我在那里创建了它们,但我不想在 Stackoverflow 中为此编写整个代码。是的,你的小费和其他人的小费帮助了我很多!真的就像大家说的那样->边做边学:)
猜你喜欢
  • 2018-07-13
  • 2023-03-11
  • 2020-02-11
  • 2021-10-02
  • 1970-01-01
  • 2021-03-24
  • 2011-09-16
  • 2016-02-06
  • 2021-03-27
相关资源
最近更新 更多