繁体   English   中英

数组和读写文本文件的问题-Java

[英]Arrays and read and write text files issue - Java

这是我要做的...

  • 输入文件:dishin.txt

  • 输出文件:dishout.txt

  • 时限:1秒

您不喜欢统计学家,统计学家也不喜欢您。 自从四岁那年,生活精算师开始向您的冰淇淋中扔沙以来,您就与那些数量众多的抽搐者展开了一场缓慢升级的战争。 但是,这一切都会改变。

经过许多不眠之夜,您构想了最终的复仇:在自己的游戏中击败他们。 利用您的计算机编程技能,您将编写出如此详尽,如此完整的免费软件统计软件包,以至于全世界的统计学家都将失业。 它将能够预测天气模式,计算预期寿命,甚至玩完美的扑克游戏。

但是,首先,您必须实现自动换行。 但是,此任务相当复杂,本质上不是很数学,最终也不是很重要。 更紧急的是,您还需要实施一些基本数据分析。 具体来说,您决定编写一个测试程序,该程序采用一个数据集(一个整数列表),并计算以下扩展率:

  • 最小值 -列表中的最小值。 例如,数字{5, 6, 5, 3} 5,6,5,3 {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, 5, 3}的平均值为(5+6+5+3)/4 = 19/4 = 4.75 但是,为简单起见,系统会要求您将所有答案四舍五入到最接近的整数。 因此,四舍五入后的数字{5, 6, 3, 3} 5,6,3,3 {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)

它应该是

for (int i = 0; i<numbers.size(); i++) 

代替

for (int i = 0; i<=numbers.size(); i++) 

index必须小于数字的大小。 索引从0开始到(大小-1)

如果您有兴趣迭代数组的每个项目,请使用For-Each循环来避免此类问题。

每循环(高级或增强的循环):

Java5中引入的for-each循环。 它主要用于遍历数组或集合元素。 for-each循环的优点在于,它消除了发生错误的可能性,并使代码更具可读性。

for-each循环的语法:

for(data_type variable : array | collection){} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM