2012-08-08 198 views
1

請幫助我。我想掃描array1通過array2的元素,並忽略array2的元素,如果它在array1中找到。所以水果清單將只剩下。但輸出顯示:球,鉛筆。我希望它只顯示水果中的元素。感謝您的幫助比較數組元素

import java.util.*; 
public class CountFruits 
{ 
    public static void main(String args[])throws Exception 
    { 
     String array1[] = {"apple", "mango", "orange", "banana", "ball", "pencil"}; 
     String array2[] = {"ball", "pencil"}; 
     List<String> fruits = new ArrayList<String>(); 
     for(int x = 0; x < array1.length; x++) 
     { 
      for(int y = 0; y < array2.length; y++) 
      { 
       if(array1[x].equals(array2[y])) 
       { 
        System.out.println(array1[x] + "\t" + array2[y]); 
        if(!fruits.contains(array1[x])) 
        { 
         fruits.add(array1[x]); 
        } 
       } 
      }//end for 
     }//end for 
     System.out.println("fruits: " +fruits); 
    } 
} 

回答

1

if語句如果(數組1 [X] .equals(數組2 [Y]))將僅是球和鉛筆真,所以水果陣列只會增加球和鉛筆。 你可以設置水果數組來保存所有的數組1,然後,如果你的if語句是真的,從數組中去掉那個元素。

或者,你可以設置一個布爾值isFruit = true(在外循環中)。 然後,如果if語句if(array1 [x] .equals(array2 [y]))通過,則將isFruit設置爲false。 內循環迭代後,如果isFruit爲true,則將其添加到水果數組中。

for(int x = 0; x < array1.length; x++) 
{ 
    boolean isFruit = true; 
    for(int y = 0; y < array2.length; y++) 
    { 
     if(array1[x].equals(array2[y])) 
     { 
      System.out.println(array1[x] + "\t" + array2[y]); 
      isFruit = false; 
     } 
     if(isFruit) 
     { 
      fruits.add(array1[x]); 
     } 
    }//end for loop 
}//end for loop 
+0

感謝檢查。我明白了邏輯,但我仍然無法做到。語法不太好。我甚至試圖使用你的代碼,但它仍然輸出球,鉛筆而不是水果 – 2012-08-08 11:46:16

2

您需要的array1[x]添加到列表中,如果它不是在array2[x]

if (array1[x].equals(array2[y])) { 
    System.out.println(array1[x] + "\t" + array2[y]); 
} else { 
    fruits.add(array1[x]); 
} 

但你有重複。添加前可以添加條件if(!fruits.contains(...))

您可以通過使用以下算法簡化代碼:

  • 在陣列1的所有項目添加到列表
  • 從列表中移除在數組2項
3

首先,我我假設這是一種家庭作業,所以我不會通過修正你的代碼來破壞你的練習。

這裏有一個想法:您需要創建一個布爾變量來指示嵌套循環是否找到任何東西,將其設置爲「未找到」進入循環,並在循環後檢查它。如果循環指示已找到某個項目,請跳過該項目;否則,添加它。請記住,只有在嵌套循環完成後才能執行此操作,因此在嵌套循環內調用fruits.add爲時尚早。

boolean found = false; 
for(int y = 0; !found && y < array2.length; y++) { 
    found |= array1[x].equals(array2[y]); 
} 
if (!found) ... 
1

最好的辦法是,如果你使用的是IDE,單步執行代碼,看看那裏的邏輯失敗。如果您沒有使用調試器,則將一些System.out.println語句放入代碼中。然後您可以確定邏輯失敗的位置。 另一種解決方案是嘗試我給出的第一個解決方案。也就是說,有果陣持有所有陣列1,然後取出了在數組2發現

1

有你的邏輯

1兩個缺陷元素)在這裏,您要添加不應在水果中添加元素名單。 因此,您將必須檢查不屬於array2的元素,並且應該添加這些元素。因此,您可以在其他部分中編寫該邏輯。

2)你每次元素已經存在於水果名單,取而代之的是使用設置。它是否將不允許重複條目