Java 如果我的int返回方法找不到数值解,我该返回什么?

Java 如果我的int返回方法找不到数值解,我该返回什么?,java,int,return,Java,Int,Return,这是我在数组中查找单个副本的方法。当数组没有重复项时,我应该返回什么 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;

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

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 ???;
}
public int findDuplicate(int[]数组){
数组。排序(数组);
重复整数=0;
for(int i=0;i
我可以想出三种可能的解决方案:

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

  • 我可以想出三种可能的解决办法:

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

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

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

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

  • boolean hasdeplicate()
    int getDuplicate()
    中拆分方法,如果没有重复项,则引发异常。这感觉是错误的,因为提出一个例外,因为一切都很好,是相当奇怪的

  • 您可能还需要更改代码的某些详细信息:

    • 在排序之前复制数组,这样调用方的内容就不会被修改
    • 记录角落案例。找到了哪一个副本?第一个?最后一个

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

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

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

      • boolean hasdeplicate()
        int getDuplicate()
        中拆分方法,如果没有重复项,则引发异常。这感觉是错误的,因为提出一个例外,因为一切都很好,是相当奇怪的

      • 您可能还需要更改代码的某些详细信息:

        • 在排序之前复制数组,这样调用方的内容就不会被修改
        • 记录角落案例。找到了哪一个副本?第一个?最后一个


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

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

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

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

        您可以让它返回一个
        整数(从而返回NULL),而不是原始类型。或者让它抛出一个异常。您应该将其分为两个方法—Has duplicate和find duplicate。还请记住,这会将原始数组按引用传递的数组进行排序。通常
        -1
        是一个很好的选择,我通常会选择1。特别是我正在处理的数组中只有正数,但是如果需要的话,使用一个无法处理负数的方法会让人感觉很草率。返回索引,而不是值您可以让它返回一个
        整数(从而返回NULL),而不是原始类型。或者让它抛出一个异常。您应该将其分为两个方法—Has duplicate和find duplicate。还请记住,这会将原始数组按引用传递的数组进行排序。通常
        -1
        是一个很好的选择,我通常会选择1。特别是当我处理的数组中只有正数时,如果需要的话,使用一种无法处理负数的方法会让人感觉很草率。在这种特殊情况下,返回索引而不是值返回-1是错误的,请参阅我的答案。在这种特殊情况下,返回-1是错误的,查看我的答案。如果您返回
        Integer
        并在某个地方意外地将值赋给
        int
        ,编译器不会因为自动取消装箱而抱怨,但程序将有机会使用NullPointerException崩溃…这就是原因(引用)我个人不喜欢那种API。如果您返回
        Integer
        并在某个地方意外地将值赋给
        int
        ,编译器不会因为自动取消装箱而抱怨,但程序将有机会被NullPointerException压碎……这就是为什么(引用)我个人不喜欢那种API。好主意,但是我认为那些索引是重复的信息不应该丢失。带有
        index=>value
        的映射会更好。@atamanroman的作者已经在修改初始数组,所以我相信他并不关心索引信息:)好主意,但我认为索引重复的信息不应该丢失。带有
        index=>值的映射会更好。@atamanroman的作者已经在修改初始数组,所以我相信他并不关心索引信息:)
        [-1,-1,1,2,3]
        会发生什么?
        [-1,-1,1,2,3]
        会发生什么?