1

请帮我解决一下这个。我想通过array2的元素扫描array1,如果在array1中找到它,则忽略array2的元素。所以只会留下一份水果清单。但输出显示:球,铅笔。我希望它只显示水果中的元素。感谢您的帮助

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);
    }
}
4

5 回答 5

3

首先,我假设这是一个家庭作业,所以我不会通过修复你的代码来破坏你的练习。

想法是这样的:您需要创建一个布尔变量来指示嵌套循环是否找到任何东西,将其设置为“未找到”进入循环,并在循环后检查它。如果循环表明已找到一个项目,则跳过它;否则,添加它。请记住,您只能在嵌套循环完成后执行此操作,因此fruits.add在嵌套循环内调用还为时过早。

boolean found = false;
for(int y = 0; !found && y < array2.length; y++) {
    found |= array1[x].equals(array2[y]);
}
if (!found) ...
于 2012-08-08T11:24:16.913 回答
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(...))之前添加条件。

您可以使用以下算法简化代码:

  • 将 array1 中的所有项目添加到列表中
  • 从列表中删除 array2 中的项目
于 2012-08-08T11:23:10.327 回答
1

if 语句 if(array1[x].equals(array2[y])) 只对球和铅笔为真,所以水果数组只会添加球和铅笔。您可以将水果数组设置为包含所有数组 1,然后,如果您的 if 语句为真,则从数组中删除该元素。

或者,您可以设置一个布尔值 isFruit = true (在外部 for 循环中)。然后,如果您的 if 语句 if(array1[x].equals(array2[y])) 通过,请将 isFruit 设置为 false。内循环迭代后,如果isFruit为真,则将其添加到fruit数组中。

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
于 2012-08-08T11:37:27.893 回答
1

最好的方法是,如果您使用的是 IDE,请单步执行代码,看看逻辑在哪里出错。如果您不使用调试器,则将一些 System.out.println 语句放入代码中。然后,您可以确定逻辑失败的地方。另一个解决方案是尝试我给出的第一个解决方案。也就是说,让fruit数组保存所有array1,然后删除在array2中找到的元素

于 2012-08-08T11:59:18.233 回答
1

你的逻辑有两个缺陷

1)在这里,您正在添加不应添加到水果列表中的元素。因此,您将必须检查不属于 array2 的元素并且应该添加这些元素。因此您可以在else部分编写该逻辑。

2)您每次都在检查该元素是否已经存在于 fruits 列表中,而不是使用Set 。它将不允许重复条目

于 2012-08-08T12:18:10.740 回答