2017-10-12 112 views
1

比方說,我有一個數組和布爾方法。如果所有正數都出現在所有非正數(包括0)之前,則此布爾方法將返回true。否則,它將返回一個錯誤的值。 第一個數組newArrayTrue將返回一個真值,因爲所有正數都出現在所有非正數和0之前。而在newArrayFalse中,它將返回一個錯誤值,因爲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循環來完成?我需要我的條件幫助,因爲我真的不知道它有什麼問題。感謝任何幫助。

回答

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,因爲他刪除了這是我根據我的代碼他的答案。

+0

是的,謝謝你的幫助! –

+1

實際上,您不需要檢查數組是否更短或等於1。在這種情況下,它不會進入循環,無論如何返回true ... –

+0

@PerHuss是的,你是正確的,謝謝。 –

1

如果您遇到0或負數,您可以使用布爾變量impairedNegative並將其設置爲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; 
} 
+0

比方說,我只能用一個布爾值方法,而不是創建一個新的方法。在當前的布爾方法裏面我該做些什麼? –

+0

@宿命的な孤立遇到負數不是一個方法,它是一個變量。 – hellyale

+0

我看了兩遍後才知道它。我很抱歉。 –

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

作爲替代給出答案,使用IntStream你可以這樣做:

public static boolean isPositiveFirst(int[] numbers) { 
    int k = IntStream.range(0, numbers.length).filter(i -> numbers[i]<1).findFirst().orElse(-1); 
    if(k < 0) 
     return true;   
    else 
     return IntStream.of(Arrays.copyOfRange(numbers, k, numbers.length)).filter(i-> i>0).count() <1; 
} 
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; 
} 
相關問題