2015-11-04 30 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; 
    } 
} 

测试/演示

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

如果你想从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; 
    } 
} 

然后通过主方法迭代:

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

喔有道理删除的System.out.println,我认为我的方法已经被设置为打印高于平均水平的所有时间,不只是最后一个,我不应该通过它继续运行吗?我需要得到它从主全部打印出来,我说的print()的方法,只是为了看它是否在工作。 – CheyBateman

+0

好吧,在这种情况下,也许你可以让getAboveAverage返回一个包含所有的次数,都高于平均水平的int数组或列表,然后通过他们的主要方法 –

+0

迭代认真谢谢你,现在这是有道理的。 – CheyBateman

0

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

为了避免打印的最后一个项目两次..只是从测试System.out.println(MarathonRunner.getAboveAverage(times)) ;