如果检查数组为null或为空的语句不起作用

时间:2019-03-31 18:02:27

标签: java

我的主要任务是工作(翻译):

  

编写一个方法,该方法从1d数组返回最小的数字   整数。

现在我必须做一个附带任务(粗略翻译):

  

添加一条if语句以检查数组是否为null或为空,以及是否为空   是,则返回0。

方法:

public static int smallestNumber (int[] array1) {

    int smallest = array1[0];

    if (array1 == null || array1.length == -1) {
       return 0;
    }

    else {
       for (int element : array1) {
          if (element < smallest) {
           smallest = element;
          }
       }
    }
return smallest;    
}

主要:

public static void main(String[] args) {
  int[] tab1 = {}; //empty array?
  int smallestNumber = smallestNumber(tab1);
  System.out.printf("The smallest number is: %d", smallestNumber);
}

如果我仅检查null,则该方法有效。但是我很困惑为什么它不能在空数组上工作。

int[] tab1 = {};

编辑:我也尝试使用array1.length == 0;

3 个答案:

答案 0 :(得分:3)

首先,数组的大小为非负数,因此array1.length不能为-1,而是与0进行比较。

第二,分配int smallest = array1[0];尝试访问空数组的第0个位置,这将导致java.lang.ArrayIndexOutOfBoundsException

因此,最后,将赋值移动到else块中的smallest并检查条件是否为空或空数组,然后再尝试访问任何数组值。

public static int smallestNumber (int[] array1) {

    int smallest;

    if (array1 == null || array1.length == 0) {
        return 0;
    }

    else {
        smallest = array1[0];
        for (int element : array1) {
            if (element < smallest) {
                smallest = element;
            }
        }
    }
    return smallest;
}

答案 1 :(得分:1)

public static int smallestNumber (int[] array1) {

    if (array1 == null || array1.length == 0) {
       return 0;
    }

    int smallest = array1[0];

       for (int element : array1) {
          if (element < smallest) {
           smallest = element;
          }
       }

    return smallest;    
}

答案 2 :(得分:1)

请尝试先检查null,因为先检查该null更安全。您还可以使用isEmpty()方法作为长度。

public static int smallestNumber (int[] array1) {

if (array1 == null) {
    return 0;
}

if (array1.isEmpty()) {
    return 0;
}

   int smallest = array1[0];
   for (int element : array1) {
      if (element < smallest) {
           smallest = element;
      }
   }
    return smallest;
}

或将其添加为替代项:

public static int smallestNumber (int[] array1) {

if (array1 != null) {
    if (array1.isEmpty()) {
        return 0;
    }

  int smallest = array1[0];

  for (int element : array1) {
      if (element < smallest) {
           smallest = element;
      }
   }
      return smallest;

   } else {
     return 0;
    }
}