我需要一个循环或一个嵌套循环吗?

时间:2017-10-12 14:57:35

标签: java arrays loops sorting for-loop

假设我有一个数组和一个布尔方法。如果所有正数出现在所有非正数(0)之前,则此布尔方法将返回true。否则,它将返回false值。 第一个数组newArrayTrue将返回一个真值,因为所有正数都出现在所有非正数和0之前。而在newArrayFalse中,它将返回一个false值,因为0出现在5之前,5是一个正数。

int[] newArrayTrue = {3,1,-4,0,-5};
int[] newArrayFalse = {3,1,-4,0,5};

public static boolean isPositiveFirst(int[] numbers) {

for (int i=0; i<numbers.length; i++) {
  for (int j=i+1; i<numbers.length; i++) {
    if (numbers[i] > 0  && (numbers[i+1] < 0 || numbers[i+1] == 0)) {
      return true;
    }
  }
}
return false;
}
}

我是否需要在布尔方法中使用嵌套的for循环,或者只在一个for循环中完成?我需要帮助我的条件,因为我没有真正得到它的问题。感谢任何帮助。

5 个答案:

答案 0 :(得分:3)

这应该足够了:

public static boolean isPositiveFirst(int[] numbers) {
    for(int i = 1; i < numbers.length; i++) {
       if(numbers[i] > 0 && numbers[i-1] <= 0) {
           return false;
       }
    }
    return true;
}

@Ryan还有一些功劳,因为他删除了我基于我的代码的答案。

答案 1 :(得分:1)

如果遇到0或负数,可以使用boolean变量encounterNegative并将其设置为true。然后继续迭代,如果找到正数,则该方法应返回false。如果循环结束,则该方法返回true。

这样的事情:

public static boolean isPositiveFirst(int[] numbers) {

    boolean encounteredNegative = false;
    for (int i = 0; i < numbers.length; i++) {
        if (numbers[i] <= 0) {
            encounteredNegative = true;
        } else {
            if (encounteredNegative) {
                return false;
            }
        }
    }
    return true;
}

答案 2 :(得分:0)

这个怎么样。

    private static boolean areAllPositiveFirst(int[] a)
    {
        boolean f=false,ans=true;
        for (int i = 0; i < a.length; i++)
        {
            if(f && a[i]>0)
            {
                ans=false;
                break;
            }
            if(a[i]<=0)
                f=true;
        }
        return ans;
    }

答案 3 :(得分:0)

作为给定答案的替代方法,使用IntStream可以执行以下操作:

dataSnapshot.child("isSent").getValue(Boolean.class)

答案 4 :(得分:0)

我看到Lyubomir Papazov已经提出了这个算法。我的实现只是一点点简洁:

public static boolean isPositiveFirst(int[] numbers) {
    boolean seenNonPositive = false;
    for(int i : numbers) {
        if(i < 1) seenNonPositive = true;
        else if(seenNonPositive) return false;
    }
    return true;
}