2014-10-22 3 views
1

Я пытаюсь создать два метода, который найдет наименьший и тот, который найдет второе наименьшее значение в массиве объектов.Найти наименьшее и второе наименьшее значение в массиве Java

Я написал два типа этого

public static BanffMarathonRunner getFastestTime(BanffMarathonRunner[] runner){ 
    if(runner.length == 0){ 
     return null; 
    } 
    BanffMarathonRunner fastest = runner[0]; 
    for(int i = 0; i< runner.length; i++){ 
     BanffMarathonRunner now = runner[i]; 
     if(now.Time < fastest.Time){ 
      fastest = now; 

     } 
    } 
    return fastest; 
} 
    public static BanffMarathonRunner getSecondFastestTime(BanffMarathonRunner[] runner){ 
     if(runner.length == 0){ 
      return null; 
     } 
     BanffMarathonRunner fastest = runner[0]; 
     BanffMarathonRunner secondFastest = runner[0]; 
     for(int i = 0; i< runner.length; i++){ 
      BanffMarathonRunner now = runner[i]; 
      if(now.Time < fastest.Time){ 
       fastest = now; 
     for(int j = 0; j< runner.length; j++){ 
      BanffMarathonRunner now2 = runner[j]; 
      if(now2.Time < secondFastest.Time){ 

       secondFastest = now2; 
       if(now2.Time == fastest.Time){ 
        secondFastest = secondFastest; 
       } 
      } 
     } 

      } 
     } 
     return secondFastest; 
    } 

Я выяснял, как найти наименьшее значение, мне просто нужно найти второй маленький и я не знаю, как.

Любые идеи? Благодаря!

+1

Почему бы не удалить быстрый из массива, а затем запустить функцию, чтобы найти самый быстрый один из времен, что осталось? – APerson

ответ

0

что-то как это:

findSecondSmallest anArray[]: 
    if anArray.length < 2: 
     return null; 
    fastest = anArray[0]; 
    secondFastest = anArray[1]; 
    if fastest > secondFastest: 
     fastest = anArray[1]; 
     secondFastest = anArray[0] 
    for each element in anArray: 
     if element < fastest: 
      secondFastest = fastest; 
      fastest = element; 
     else if element < secondFastest: 
      secondFastest = element; 

    return secondFastest 
+0

Спасибо! Это работает! –

+0

Пожалуйста, отметьте мой ответ правильно с зеленой проверкой, спасибо! –

+0

Это даже не синтаксис Java. –

0

Как только вы узнаете о самом быстром бегуне, храните указатель этой записи. Тогда при нахождении 2-ой самый быстрый бегун, игнорировать индекс быстрый бегун в цикле, используя «продолжить»

Кроме того, для любого K-наименьшему записи, вы можете увидеть идею, приведенный на этот вопрос: K smallest in Array Java

1
Arrays.sort(test); 
    if(test.length-2 >= 0) 
     System.out.println(test[test.length-2]); 
Смежные вопросы