Вы изменяете переменную 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;
}