【问题标题】:What do I return if there is no numerical solution for my int returning method to find?如果我的 int 返回方法找不到数值解,我应该返回什么?
【发布时间】:2014-05-31 12:37:21
【问题描述】:

这是我在数组中查找单个副本的方法。当数组没有重复时我应该返回什么?

public int findDuplicate(int[] array) {
    Arrays.sort(array);
    int duplicate = 0;
    for(int i = 0; i < array.length; i++)
    {
        if(array[i] == duplicate)
        {
            return duplicate;
        }
        duplicate = array[i];
    }
    return ???;
}

【问题讨论】:

  • 你可以让它返回一个Integer(因此返回NULL)而不是一个原始类型。或者让它抛出一个异常。
  • 你应该把它分成两种方法——重复和查找重复。还要记住,这会将原始数组排序为通过引用传递的数组。
  • 通常-1 是一个不错的选择
  • -1 是我通常会选择的。特别是因为我正在处理的数组中只有正数,但是如果需要,如果有一个无法处理负数的方法,感觉很草率。
  • 返回索引,而不是值

标签: java int return


【解决方案1】:

想到了三种可能的解决方案:

  1. 如果没有重复,则返回匹配索引或 -1。如果返回重复值,则无法返回 -1,因为它可能是 -1。

  2. 使用Integer 并返回null。我个人不喜欢那种 API。

  3. 将您的方法拆分为boolean hasDuplicate()int getDuplicate(),如果没有重复则抛出异常。这感觉不对,因为因为一切正常而引发异常是很奇怪的。

您可能还想更改代码的一些细节:

  • 在排序之前复制数组,这样调用者的东西就不会被修改
  • 记录角落案例。找到哪个重复项?首先?最后一个?

【讨论】:

  • 如果你返回 Integer 并且在某个地方不小心为 int 赋值,编译器不会因为自动拆箱而报错,但程序将有机会因 NullPointerException 而崩溃...
  • 这就是为什么(引用)我个人不喜欢那种 API。
【解决方案2】:

生成并返回重复值的数组。如果它的大小为零,则没有找到重复项。

【讨论】:

  • 好主意,但我认为索引重复/重复的信息不应该丢失。带有index =&gt; value 的地图会更好。
  • @atamanroman 作者已经在更改初始数组,所以我相信他并不关心索引信息:)
【解决方案3】:

我能想到三种可能的解决方案:

  1. 您可以返回一个该方法在正常情况下永远不应该返回的值,例如 -1 在您的情况下。
  2. 您可以将返回类型更改为Integer 并返回null。自动装箱和拆箱可以简化进行此更改所需的工作。
  3. 您可以抛出异常。

【讨论】:

  • 在这种特殊情况下返回 -1 是错误的,请参阅我的回答。
【解决方案4】:

-1 是最好的选择。或者添加另一种方法来检测数组中是否存在重复。

【讨论】:

  • [-1, -1, 1, 2, 3] 会发生什么?
猜你喜欢
  • 2015-01-02
  • 2010-10-15
  • 2021-12-24
  • 2020-08-27
  • 1970-01-01
  • 2022-12-06
  • 2015-12-23
  • 2012-02-20
  • 1970-01-01
相关资源
最近更新 更多