假设我有一个数组和一个布尔方法。如果所有正数出现在所有非正数(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循环中完成?我需要帮助我的条件,因为我没有真正得到它的问题。感谢任何帮助。
答案 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;
}