我有以下任务要做: 编写一个将数组作为参数和整数的方法。 如果数组中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));
}
}
但是由于某种原因,这将我打印为虚假而不是真实 为什么?
答案 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。