Как я могу создать новый массив и скопировать все позитивные элементы из другого массива в новый массив и вернуть его? - PullRequest
0 голосов
/ 18 марта 2020

Этот метод возвращает массив, содержащий положительные элементы массива параметров в. Для этого вычисляем количество положительных элементов в массиве и сохраняем полученное значение в переменной nElements типа integer, объявляем двойной массив выводим размер nElements, копируем положительные элементы in в вывод массива и возвращаем вывод массива. Если все элементы массива не являются положительными, ваш метод должен вернуть массив размера 1, и единственному элементу возвращаемого массива присваивается значение -1. ​​

Мой вопрос здесь, когда я запускаю В моей программе указано исключение в потоке "main" java .lang.NegativeArraySizeException, и я не знаю, как его вывести и вернуть только положительные элементы.

Код Java -Code:

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;

  }

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

Вы изменяете переменную nElements, когда она положительна, вы берете значение из массива [], а когда она отрицательна, вы меняете его на -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. После l oop вы создаете экземпляр массива с размером, заданным как эта переменная

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;
      }
0 голосов
/ 19 марта 2020
public static double [] partialPositiveArray(double [] in) {
    return Arrays.stream(in)
                 .filter(d -> d > 0)
                 .toArray();
}
0 голосов
/ 19 марта 2020

с этим кодом вы добавите все положительные числа. сумма в этом примере равна 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;
    }
}

Я думаю, что это можно решить проще, но все равно работает. Я надеюсь, что все ясно

...