我有以下任务做:写得到的阵列作为一个参数和一个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));
}
}
但由于某些原因,这个我打印错误,而不是真实的,为什么?
Math.abs(firstNum)-(Math.abs(a[i])
一定是
Math.abs(firstNum - a[i])
你应该得到的差异,而不是每个号码的abs
。
但是,你在做什么是abs(3) - abs(4)
= -1
小于0(类似的事情对于别人)
[...]如果在阵列中的2个数字之间的差,其差比数变量的值更大的
但是,你只互相比较的第一个数字...
如果你需要找到,如果存在这样的两个数它们之间的区别是不是传递的整数时,找到最小和最大并找到差异它们之间(感谢@NeplatnyUdaj指正)
你的程序是不是在问题的解决方案。至少有两种解决办法,第一是O(n ^ 2),并要求有两个for循环对所有这些自我的元素进行比较。您应该使用,而这个问题迫使你选择,因为它说,你可以循环数组只有一次第二个解决方案,它是一个寻找循环的最小值和最大值的阵列和控制他们的区别。如果他们的差值大于给定数目,则返回true,否则为false更多。