所以我试图在程序中打印出等于或高于平均值的时间。当我向我的方法本身添加一个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
答案 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