从方法中提取属性

时间:2018-04-30 23:18:34

标签: java class methods constructor

由于我是Java的初学者,我有很多问题。对于我的大学,我必须编写健身应用程序。我们提供了一些提示,但大部分代码都是由我们创建的。任务的制定有点软弱,因此,我在解决任务时遇到一些问题。但就目前而言,我想告诉你,我必须做些什么。 我必须设置一个具有以下属性的“健身设备”课程:

  1. 名称
  2. 训练有素的肌群(另一类)
  3. max.trainingduration
  4. 每小时燃烧卡路里
  5. 除了这些属性外,还有一些方法,我必须实现:

    1. 构造
    2. int calorieconsumption(int minutes) - >在给定时间内(以分钟为单位)返回卡路里消耗的一次训练
    3. int calorieconsumption(int hours,int minutes) - >在给定时间内(小时和分钟)返回卡路里消耗的一次训练
    4. 布尔支持(String muscle) - >如果设备支持肌肉,则返回true
    5. 布尔支持(Musclegroup musclegroup) - >如果设备支持肌群,则返回true
    6. boolean needspower() - >如果设备需要电源,则返回true。
    7. 我创建了这样的类:

      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

1 个答案:

答案 0 :(得分:0)

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

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

方法适用于操作/算法/逻辑对于对象性质的影响

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

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

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

我想指出一些关于你的代码的事情:

  1. 我不认为max.trainingduration;将以我认为您想要的方式运作。这就是"属性' trainingduration'属于名为' max'的对象。我想你想要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方法。

  5. 我希望我已经回答了您的问题并为您提供了一些信心,让您向前迈进。获得自信并加深理解的最佳方式是进行实验。从小开始;编译运行修复,直到你有工作;做出小的渐进式改进;添加输出行以查看正在发生的事情以及发生的情况;花时间尝试假设情景;并反复重复这个循环。你将牢牢掌握阶级结构,以及属性和方法的作用。

    Viel Erfolg!