2012-08-08 202 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)你每次元素已经存在于水果名单,取而代之的是使用设置。它是否将不允许重复条目