打印高于平均时间的比赛

时间:2015-11-04 00:27:28

标签: java arrays for-loop

所以我试图在程序中打印出等于或高于平均值的时间。当我向我的方法本身添加一个print()时,它工作得很好,但是当我从我的main方法打印它时,它打印所有应该的值,除了它打印最后一个值两次。在我得到一个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;
    }
}

测试/演示

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

2 个答案:

答案 0 :(得分:1)

当您从main方法打印它时,它只打印最后的平均时间,这是因为这是getAboveAverage方法返回的内容。

它打印所有内容然后最后一次打印两次的原因是因为你在getAboveAverage方法中打印它们,然后再次打印最后一个因为它返回到main方法。

如果将main方法更改为此方法,则只应打印一次:

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);

如果你想从main方法打印它们,你可以这样做:

使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;
    }
}

然后在main方法中迭代:

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);
}

答案 1 :(得分:0)

您的方法看起来是正确的..如果要打印出来,请不要从getAboveAverage方法返回任何内容。如果要返回所有大于平均值的项目,则需要返回一个列表不是整数。

为避免打印最后一项两次..只需从测试System.out.println(MarathonRunner.getAboveAverage(times)) ;中删除System.out.println