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语法
  • 在循环 声明计数变量的范围,否则
    • 每次迭代它都会被设置为零,并且
    • 即使它确实包含正确的计数,您也无法使用它,因为它超出了您需要返回它的范围(仅在循环内部)(在循环之后)
  • 使用正确的测试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

A few issues with the code:

  • the terminating condition in the for will produce an out of bounds exception (arrays use zero-based index)
  • the scope of negativeCount is within the for only
  • the negative check is incorrect

A slightly shorter version would use the extended for:

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

For a shorter version (but arguably less readable) eliminate the for's {}:

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 回答