【问题标题】:Arrays and read and write text files issue - Java数组和读写文本文件问题 - Java
【发布时间】:2014-07-19 01:07:31
【问题描述】:

这是我必须做的……

  • 输入文件: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

输出

输出文件应包含三个用空格分隔的整数:数据集的最小值、最大值和平均值。

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)

【问题讨论】:

    标签: java arrays file arraylist buffer


    【解决方案1】:

    应该是

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

    而不是

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

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

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

    For-each 循环(高级或增强型 For 循环):

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

    for-each 循环的语法:

    for(data_type variable : array | collection){} 
    

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      相关资源
      最近更新 更多