2015-11-04 3 views
2

Так что я пытаюсь распечатать время в моей программе, равное или превышающее среднее значение. Когда я добавляю print() в мой метод, он работает нормально, но когда я печатаю его по своему основному методу, он печатает все значения, которые он должен, за исключением того, что он дважды печатает последнее значение. Прежде чем я получил ArrayIndexOutOfBoundsException, я исправил проблему, но, похоже, что-то все еще отключено. Я застрял на том, чтобы это работало какое-то время, но не может это исправить! Я смотрел онлайн и через кучу форумов и пытался реализовать разные предложения, но я до сих пор не могу заставить его работать.Печать выше среднего раза из гонки

Буквально любая помощь или предложения были бы весьма признательны.

public class MarathonRunner { 

//Finding the average 
public static double getAverageTime(int[] times) { 
    int sum = 0; 
    double average; 

    for (int i = 0; i < times.length; i++) { 
     sum = sum + times[i]; 
    } 
    average = (double) sum/times.length; 
    return average; 

} 

//Finding above Average 
public static int getAboveAverage(int[] times) { 
    int aboveAverage = 0; 

     for (int i = 0; i < times.length; i++) { 

      if ((double)times[i] >= getAverageTime(times)) { 

       aboveAverage = times[i]; 
       System.out.println(aboveAverage); 

      } 

     } 

     return aboveAverage; 
    } 
} 

Test/Demo

public class TestMarathonRunner { 

public static void main(String[] args) { 

int times[] = { 341, 273, 278, 329, 445, 275, 275, 243, 334, 412, 
    393, 299, 343, 317, 265 }; 

System.out.println("The average time is: " + 
    MarathonRunner.getAverageTime(times)); 

System.out.println(MarathonRunner.getAboveAverage(times)) ; 

Печать

341 
329 
445 
334 
412 
393 
343 
The average time is: 321.46666666666664 
341 
329 
445 
334 
412 
393 
343 
343 

ответ

1

При печати из главного метода он только печатает последний Выше среднего времени, это происходит потому, что это то, что getAboveAverage метод возвращается.

Причина, по которой он печатает все, а затем второй, потому что вы печатаете их все в методе getAboveAverage, а затем снова печатаете последний, потому что он возвращается основному методу.

Если изменить основной метод этого он должен напечатать их только один раз:

public class TestMarathonRunner { 

public static void main(String[] args) { 

int times[] = { 341, 273, 278, 329, 445, 275, 275, 243, 334, 412, 
    393, 299, 343, 317, 265 }; 

System.out.println("The average time is: " + 
    MarathonRunner.getAverageTime(times)); 

MarathonRunner.getAboveAverage(times); 

Если вы хотите напечатать их от основного метода вы могли бы сделать это вместо:

Сделать метод getAboveAverage возвращать ArrayList:

//Finding above Average 
public static List<Integer> getAboveAverage(int[] times) { 
    List<Integer> aboveAverages = new ArrayList<Integer>(); 

     for (int i = 0; i < times.length; i++) { 

      if ((double)times[i] >= getAverageTime(times)) { 

       aboveAverages.add(times[i]); 

      } 

     } 

     return aboveAverages; 
    } 
} 

Затем перебирать в основной метод:

public class TestMarathonRunner { 

public static void main(String[] args) { 

int times[] = { 341, 273, 278, 329, 445, 275, 275, 243, 334, 412, 
    393, 299, 343, 317, 265 }; 

System.out.println("The average time is: " + 
    MarathonRunner.getAverageTime(times)); 

List<Integer> aboves = MarathonRunner.getAboveAverage(times); 
for(int i : aboves){ 
    System.out.println(i); 
} 
+0

Ооо, что имеет смысл, я думал, что мой метод был уже настроен для печати всех времен, которые были выше среднего , а не только последний, не должен ли я продолжать работать через него? Мне нужно, чтобы он распечатывал их все из основного, я добавил print() в метод, чтобы увидеть, работает ли он. – CheyBateman

+0

Хорошо, в этом случае, возможно, вы можете заставить getAboveAverage возвращать массив или список индексов, содержащих все времена, которые выше среднего, а затем перебирать их по основному методу. –

+0

Серьезно спасибо, теперь это имеет смысл. – CheyBateman

0

Ваш метод выглядит правильно. Не возвращайте ничего из метода getAboveAverage, если вы собираетесь его распечатать. Если вы хотите вернуть все элементы, которые больше среднего, вам нужно вернуть список не целочисленный ,

Чтобы избежать печати последнего пункта дважды .. просто удалить System.out.println из теста System.out.println(MarathonRunner.getAboveAverage(times)) ;