-4
import java.util.Scanner;

class CommonElements
{
    public static void main(String args[])
    {
        int s1,s2,count=0;
        boolean d;

        Scanner sc=new Scanner(System.in);

        System.out.println("Enter 1st array size");
        s1=sc.nextInt();
        int n1[]=new int[s1];
        System.out.println("Enter "+s1+" nos for 1st array");
        for(int i=0;i<s1;i++)
        {
            n1[i]=sc.nextInt();
        }

        System.out.println("Enter 2nd array size");
        s2=sc.nextInt();
        int n2[]=new int[s2];
        System.out.println("Enter "+s2+" nos for 2nd array");
        for(int i=0;i<s2;i++)
        {
            n2[i]=sc.nextInt();
        }

        System.out.println("\n");
        for(int i=0;i<s1;i++)
        {
            for(int j=0;j<s2;j++)
            {

                if(n1[i]==n2[j])
                {
                    d=true;
                    System.out.println(n1[i]);
                }
                else
                    d=false;
            }
        }

        if(d==false)
            System.out.println("there are no common elements");


    }
}

如果找到,此编应返回 2 个数组中的所有公共元素,如果there are no common elements未找到公共元素,则应显示...此消息应仅显示一次,因此我使用的是布尔值。在 for 循环中,布尔值 ford正在发生变化,但是当它退出 for 循环时d不会采用更改后的值。

4

3 回答 3

1

你应该删除 else section

class CommonElements
{
    public static void main(String args[])
    {
        int s1,s2,count=0;
        boolean d = false; //Assign false to it

        Scanner sc=new Scanner(System.in);

        System.out.println("Enter 1st array size");
        s1=sc.nextInt();
        int n1[]=new int[s1];
        System.out.println("Enter "+s1+" nos for 1st array");
        for(int i=0;i<s1;i++)
        {
            n1[i]=sc.nextInt();
        }

        System.out.println("Enter 2nd array size");
        s2=sc.nextInt();
        int n2[]=new int[s2];
        System.out.println("Enter "+s2+" nos for 2nd array");
        for(int i=0;i<s2;i++)
        {
            n2[i]=sc.nextInt();
        }

        System.out.println("\n");
        for(int i=0;i<s1;i++)
        {
            for(int j=0;j<s2;j++)
            {

                if(n1[i]==n2[j])
                {
                    d=true;
                    System.out.println(n1[i]);
                }
                //else NO NEED OF THIS ELSE SECTION AS IF YOUR LAST 
                                    // COMPARISON DO NOT MATCHES THEN IT WILL REASSIGN FALSE VALUE
                //d=false;
            }
        }

        if(d==false)
            System.out.println("there are no common elements");


    }
}
于 2013-11-13T11:42:24.437 回答
0

您的以下部分在两个 for 循环之外。将其带回第一个 for 循环,然后您可以查看更改。

if(d==false)
System.out.println("there are no common elements");
于 2013-11-13T11:41:45.237 回答
0

我假设以下内容(因为我也无法阅读您的问题):

你有共同的元素,但输出仍然是there are no common elements,对吧?

问题是这样的:您逐个索引比较元素,但只有最后一个索引获胜,因为您在 else 块中将 d 设置为 false 。

考虑这种情况:数组 A = [1,2] 和数组 B = [1,3]

您现在遍历 A 和 B 并因此进行以下检查:

  • 1 == 1 -> 真
  • 1 == 3 -> 假
  • 2 == 1 -> 假
  • 2 == 3 -> 假

这导致d错误,因为实际上只有最后一个比较很重要。

删除 else 块,它应该可以正常工作(除非我还没有发现其他错误)。因此,您将 d 初始化为 false,即您假设没有公共元素。一旦你找到了一些,你将 d 设置为 true 甚至可能打破循环,因为你找到了你正在寻找的信息(至少有一对共同的元素)。

或者计算公共元素对并检查该数字是否为 0 或更大。这将提供有关找到多少对的附加信息。

编辑:作为代码格式的附加提示,我个人发现始终使用大括号进行循环以及 if-else 块更容易。这样,您可以减少通过尝试将另一个语句添加到单元素块(即没有大括号)而可能意外引入的错误。这只是个人品味/经验,但是 YMMV。

重要提示:如果您删除 else 块,请初始化您的变量d,否则它将无法编译(d可能会被初始化)。

于 2013-11-13T11:42:32.847 回答