为什么此方法不返回true?

时间:2019-02-05 15:25:50

标签: java arrays methods boolean logic

我有以下任务要做: 编写一个将数组作为参数和整数的方法。 如果数组中2个数字之间的差大于数字变量值,则该方法返回true。 请注意,您只能循环一次数组。 所以我写道:

public class difference
{
    public boolean difference(int[] a, int x)
    {
        int firstNum=a[0];//3
        boolean answer=false;
        for (int i=1;i<a.length;i++)
        {
            if (Math.abs(firstNum)-(Math.abs(a[i]))>Math.abs(x)) {
                answer=true;  
                break;  
            }
        }
        return answer;
    }
    public static void main(String[]args)
    {
        difference test= new difference();
        int[] array={3,4,6};
        System.out.println(test.difference(array,0));
    }
}

但是由于某种原因,这将我打印为虚假而不是真实 为什么?

2 个答案:

答案 0 :(得分:2)

Math.abs(firstNum)-(Math.abs(a[i])

必须

Math.abs(firstNum - a[i])

您应该获得差异的abs,而不是每个数字。

但是,您正在做的是abs(3) - abs(4) = -1,该值小于0。(其他情况与此类似)

  

[...]如果数组中两个数字之间的差异大于数字变量值

但是您只是互相比较第一个数字...

如果您需要确定两个数字是否存在,使得它们之间的差异大于传递的整数,请找到最小值和最大值,并找出它们之间的差异(感谢@NeplatnyUdaj来纠正我)

答案 1 :(得分:0)

您的程序不是解决问题的方法。 至少有两个解决方案,第一个是O(n ^ 2),并且需要有两个for循环才能比较它们之间的所有元素本身。 您应该使用的第二个解决方案是问题,您必须选择该问题,因为它说您只能循环一次数组,这是在一个for循环中找到数组的最小值和最大值并控制它们的差值。如果它们的差大于给定的数字,则返回true,否则返回false。