【问题标题】:Java, method to insert an Object on an Array, returning a booleanJava,在数组上插入对象的方法,返回一个布尔值
【发布时间】:2012-12-11 02:19:58
【问题描述】:

我很难理解作为 Java OOP 介绍项目的一部分分配给我的作业。所有名称都已更改,未完全翻译。 我被要求完成以下方法:

public boolean insertHorse(Horse horse) {
return true;
}

方法签名不能更改,我应该将马添加到方法所在类的马数组中,如果插入成功则返回true,否则返回false。 所以这就是我所做的:

    public boolean insertHorse(Horse horse) {

    //Create a temp array with length equal to h
    Horse[] temp = new Horse[this.horses.length+1];

    //copy the horses to the temp array
    for (int i = 0; i < horses.length; i++){
        temp[i] = horses[i];
    }

    //add the horse on the temp array
    temp[temp.length-1] = horse;

    //change the reference of the old array to the temp one
    veiculos = temp;
    return true;

我的问题是,这如何以及为什么会给出错误?我确实对农场的马匹数量有限制,但是我可以(并且正在计划)在调用该方法之前对其进行检查。这是我的坏习惯吗?

致以最诚挚的问候, 若昂席尔瓦

【问题讨论】:

  • 您可以“正确”实现该功能,只需返回“false”而不做其他任何事情。
  • @HotLicks 然后我会失去返回真实的可能性,我想在分配的上下文中我必须检查我是否在数组中允许的马的最大值,如果我是 - > 返回错误
  • 它仍然会满足“契约”——不变量会被保留。

标签: java arrays validation boolean


【解决方案1】:

我想不出任何理由这应该返回 false,除了马的数量限制。虽然理论上如果马太多,你可能会用完堆空间,但这种情况可能会导致你的程序崩溃。

最好将检查马匹的数量放在这个函数中而不是在它之外。这样一来,就不会意外插入超过允许数量的马。

【讨论】:

  • 我可以在里面进行检查,除了运行 OutOfMemory 之外,这是我认为返回 false 的唯一“原因”。但我相信在打电话之前检查它们会更有意义,因为我还有一些与马匹无关的事情要检查,但他们的“公司”(名称已更改但想法相同)
【解决方案2】:

您假设总会有足够的内存来分配一个数组,并为另外一个Horse 分配空间。

如果抛出OutOfMemoryError,则这种情况不成立。

【讨论】:

  • 有道理,但考虑到这一点,如果抛出“OutOfMemoryError”,它不会崩溃而不是返回false吗?
  • 不是马上,或者至少,如果你抓住了它。但是,在记录错误或将其呈现给用户之后关闭程序可能是个好主意。
  • 一直在寻找这个,即使我像你说的那样抓住它,程序也必须结束,而这不在作业中考虑。我相信这比其他的解释更多,因为问题是真的,它什么时候应该返回错误。尽管如此,还是感谢您的回答;)
猜你喜欢
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 2017-07-09
  • 1970-01-01
  • 2018-10-10
  • 2012-11-03
相关资源
最近更新 更多