计算数组中的负数

时间:2012-10-01 13:18:07

标签: java negative-number

我正在寻找解决方案来找到数组中的负数,我想出了类似于搜索代码的内容。

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 个答案:

答案 0 :(得分:6)

基于java 7字符串的单行计算减号:

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

基于Java 8流的方式:

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

关于你的代码,它有一些问题:

  • 由于您不关心元素的索引,请使用foreach syntax而不是
  • 在循环中声明计数变量的范围,否则
    • 每次迭代都会设置为零,
    • 你不能使用它,即使它确实包含正确的计数,因为它将超出范围(只在循环内)你需要返回它(在循环之后)
  • 使用正确的测试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);
}

答案 1 :(得分:2)

代码的一些问题:

  • for中的终止条件将产生越界异常(数组使用从零开始的索引)
  • negativeCount的范围仅在for
  • 范围内
  • 否定检查不正确

略短的版本会使用扩展的for

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

对于较短的版本(但可读性较差),取消for的{​​{1}}:

{}

答案 2 :(得分:0)

你的negativeCount应该在你的循环之外声明。另外,你可以将你的System.out.println(negativeCount)移到你的循环之外,因为它会为每次迭代打印..

您可以使用增强型 - 循环

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);
}

答案 3 :(得分:0)

使用foreach语法稍微缩短一点:

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