2016-09-15 30 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

相關問題