0

我需要使用这种方法:

public static int countNegative(double[] numbers, int count){ }

计算双精度数组中负数的数量。如果我可以包含第三个参数 sum,我可以很容易地做到这一点,但我只能使用数组和一个 int。我完全被困住了。我已经尝试了几件事,但无法做到正确。我已经得到了从数组大小到 ArrayIndexOutOfBounds 的所有内容,但从来没有正确的答案。谁能帮我解决这个问题?

-编辑-

那么这里是确切的任务:

编写一个程序,从标准输入读取一系列数字(不是必需的整数),直到读取到 0,并将它们存储在一个数组中,类似于您在赋值 2 中所做的。这部分是使用迭代完成的。您可以假设不会有超过 100 个数字。

然后计算存储在数组中的最大数,负数的计数,并使用递归计算正数的总和。因此,您将在 Assignment9 类中创建递归方法 findMax、countNegative 和 computeSumPositive,它们将由 main 方法调用。

具体来说,必须实现以下递归方法(这些方法不应包含任何循环):

public static double findMax(double[] numbers, int count)  -> It finds the maximum number in the array, count is the number of elements

在数组中

public static int countNegative(double[] numbers, int count) -> 计算负整数

public static double computeSumPositive(double[] numbers, int count) -> 对正整数求和

findMax() 很简单:

public static double findMax(double[] numbers, int count){
        if(numbers.length - 1 == count)
            return numbers[count];
        else 
            return Math.max(numbers[count], findMax(numbers, count+1));
    }

这是我最近对 ​​countNegative 的尝试。它只返回 99(我用 100 个元素初始化了数组):

public static int countNegative(double[] numbers, int count){
        int i=0;
        if(numbers[count]<0)
            i=1;
        if(numbers.length-1==count)
            return count;
        else
            return i+countNegative(numbers,count+1);
     }

如果我能算出这个负数,我应该能够算出 computeSumPositive。

计数可以是你需要的任何东西。我更多地将它用作 findMax 中的索引。

4

5 回答 5

2

有什么用count?如果它是有意义的index

public static int countNegative(double[] numbers, int index)
{
    if(index == numbers.length) return 0;
    return (numbers[index] < 0 ? 1 : 0) + countNegative(numbers, index + 1);
}

并这样称呼它:

int count = countNegative(array, 0);
于 2013-03-28T18:19:29.990 回答
1

使用int参数作为numbers数组的索引。确定当前索引的值是否为负(此处为 0 或 1)。然后返回该 0/1 计数和查看下一个索引位置的递归调用的总和。基本情况是当你跑过数组的末尾时,它返回 0。

于 2013-03-28T18:09:51.130 回答
1
public static int countNegative(double[] numbers, int count){  
   if(count == numbers.length){  
        return 0;  
    }  
    int sum = countNegative(numbers, count + 1);  
    if(numbers[count] < 0){  
          sum++;  
    }  
    return sum;  
}

您调用此方法:countNegative(numbers, 0);
count将用作递归的基本条件。您将结果返回堆栈

例子:

double a[]={-12.0,1.0,0.0,23.0,-23.0,-9.0};  
System.out.println(countNegative(a, 0));  

我进入3控制台

于 2013-03-28T18:10:43.793 回答
0

首先为具有 0 个元素的数组实现它。用于 1 个元素的数组。对于更多的数组,使用以前的结果...

于 2013-03-28T18:09:54.627 回答
0

这是它的工作方式

public static int countNegative(double[] numbers){
    int result = numbers[0] < 0 ? 1 : 0;

    if(numbers.length > 1) {
        result += countNegative(Arrays.copyOfRange(numbers, 1, numbers.length));
    }

    return result;
}

由于递归的工作方式,您不需要 count 参数。当您使用数组调用该函数时,它首先确定第一个元素是否小于零,使其为负数。接下来,它检查数组是否有多个元素,如果有,它会使用数组的第一个元素以外的所有元素调用自身,并将其添加到结果中。

之后,它返回结果,这取决于它是否在递归调用中,要么将其添加到它上面的调用结果中,要么将其返回给调用它的人。

于 2013-03-28T18:38:14.850 回答