2012-12-05 36 views
1

整數數組已給出。偶數應該在偶數索引中,奇數應該在奇數索引中。你必須檢查給定的數組是否滿足該條件。以下使用java的場景的最佳解決方案?

我的實現是這裏....

public void isSatisfied(int [] arr){ 

    for(int i=0;i<arr.length;i++){ 

     int r_val=arr[i]%2; 
     int r_index=i%2; 

     if((r_val==1)&&(r_index==1)){ 

      if(i==arr.length-1){ 
       System.out.println("yes"); 
      } 
      continue; 
     } 
     else if((r_val==0)&&(r_index==0)){ 
      if(i==arr.length-1){ 
       System.out.println("yes"); 
      } 
      continue; 
     } 
     else{ 
      System.out.println("no"); 
      break; 
     } 
    } 
} 

這將是最好的實現?

回答

4

必須甚至特定索引和索引處的值的總和,否則陣列不滿足你的條件:

public boolean isSatisfied(int[] arr) 
{ 
    for (int i = 0; i < arr.length; i++) 
    { 
     if ((i + arr[i]) % 2 != 0) 
      return false; 
    } 
    return true; 
} 
+2

只是爲了挑選:如果您接近Integer.MAX_VALUE,則這很危險:P – schippi

1
public void isSatisfied(int [] arr){ 

    for(int i=0;i<arr.length;i++){ 

     int r_val=arr[i]%2; 
     int r_index=i%2; 

     if(r_val!=r_index){ 
      System.out.println("no"); 
      return; 
     } 
    } 
    System.out.println("yes"); 
} 
1

「最佳」往往是意見的排隊。您的代碼已經足夠好了,下面是一些提示:

1)不要將邏輯與演示文稿混合。在循環中,將狀態(數組是否正確)保存爲布爾變量。在循環之後,根據變量打印你想要的任何東西(這樣你就不會再重複幾次「是」(後面也許是一個「否」),這會讓我感到困惑。

2)如果你使用if-else-if構造,不需要continue。使用另一種形式來提高可讀性。

0

讓一個名爲isX的方法返回boolean更有意義。

public boolean isSatisfied(int[] arr) { 
    for (int i = 0; i < arr.length; i++) { 
     if (i % 2 == 0 && arr[i] % 2 != 0) 
      return false; 
     if (i % 2 == 1 && arr[i] % 2 == 0) 
      return false; 
    } 
    return true; 
} 
0

這只是你的代碼的一點修改版本。 package com.mtk;

公共類ArrayTest中{

public static void main(String[] args) { 
     int[] arr = {2,3,4,5,6};   
     isSatisfied(arr); 
    } 

    private static void isSatisfied(int[] arr) { 
     // TODO Auto-generated method stub 
     for (int i = 0; i < arr.length; i++) { 
      if(i%2 == 0 && arr[i]%2 == 0) ; // do nothing 
      else if (i%2 == 1 && arr[i]%2 == 1) ; // do nothing 
      else { 
       System.out.println("No"); 
       return; 
      } 
     } 
     System.out.println("Yes"); 
    } 
}