0

配列で負の数を見つけるための解決策を探していましたが、検索からこのコードのようなものを思いつきました。

public static void main(String args[]){
    int arrayNumbers[] = { 3, 4, 7, -3, -2};
    for (int i = 0; i <= arrayNumbers.length; i++){
        int negativeCount = 0;
        if (arrayNumbers[i] >= 0){
                negativeCount++;
    }
    System.out.println(negativeCount);
    }
}

上記のコードと比較して、配列内の負の数を見つけるためのより簡単または短い方法があるのではないかと思っていましたか?

4

4 に答える 4

8

マイナス記号をカウントする Java 7 文字列ベースのワンライナー:

System.out.println(Arrays.toString(array).replaceAll("[^-]+", "").length());

Java 8 ストリームベースの方法:

System.out.println(Arrays.stream(array).filter(i -> i < 0).count());

コードに関しては、いくつか問題があります。

  • 要素のインデックスは気にしないので、代わりにforeach 構文を使用します
  • ループ でcount 変数のスコープを宣言します。
    • 反復ごとにゼロに設定され続け、
    • 正しいカウントが含まれていたとしても、それを返す必要がある範囲外 (ループ内のみ) になるため、使用できませんでした (ループ後)。
  • 正しいテストを使用してnumber < 0ください (コードは負でない>= 0数をカウントします)

これを試して:

public static void main(String args[]) {
    int[] array = { 3, 4, 7, -3, -2};
    int negativeCount = 0;
    for (int number : array) {
        if (number < 0) {
            negativeCount++;
        }
    }
    System.out.println(negativeCount);
}
于 2012-10-01T13:24:01.103 に答える
2

コードに関するいくつかの問題:

  • の終了条件forは範囲外の例外を生成します (配列はゼロベースのインデックスを使用します)
  • の範囲negativeCountfor
  • ネガティブチェックが間違っている

少し短いバージョンでは extended を使用しますfor:

int negativeCount = 0;
for (int i: arrayNumbers)
{
    if (i < 0) negativeCount++;
}

より短いバージョンの場合 (ただし、おそらく読みにくい)、 を削除しforます{}

int negativeCount = 0;
for (int i: arrayNumbers) if (i < 0) negativeCount++;
于 2012-10-01T13:21:37.770 に答える
0

あなたのnegativeCountはあなたのループの外側で宣言されるべきです..また、System.out.println(negativeCount)繰り返しごとに出力されるので、ループの外側に移動することもできます..

そして、強化されたforループを使用できます

public static void main(String args[]){
    int arrayNumbers[] = { 3, 4, 7, -3, -2};

    int negativeCount = 0;
    for (int num: arrayNumbers) {
        if (num < 0){
                negativeCount++;
        }

    }
    System.out.println(negativeCount);
}
于 2012-10-01T13:22:55.283 に答える
0

foreach 構文を使用すると、少し短くなります。

 int negativeCount = 0;
 for(int i : arrayNumbers)
 {
      if(i < 0)negativeCount++;
 }
于 2012-10-01T13:23:10.967 に答える