2017-11-11 68 views
-2

我有一个五个integerscount[5]阵列,我想检查它们的差异是否大于3如何检查java中的5个数字的背离

蛮力可以做:if(count[5]-count[4])>3) ,if(count[5]-count[3]>3)

有没有更好的办法做到这一点?

+0

是数组的重要顺序?使用循环遍历每个元素检查下一个元素之间的差异将会起作用。看一下“增强的for循环”,并使用它遍历每个元素,测试其差异是否大于3.根据您希望输出的样子,这将是一个可用的解决方案。 – OnlySteveH

+4

在一次迭代中,您可以找到'min'和'max'值并检查它们的差异。 – alfasin

+0

@OnlySteveH如何迭代并检查元素与下一个元素之间的差异的循环如何找到最大的差异,假设它在没有连续的项目之间? – alfasin

回答

-2

如果数组中的数字要增加,可以使用for循环。

int[5] count = {1,2,3,4,5} 
for(int i = 0; i < count.length; i++){ 
    for(int j = 0; j < count.length; j++){ 
    if(((count[i] - count[j]) > 3) || ((count[i] - count[j])<-3)){ 
     //TODO 
    } 
    } 
} 
+1

你didn不检查这种情况,例如:'count [0] -count [4]' – 2017-11-11 15:22:13

+1

另外,如果'count [0] = - 10'和'count [1] = - 2'怎么办? 'count [0] -count [1] = - 8' – 2017-11-11 15:25:23

+0

我想新的代码涵盖了你说的两种情况... –

0

不是一个非常有效的方式做到这一点,但

Integer min = Arrays.<Integer>asList(arr).stream().min(Comparator.naturalOrder()); 
Integer max = Arrays.<Integer>asList(arr).stream().min(Comparator.naturalOrder()); 
Integer spread = max - min; 

会做的伎俩。

如果数组很大,您将需要在同一时间针对最小值和最大值执行带有运行跟踪器的reduce。让我知道你是否真的需要这个。

0

这里一个Java代码实现:

public static boolean diff(int[] ar) { 
     boolean result = true; 
     for (int i = 0; i < ar.length; i++) { 
      for (int j = 0; j < ar.length; j++) { 
       if (Math.abs(ar[i] - ar[j]) > 3) { 
        result = false; 
       } 
      } 
     } 
     return result; 
}