0

この方法を使用する必要があります:

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

double 配列内の負の数の数をカウントします。3 番目のパラメーターである sum を含めることができれば簡単に実行できますが、配列と int しか使用できません。私は完全に立ち往生しています。いくつか試してみましたが、うまくいきません。配列のサイズから ArrayIndexOutOfBounds まですべてを取得しましたが、正しい答えはありません。誰でもこれで私を助けてくれますか?

-編集-

正確な割り当ては次のとおりです。

代入 2 で行ったのと同様に、標準入力から一連の数値 (必ずしも整数ではない) を 0 が読み取られるまで読み取り、それらを配列に格納するプログラムを作成します。この部分は反復を使用して行われます。数が 100 を超えることはないと考えてよいでしょう。

次に、再帰を使用して、配列に格納されている最大数、負の数のカウントを計算し、正の数の合計を計算します。したがって、Assignment9 クラスに再帰メソッド findMax、countNegative、computeSumPositive を作成すると、これらはメイン メソッドによって呼び出されます。

具体的には、次の再帰メソッドを実装する必要があります (これらのメソッドにはループを含めないでください)。

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 に答える