为什么这个方法不返回true?

问题描述 投票:0回答:2

我有以下任务做:写得到的阵列作为一个参数和一个int数目的方法。如果存在其差大于数变量值更大的阵列中的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));
    }
}

但由于某些原因,这个我打印错误,而不是真实的,为什么?

java arrays methods boolean logic
2个回答
2
投票

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

一定是

Math.abs(firstNum - a[i])

你应该得到的差异,而不是每个号码的abs

但是,你在做什么是abs(3) - abs(4) = -1小于0(类似的事情对于别人)

[...]如果在阵列中的2个数字之间的差,其差比数变量的值更大的

但是,你只互相比较的第一个数字...

如果你需要找到,如果存在这样的两个数它们之间的区别是不是传递的整数时,找到最小和最大并找到差异它们之间(感谢@NeplatnyUdaj指正)


0
投票

你的程序是不是在问题的解决方案。至少有两种解决办法,第一是O(n ^ 2),并要求有两个for循环对所有这些自我的元素进行比较。您应该使用,而这个问题迫使你选择,因为它说,你可以循环数组只有一次第二个解决方案,它是一个寻找循环的最小值和最大值的阵列和控制他们的区别。如果他们的差值大于给定数目,则返回true,否则为false更多。

© www.soinside.com 2019 - 2024. All rights reserved.