编程练习?

时间:2010-07-17 16:29:05

标签: java

我做了这个练习,不是作业,我只是想解决:

  

我们管理一个有马的农场   在这个领域工作。

     

一匹马

     
      
  • 一个名字,
  •   
  • 最大金额   每周工作时间,
  •   
  • 金额   实际工作时间和
  •   
  • 表示她是否懒惰的字段   勤劳。
  •   
     

Horse类的所有属性   是私人的,他们没有制定者。   初始值通过   构造

     

Horse类有一个添加方法   一小时的实际工作。那种方法   每小时都叫一次(那匹马   作品)。在下周开始,   我们通过调用将该计数器重置为0   另一种不带参数的方法。

     

懒马不能超过34岁   小时/周,而努力工作的马   可以工作长达80个小时。

     

编码被屏蔽的Horse类   反对错误的工作时间数据。

     

你的主要方法将创造一匹马   并调用其方法,但数据   绝不能腐败,即。该   必须遵守工时限制。   例如,懒马的最大值   小时不能设置在34以上   工作小时数不能   大于最大值。

     

如果Horse类检测到尝试   设置不正确的数据,数据   保持不变(你打印一个   消息,以帮助您调试)。

正确数据的示例:

Name: "Blacky" 
lazy: no
max hours / week = 70
actual hours this week = 61

Name: "Sultan" 
lazy: yes
max hours / week = 30
actual hours this week = 1

损坏数据的示例(您的代码应该无法达到这种情况)

Name: "Georges" 
lazy: yes
max hours / week = 50 (wrong because lazy horses work max 34h/week)
actual hours this week = 51 (wrong because 51 > 50).

这是我的代码:

public class Horse {

    private String name;
    private int maximumAmount;
    private int amountWorked;
    private boolean isLazy;

    public Horse(String name, int maximumAmount, int amountWorked, boolean lasyOrHardworking) {
        this.name = name;
        this.maximumAmount = maximumAmount;
        this.amountWorked = amountWorked;
        this.isLazy = lasyOrHardworking;
    }

    void everyHour(){
        amountWorked = amountWorked + 1;
        System.out.println(amountWorked);

        if((isLazy == true)&&(amountWorked <= 34)){
            resetToZero();
        }
        if((isLazy == false)&&(amountWorked <= 80)){
            resetToZero();
        }
    }

    void resetToZero(){
        this.amountWorked = 0;
    }
}

和我的主要班级

public class MainHorse {
    public static void main(String args[]){
        Horse one = new Horse("Blacky", 34,35,true);
        one.everyHour();
    }
}

我的问题是我怎样才能在每次使用重置方法时获得我的方法,一般来说,我的代码有什么问题?

我更好,你可以帮助我

3 个答案:

答案 0 :(得分:1)

  

我的问题是如何才能得到我的   方法每小时做一次重置方法,   一般来说,我的错误   码?

尝试使用java.util.Timer

提出一些问题

次要细节:

错别字和拼写不一致会在某一天回来咬你(在Java中不太可能比不需要明确声明的语言),你应该坚持使用“懒惰”一词的正确拼写。

this.isLazy = lasyOrHardworking;

为什么不在参数中使用isLazy,而不是lasyOrHardworking

this.isLazy = isLazy;

我认为bool == true没有添加任何值,这对我来说更好看:

if(isLazy && (amountWorked <= 34))

答案 1 :(得分:1)

我认为你做错了是从everyHour()函数中调用resetToZero()。 我会每小时都返回一个bool来表示成功或失败。如果失败,它不会增加马的工作量,但打印调试消息。然后主代码可以检查它是否违反了马的限制。当周结束时,主代码也会调用resetToZero。

答案 2 :(得分:1)

你不应该回到零,只是不要增加工作时间。此外,如果这不是家庭作业,你有一些自由,所以我不会有最大小时和懒惰的自变量 - 这只是让你有机会让它们不同步。我会将命名常量用于maxLazyhours和maxHardworkinghours。

然后有一个名为IncrementHours的函数,只是说

if (lazy && hours < maxLazyhours) || hours < maxHardworkinghours)
   hours++;

这更简单,对吧?