每次运行代码时,Boolean返回true

时间:2015-01-17 03:50:13

标签: java

下面的代码应搜索两个数组以查找任何类似的数字,如果找到,则返回true

public class ArrayIntersect 
{

    public static void main(String[] args) 
    {
        main();

    }

    public static void main() 
    {
        boolean l = false;
        intersection(l);
        if(l = true)
        {
            System.out.println("There are matching variables in the arrays!");
        }
        else
        System.out.println("There are no matching variables.");

    }

    public static boolean intersection(boolean l) 
    {
        int[] one = new int[2];
        int[] two = new int[2];
        one[0] = 1;
        one[1] = 2;
        two[0] = 1;
        two[1] = 3;

        for(int i = 0; i < one.length; i++)
        {
            for(int j = 0; j < two.length; j++)
            {
                if(one[i] == two[j])
                {
                    l = true;
                    return l;
                }

            }
        }
        for(int j = 0; j < two.length; j++)
        {
            for( int i = 0; i < one.length; i++)
            {
                if(two[j] == one[i])
                {
                    l = true;
                    return l;
                }
            }
        }
        return false;
    }
}

如果错误很简单,我很抱歉,因为我刚开始在这个网站上学习Java!此外,任何有关制作该计划的提示也将受到赞赏!

3 个答案:

答案 0 :(得分:4)

if(l = true)

是作业。你想要

if (l == true)

或只是

if (l)

分配的副作用是分配的值。因此,l = true会将true分配给l并评估true中的if

此外,您的代码还有一些其他问题。您首先需要知道的是Java总是按值传递。而且你不需要传递boolean。最后,我认为你真的想要

public static void main(String[] args) {
    boolean l = intersection(); // <-- can't modify caller's "reference"
    if (l) {
        System.out.println("There are matching variables in the arrays!");
    } else {
        System.out.println("There are no matching variables.");
    }
}

然后没有必要再次迭代你的两个数组。你可以更简单地构建它们,如

public static boolean intersection() {
    int[] one = { 1, 2 };
    int[] two = { 1, 3 };

    for (int i = 0; i < one.length; i++) {
        for (int j = 0; j < two.length; j++) {
            if (one[i] == two[j]) {
                return true;
            }
        }
    }
    return false;
}

答案 1 :(得分:2)

如果你想知道l是否属实,你可以:

if(l == true)

如果你想说l的值为真,你可以:

(l = true)

我将您的代码修改为:

public class ArrayIntersect {

public static void main(String[] args)
{
    main();

}

public static void main()
{
    boolean intersect = intersection(); // intersect returns true/false
    if(intersect)
    {
        System.out.println("There are matching variables in the arrays!");
    }
    else
        System.out.println("There are no matching variables.");

}

public static boolean intersection()
{
    int[] one = new int[2];
    int[] two = new int[2];
    one[0] = 1;
    one[1] = 2;
    two[0] = 1;
    two[1] = 3;
    for(int i = 0; i < one.length; i++)
    {
        for(int j = 0; j < two.length; j++)
        {
            if(one[i] == two[j])
            {
                return true;
            }

        }
    }
    for(int j = 0; j < two.length; j++)
    {
        for( int i = 0; i < one.length; i++)
        {
            if(two[j] == one[i])
            {
                return true;
            }
        }
    }
    return false;
}

}

请注意,如果您想知道2组是否相交,有更有效的方法可以做到这一点。快乐的编码!

答案 2 :(得分:0)

如果要查找两个循环结果的交集,请不要返回for循环内部。与当前情况一样,当数组1和2在0位置相等时,您将不在该方法中。要解决此问题,请在标志变量中保存值,创建一个方法并获得总和o / p