2017-06-17 108 views
-2

我是編程的新手。我正在嘗試創建一個能夠反向顯示數組的程序。 Plus還可以查找數組的偶數和奇數,計算總數並顯示偶數和奇數。該代碼的作品,但問題是,它也顛倒偶數和奇數數組,它顯示這些奇怪的零在這些數組中。我究竟做錯了什麼? 請另外提供解釋。謝謝!反向加偶數和奇數組

import java.util.Arrays; 
public class ArrayTest { 

    public static void main(String[] args) 
    { 
    int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 
    for (int i=0; i<array.length/2; i++) 
    { 
     int temp = array[i]; 
     array[i] = array[array.length-(1+i)]; 
     array[array.length-(1+i)] = temp; 
    } 
    System.out.println("Array after reverse: \n" + Arrays.toString(array)); 

    int even=0; 
    int odd=0; 
    int[] Even = new int[13]; 
    int[] Odd = new int[13]; 
    for (int i=0; i<array.length; i++) 
    { 
     if (array[i] % 2 == 0) 
     { 
      Even[i] = array[i]; 
      even++; 
     } 
     else 
     { 
      Odd[i] = array[i]; 
      odd++; 
     } 

    } 
    System.out.println("Even: "+even+" "); 
    System.out.println(Arrays.toString(Even)); 
    System.out.println("Odd: "+odd+" "); 
    System.out.println(Arrays.toString(Odd)); 

    } 
}  

的輸出是:反向後

陣列:

[13,12,11,10,如圖9所示,圖8,圖7,圖6,圖5,4,3,2,1]

即使:6

[0,12,0,10,0,8,0,6,0,4,0,2,0]

奇數:7

[13,0,11,0,9,0,7,0,5,0,3,0,1]

+2

而且你期待什麼樣的輸出是什麼呢?反向後 –

+0

陣列: [13,12,11,10,如圖9所示,圖8,圖7,圖6,圖5,4,3,2,1] 即使:6 [2,4,6, 8,10,12] 奇數:7 [1,3,5,7,9,11,13] – bilal

+0

我建議你找出不首先使用Java的步驟,然後將其轉換成代碼。 –

回答

0

您需要糾正邏輯

int[] Even = new int[(array.length/2)+1]; 
int[] Odd = new int[(array.length/2)+1]; 
for (int i=0; i<array.length; i++) 
{ 
    if (array[i] % 2 == 0) 
    { 
     Even[even] = array[i]; 
     even++; 
    } 
    else 
    { 
     Odd[odd] = array[i]; 
     odd++; 
    } 

} 

按照你代碼,你正在初始化奇數和偶數的大小爲13的數組,這是不正確的。

int[] Even = new int[13]; 
int[] Odd = new int[13]; 

所以,在默認情況下,EvenOdd陣列將由0值初始化。然後,您將按照主陣列設置值,其大小爲13(備用/偶數)。

== ==更新

因爲,你不想按相反的順序EvenOdd陣列。然後,您可以向上移動代碼。

>>Demo<<

+0

感謝您糾正我:)但我仍然不明白爲什麼它顯示偶數和奇數組相反? – bilal

+0

因爲,你正在使用'array'變量來分配'even'和'odd'變量,這是相反的順序 – Ravi

+0

我該如何糾正這個問題。你能否再解釋一下。謝謝! – bilal

