这是我要做的......
输入文件:dishin.txt
输出文件:dishout.txt
时间限制:1秒
你不喜欢统计学家,统计学家不喜欢你。自从那个生命精算师在你四岁时将沙子踢进你的冰淇淋之后,你就已经对那些数字嘎吱嘎吱的混蛋进行了一场缓慢升级的战争。但所有这一切都将要改变。
在经历了许多不眠之夜之后,你已经设想了最终的复仇:在他们自己的游戏中击败他们。使用您的计算机编程技能,您将编写一个免费的统计软件包,如此彻底,如此完整,全世界的统计人员都将失业。它将能够预测天气模式,计算预期寿命,甚至可以玩完美的扑克游戏。
首先,您必须实现自动换行。然而,这个任务相当笨拙,本质上不是很数学,最终不是很重要。更迫切的是,您还需要实施一些基本的数据分析。具体来说,您决定编写一个测试程序来获取数据集(整数列表)并计算以下传播度量:
最低 - 列表中的最小值。例如,数字{5, 6, 5, 3}
的最小值为3
。
最高 - 列表中的最大值。例如,数字{5,6,5,3}中的最大值为6.
平均值(或平均值) - 定义为列表中所有内容的总和除以列表中的项目数。例如,数字{5, 6, 5, 3}
的平均值为(5+6+5+3)/4 = 19/4 = 4.75
。但是为简单起见,要求将所有答案四舍五入到最接近的整数。因此,向下舍入的数字{5, 6, 3, 3}
的平均值为4
。
第一行输入将包含单个整数n(1 <= n <= 1,000),即数据集的大小。以下n行将描述数据集。每行包含0到1,000,000之间的整数。
输出文件应由三个以空格分隔的整数组成:数据集的最小值,最大值和平均值。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws IOException {
///home/sebastian/workspace/Informatics Competition/src/
Scanner input = new Scanner(new File("/home/sebastian/workspace/Informatics Competition/src/dishin.txt"));
BufferedWriter output = new BufferedWriter(new FileWriter("/home/sebastian/workspace/Informatics Competition/src/dishout.txt"));
ArrayList<Integer> numbers = new ArrayList<Integer>();
while(input.hasNextInt()) {
numbers.add(input.nextInt());
}
numbers.remove(0);
Object max = Collections.max(numbers);
Object min = Collections.min(numbers);
System.out.println(numbers);
int sum = 0;
for (int i = 0; i<=numbers.size(); i++) {
sum += (int)(numbers.get(i));
}
int mean = (int)(sum / numbers.size());
output.write(String.valueOf(min+" "+max+" "+mean));
input.close();
output.close();
}
}
这是错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
at java.util.ArrayList.rangeCheck(ArrayList.java:638)
at java.util.ArrayList.get(ArrayList.java:414)
at Solution.main(Solution.java:35)
答案 0 :(得分:3)
应该是
for (int i = 0; i<numbers.size(); i++)
而不是
for (int i = 0; i<=numbers.size(); i++)
index
必须小于数字的大小。索引从0开始直到(size-1)
如果您有兴趣迭代数组的每个项目,请使用The For-Each Loop来避免此类问题。
Java5中引入的for-each循环。它主要用于遍历数组或集合元素。 for-each循环的优点是它消除了bug的可能性并使代码更具可读性
for(data_type variable : array | collection){}