【问题标题】:Empty integer array in javajava中的空整数数组
【发布时间】:2019-01-11 00:00:38
【问题描述】:

编写一个函数,该函数接受一个数组作为输入并返回一个包含 2 个数字的数组。返回的数组包含来自输​​入的偶数之和和奇数之和。

如果任何输入为空,则应将其视为空数组

示例: 输入:
[30、18、2、83、20、71]
输出:
[70, 154]

输入:
[14、11、10、67、41]
输出:
[24, 119]

输入: [36、24、-82、29、44、-3、-100、-5、49] 输出: [-78, 70]

我写的函数是

public int[] getSumOfEvensAndOdds(int[] input) {
        
        int x[] = input;
        int even = 0, odd = 0;
        for (int i = 0; i < x.length; i++) {
            if (x[i] % 2 == 0)
                even += x[i];
            else
                odd += x[i];
        }
        int[] ans={even, odd};
        return ans;
    }

但是我应该如何合并空数组的部分呢?

【问题讨论】:

  • “我应该如何合并空数组的部分”是什么意思?
  • 空数组的结果是什么?你能总结出多少个元素?
  • 最简单的:if (input == null) return new int[2]; 更好一些,只需做for if (input != null) (注意:为什么需要x?)

标签: java arrays


【解决方案1】:

首先检查input 是否为null。如果是,请改为使用空数组:

int x[] = input == null ? new int[0] : input;

【讨论】:

  • 我不确定。我认为结果总是有两个元素:偶数元素的总和和奇数元素的总和。
  • @LuCio 会的。 x 只是求和功能的输入。
  • 好吧……我明白了……这不是结果。
【解决方案2】:

如果任何输入为空,则应将其视为空数组

为什么不只检查null 值?

public int[] getSumOfEvensAndOdds(int[] input) {
    int even = 0, odd = 0;
    if(null != input){
        for (int i: input) {
            if (0 == i % 2){
                even += i;
            } else{
                odd += i;
            }
        }
    }
    return new int[]{even, odd};
}

【讨论】:

    【解决方案3】:

    你需要这样的东西:

    public class Test {
    
    public static int[] getSumOfEvensAndOdds(int[] input) {
        int[]   def = {0,0};
    
        if (input != null && input.length!=0) {
            int x[] = input;
            int even = 0, odd = 0;
            for (int i = 0; i < x.length; i++) {
                if (x[i] % 2 == 0)
                    even += x[i];
                else
                    odd += x[i];
            }
            int[] ans = {even, odd};
            return ans;
        }
    
        return def;
    }
    
    public static void main(String [ ] args){
        int[]   ar = {10,20,30,40,50,60,71,80,90,91};
        int[]   res;
    
        res = getSumOfEvensAndOdds(ar);
        System.out.println("Result: " + res[0] + " " + res[1]);
    
        int[]   ar2 = {};
        res = getSumOfEvensAndOdds(ar2);
        System.out.println("Result: " + res[0] + " " + res[1]);
    
        int[]   ar3 = null;
        res = getSumOfEvensAndOdds(ar3);
        System.out.println("Result: " + res[0] + " " + res[1]);
    }
    

    }

    我使用 input!=null 来检查数组是否为空,使用 input.length!=0 来检查它的大小是否为 0。另外,在 main 方法中我举了三个例子。

    【讨论】:

      【解决方案4】:
      public int[] getSumOfEvensAndOdds(int[] input) {
      
              int x[] = input;
              int even = 0, odd = 0;
              for (int i = 0; i < x.length; i++) {
              if(x[i] != null)    //in case array contains elements which aren't null
              {
                  if (x[i] % 2 == 0)
                      even += x[i];
                  else
                      odd += x[i];
              }
              else   //in case the array has null array elements
              {
                 even = 0;
                 odd = 0;
              }
              int[] ans={even, odd};
              return ans;
          }
      

      【讨论】:

      • 感谢您的回复。正如您在检查数组是否为空时所说的那样,但问题是如果任何元素为空,则将其视为空数组。
      • 你尝试编译它吗? x[i] 具有 int 类型,因此它是原始类型,而不是引用。不能是null
      【解决方案5】:

      空数组可能会像这样返回return new int[]{}

      【讨论】:

        【解决方案6】:

        您的问题只是关于数组为空。快速搜索一下:How can I check whether an array is null / empty?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-24
          • 1970-01-01
          • 1970-01-01
          • 2020-11-10
          • 1970-01-01
          • 1970-01-01
          • 2015-05-13
          相关资源
          最近更新 更多