0
  1. 您選擇逆轉陣列偶數和奇數。
  2. 對偶數和奇數組使用錯誤的索引。
  3. 如果您不想在輸出中看到零,請使用print in for語句。另一個解決方案 - 首先計算奇數和偶數,並創建具有確切大小的數組。

    import java.util.Arrays; 
    public class ArrayTest { 
    
        public static void main(String[] args) 
        {  
         int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 
    
         int even=0; 
         int odd=0; 
         int[] Even = new int[13]; 
         int[] Odd = new int[13]; 
    
         for (int i=0; i<array.length; i++) 
         { 
          if (array[i] % 2 == 0) 
          { 
           Even[even++] = array[i]; 
          } 
          else 
          { 
           Odd[odd++] = array[i]; 
          } 
    
         } 
         for (int i=0; i<array.length/2; i++) 
         { 
          int temp = array[i]; 
          array[i] = array[array.length-(1+i)]; 
          array[array.length-(1+i)] = temp; 
         } 
         System.out.println("Array after reverse: \n" + Arrays.toString(array)); 
    
    
         System.out.println("Even: "+even+" "); 
         System.out.println(Arrays.toString(Even)); 
         System.out.println("Odd: "+odd+" "); 
         System.out.println(Arrays.toString(Odd)); 
    
        } 
    } 
    
+0

很好的解釋。感謝您的幫助:) – bilal

0

您面對2個問題(我想是)

  1. 的奇數和偶數陣列也以相反的順序

    原因:第一個for循環顛倒'數組'並將結果存儲在數組本身中。所以,下一次當您嘗試使用「數組」來查找奇數/偶數時,實際上您正在使用反轉數組。

    解決方案:您可以將原始陣列分配給備份陣列,並使用該備份陣列查找奇數和偶數。您使用您的在第二個for循環奇數[I] =陣列[I],其似乎是在代碼中的邏輯錯誤:

  2. 不必要零

    原因。考慮的情況下:I的

    值:0 1 2 3 4 5 ...陣列12

    值[I]:1 2 3 4 5 6 ...的奇數13

    值[I]:1 0 3 0 5 0 ... 13

    值甚至[I]:0 2 0 4 0 6 ... 0

這意味着,內部的控制for循環使其流向if {}塊或else {}塊,而不是兩者。所以,當if(條件)滿足時,即使[i]數組也會被更新。但同時奇數[i]數組發生了什麼?它保留了原始值'0'。而已!

我希望下面的代碼可以幫助你:

import java.util.Arrays; 
public class A 
{ 
    public static void main(String[] args) 
    { 
    int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 
    int[] arr2 = new int[array.length]; // backup array 
    arr2=Arrays.copyOfRange(array,0,array.length); 
    for (int i=0; i<arr2.length/2; i++) 
    { 
    int temp = arr2[i]; 
    arr2[i] = arr2[arr2.length-(1+i)]; 
    arr2[arr2.length-(1+i)] = temp; 
    } 
    System.out.println("Array after reverse: \n" + Arrays.toString(arr2)); 
    int even=0; 
    int odd=0; 
    int[] Even = new int[13]; 
    int[] Odd = new int[13]; 
    for (int i=0; i<array.length; i++) 
    { 
    if (array[i] % 2 == 0) 
    { 
     Even[even] = array[i]; 
     even++; 
    } 
    else 
    { 
     Odd[odd] = array[i]; 
     odd++; 
    } 
    } 
    Even=Arrays.copyOfRange(Even,0,even); 
    Odd=Arrays.copyOfRange(Odd,0,odd); 
    System.out.println("Even: "+even+" "); 
    System.out.println(Arrays.toString(Even)); 
    System.out.println("Odd: "+odd+" "); 
    System.out.println(Arrays.toString(Odd)); 
} 
} 

注:我用Arrays.copyOfRange(排列,開始,結束)函數從複製數組中的某一部分從第一個位置開始。

輸出:

陣列之後反向:

[13,12,11,10,如圖9所示,圖8,圖7,圖6,圖5,4,3,2,1]

即使:6

[2,4,6,8,10,12]

奇數:7

[1,3,5,7,9,11,13]

希望這有助於:)

--Mathan馬達夫

+0

非常感謝。這是我需要的:) – bilal

+0

有趣的是,指定int backup_array [] = original_array是一種糟糕的編程方法,因爲一旦'original_array'被更改,backup_array也會隨着它是original_array的一個實例而改變。它總是很好地複製數組,而不是簡單地將它分配給臨時數組! –

+0

我正要問同樣的事情。通過複製數組,你的意思是聲明相同元素的另一個數組? – bilal