如果在 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);
}
}
首先,我假设这是某种家庭作业,所以我不会通过修复代码来破坏您的练习。
这个想法是这样的:你需要创建一个布尔变量来指示嵌套循环是否找到任何东西,将其设置为"未找到"进入循环,并在循环后检查它。如果循环指示已找到某个项目,请跳过它;否则,请添加它。请记住,只有在嵌套循环完成后才能执行此操作,因此在嵌套循环中调用fruits.add
还为时过早。
boolean found = false;
for(int y = 0; !found && y < array2.length; y++) {
found |= array1[x].equals(array2[y]);
}
if (!found) ...
如果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 中的项
语句 if(array1[x].equals(array2[y])) 只适用于球和铅笔,因此水果数组只会添加球和铅笔。您可以将 fruit 数组设置为包含所有 array1,然后,如果您的 if 语句为 true,则从数组中删除该元素。
或者,您可以设置一个布尔值 isFruit = true(在外部 for 循环中)。然后,如果你的 if 语句 if(array1[x].equals(array2[y])) 通过,请将 isFruit 设置为 false。在内部循环迭代之后,如果 isFruit 为 true,则将其添加到 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
最好的方法是,如果您使用的是 IDE,请逐步执行代码,查看逻辑失败的位置。 如果不使用调试器,则将一些 System.out.println 语句放入代码中。 然后,您可以确定逻辑失败的位置。另一个解决方案是尝试我给出的第一个解决方案。 也就是说,让果实数组保存数组 1 的所有内容,然后删除在数组 2 中找到的元素
你的逻辑有两个缺陷
1)在这里,您正在添加不应添加到水果列表中的元素。因此,您必须检查不属于 array2 的元素,并且应该添加这些元素。所以你可以在其他部分写下这个逻辑。
2)您每次都在检查该元素是否已存在于水果列表中,而不是使用 Set。它将不允许重复的条目