2016-09-15 73 views
1
int array[] = new int[]{10, 11, 88, 2, 12, 9}; 

public static int getMax(int[] inputArray){ 
    int maxValue = inputArray[0]; 

    for(int i=1;i < inputArray.length;i++){ 
    if(inputArray[i] > maxValue){ 
     maxValue = inputArray[i]; 
    } 
    } 
    return maxValue; 
} 

是否有任何方法可以找到数组中的最大值但小于88?查找数组中的最大值,但必须低于某个值

+0

哇,这很快〜感谢您的快速回复〜 –

回答

5

如果使用Integer是你可以使用TreeSet

Integer[] values = new Integer[]{10, 11, 88, 2, 12, 9}; 
NavigableSet<Integer> integers = new TreeSet<>(Arrays.asList(values)); 

System.out.println(integers.lower(88)); 
System.out.println(integers.lower(2)); 
System.out.println(integers.lower(100)); 

打印出

12 
null 
88 

NavigableSet.lower(E e)的JavaDoc说,做到这一点:

返回的最大元素在此设置严格小于给定元素,如果没有这样的元素,则为null吨。

1

如果使用Java8,你可以使用Streaming API

int[] array = new int[]{10, 11, 88, 2, 12, 9}; 
final int limit = 88; 
Optional<Integer> max = Arrays.stream(array).filter(i -> i < limit) 
    .boxed().max(Comparator.naturalOrder()); 

System.out.println("Biggest element smaller than " + limit + " is " + max.get()); 

输出:

Biggest element smaller than 88 is 12 

它具有下列功能:

  • 转换int阵列到流
  • 除去从该流是大于或等于指定的限制元件(.filter
  • 转换流以一个Integer流(.boxed
  • 计算使用自然顺序比较器(最大.max

流的关键部分是filter,其中大于极限的元素将从流中移除。

0

你可能在寻找这样的事情:

public static int getMax(final int[] inputArray) { 

    final int L = 88; 

    int maxValue = inputArray[0]; 

    for (int i = 1; i < inputArray.length; i++) { 
     if (maxValue < L) 
      break; 
     maxValue = inputArray[i]; 
    } 

    for (final int element : inputArray) { 
     if (element >= L) 
      continue; 
     if (element > maxValue) 
      maxValue = element; 
    } 
    return maxValue; 
} 

请注意的是,(一些)其他答案失败,如果inputArray[0] >= 88

相关问题