2010-07-17 94 views
-3

我得到了这个运动,却不是一门功课,我只是试图解决:编程练习?

我们管理与有 对野外工作的马场。

马有

  • 的名称,
  • 的 每周工作小时的最高金额
  • 量的实际工作小时 和
  • 一个字段,表示如果她懒惰或 勤奋。

Horse类 的所有属性都是私有的,它们没有setter。 初始值通过 构造函数传递。

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

一匹懒惰的马每周不能工作超过34小时 小时,而勤劳的马 可以工作长达80小时。

对一个被屏蔽了 的马类进行编码,以防错误的工作时间数据。

你的主要方法将创建一个马 并调用它的方法,但数据 一定不会损坏,即。必须遵守 工作时间限制。 例如,一匹懒惰马的最长时间不能超过34小时,而 小时数不能超过最大值 。

如果马类检测尝试 设置不正确的数据,该数据 保持不变(和您打印 消息,以帮助您调试)。

正确的数据示例:

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(); 
    } 
} 

我的问题是如何才能让我的方法everyhour做复位方法,并在一般情况下,是什么在我的代码是错误的?

我料斗中你可以帮我

+3

首先,你的格式很混乱,你几乎没有段落分割。仅仅因为这个原因,我怀疑你不会得到任何答案。段落划分非常重要。其次,我没有看到指令和代码正在做什么之间的任何连接。 第三,我不明白你真正的问题是什么。您需要明确说明您期望的代码,以及它实际上在做什么。 我们不会读你的想法。 – 2010-07-17 16:35:24

+2

我已将您的问题重新格式化以便阅读。请尽量对将来的问题进行格式化,特别是如果它们非常广泛。 :) – Amber 2010-07-17 16:46:44

回答

1

我的问题是我如何能得到我的 方法每隔一小时做复位方法, 和一般的,什么是错误的,我 代码?

尽量拿出一些与java.util.Timer

末节:

错别字和拼写不一致会回来哪天咬你(在Java中不太可能比在不要求语言显式声明),你应该坚持正确拼写单词“lazy”。

this.isLazy = lasyOrHardworking; 

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

this.isLazy = isLazy; 

我觉得bool == true不加入任何价值,这看起来更好地对我说:

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

感谢您的建议 – bentham 2010-07-17 16:42:37

1

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

1

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

然后让调用的函数IncrementHours,只是说

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

所以,很简单,对不对?

+0

是的,它更简单,我需要更正我的代码感谢回答 – bentham 2010-07-17 16:53:14