【问题标题】:How can I make a new Array and copy all the postive elements from the other array in the new array and return it?如何创建一个新数组并从新数组中的另一个数组复制所有正元素并返回它?
【发布时间】:2020-03-18 19:52:09
【问题描述】:

此方法返回一个数组,其中包含参数数组中的正元素。 为此,计算数组中正元素的数量并将获得的值存储在变量中 整数类型的 nElements,声明大小为 nElements 的双精度数组输出,复制正元素 输入到数组输出中,并返回数组输出。如果数组中的所有元素都是非正数, 您的方法应该返回一个大小为 1 的数组,并且返回数组的唯一元素被分配 值 -1。

我的问题是,当我运行我的程序时,它在线程“main”java.lang.NegativeArraySizeException 中声明异常,我不知道如何取出它,只返回正元素。

Java 代码:

public static double [] partialPositiveArray(double [] in)

   {

   int nElements = 0;

   for(int i = 0; i < in.length; i++)
   {
     if(in[i] > 0)
     {
        nElements = (int)in[i];

     }
     else if(in[i] <= 0)
     {
        nElements = -1;
     }
  }
  double [] output = new double[nElements];


  for(int i = 0; i < in.length; i++)
  {
     output[i] = nElements;

  }

  return output;

  }

【问题讨论】:

  • 这一行中的失败者:nElements = -1;。将其更改为nElements -= 1;nElements = nElements - 1; 则不会出现错误,而只是对象的存储地址。但是您希望添加数组 in 中的所有正数,对吗?
  • 是的,我想要所有的正数
  • 对于负数你不想做什么?
  • 刚刚从新数组返回-1
  • 例如,如果它有 3 个负数,您是否希望新数组中有 3 个条目,每个条目都为 -1?

标签: java arrays element


【解决方案1】:

使用此代码,您将添加所有正数。此示例中的总和为 60.7,对于所有负数,它将在负数组中写入 -1。在这个例子中两次。

代码:

public class NegativeAndPositiveNumbers {
    public static void main(String[] args) {
        double[] arr = {25.0, -7.0, 10.7, 25.0, -64.0};
        System.out.println(partialPositiveArray(arr));

        int negative[] = negativeArray(arr);
        for (int i = 0; i < negative.length; i++){
            System.out.print(negative[i] + " ");
        }
    }

    public static double partialPositiveArray(double[] in) {
        double nElements = 0;

        for (int i = 0; i < in.length; i++) {
            if (in[i] > 0) {
                nElements += in[i];
            }
        }
        return nElements;
    }

    public static int[] negativeArray(double[] in) {
        int[] negativeWithZero = new int[in.length];
        int index = 0;

        for (int i = 0; i < in.length; i++) {
            if (in[i] <= 0) {
                negativeWithZero[index] = -1;
                index++;
            }
        }
        int[] negative = new int[index];

        for (int j = 0; j < negative.length; j++){
            negative[j] = negativeWithZero[j];
        }

        return negative;
    }
}

我认为它可以更容易地解决,但它仍然有效。我希望一切都清楚

【讨论】:

    【解决方案2】:
    public static double [] partialPositiveArray(double [] in) {
        return Arrays.stream(in)
                     .filter(d -> d > 0)
                     .toArray();
    }
    

    【讨论】:

    • 虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。在解释代码时,您也可能会以赞成票的形式从用户那里获得积极的反馈。
    【解决方案3】:

    当变量 nElements 为正时,您正在更改变量 nElements,您从 in[] 数组中获取值,当它为负时,您将其更改为 -1。

    for(int i = 0; i < in.length; i++)
           {
             if(in[i] > 0)
             {
                nElements = (int)in[i];
    
             }
             else if(in[i] <= 0)
             {
                nElements = -1;
             }
          }
    

    在您传递给函数的数组中,末尾似乎有一个负数,因此当控制遇到这个时,nElements 值为-1。在循环之后,您将实例化一个数组,其大小作为此变量

    double [] output = new double[nElements];

    因此你得到 NegativeArrayIndexException

    按要求解决:

     public static double [] partialPositiveArray(double [] in)
           {
    
            boolean gotPositive=false;
            int size=0;
            int j=0;
            for(int i = 0; i < in.length; i++)
            {
             if(in[i] >= 0)
             {
                size++;
                gotPositive=true;
             }
           }
           if(size==0 && !gotPositive){
               size=1;
           }
           double [] output = new double[size];
           for(int i = 0; i < in.length; i++)
           {
             if(in[i] >= 0)
             {
                output[j++]=in[i];
             }
          }
          if(!gotPositive){
              output[0]=-1;
          }
          return output;
          }
    

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 1970-01-01
      • 2021-10-16
      • 2012-12-16
      • 2018-02-08
      • 2021-10-16
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      相关资源
      最近更新 更多