boolean值在java中的if else中没有改变

时间:2013-11-13 11:36:44

标签: java

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个数组中的所有常见元素,如果找到并且&amp;如果没有找到共同元素,则应显示there are no common elements ...此msg应仅显示一次,因此我使用布尔值。在for循环中,d的布尔值正在改变,但是当它从for循环d出来时,不会更改值。

3 个答案:

答案 0 :(得分: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");


    }
}

答案 1 :(得分:0)

以下部分不在for循环中。将它带回第一个for循环,而不是查看更改。

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

答案 2 :(得分:0)

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

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

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

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

现在循环A和B,因此进行了以下检查:

  • 1 == 1 - &gt;真
  • 1 == 3 - &gt;假
  • 2 == 1 - &gt;假
  • 2 == 3 - &gt;假

这导致d为假,因为实际上只有最后的比较才有意义。

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

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

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

重要说明:如果删除else块,请初始化变量d,否则将无法编译(d可能会初始化)。