在计算每个数字的出现次数时,将文本文件中的数字输入到ArrayList

时间:2015-11-12 00:32:22

标签: java arraylist readfile

文本文件包含1000个数字的列表,范围从1到100.我需要使用arrayList来存储所有整数。如果在文本文件中多次出现整数,则仅将第一个匹配项保存在arrayList中。然后,我需要创建一个输出文件,告诉用户每个数字在文件中出现的次数。到目前为止,我有以下内容:

import java.util.ArrayList;
import java.util.Scanner;
import java.io*;  
public class HW4
{
   public static void main (String[] args)
   {
      FileReader file = new FileReader("numbers.txt");
      ArrayList<int> intList = new Arraylist<int>(1000);
      Scanner inputFile = new Scanner(file);

      while (inputFile.hasNext())
      {
         intList.add(inputFile.nextLine());
      }
      intList.close();
   }
}

到目前为止,我已经声明了filereader和arrayList以及扫描程序。 while循环会将文本文件中的数字添加到数组中,但我需要帮助确定如何确保每个数字只存储一次并计算出现次数。 编辑:人们建议我使用地图而不是arrayList,但我的教授要求我使用ArrayList。

1 个答案:

答案 0 :(得分:3)

有几点需要注意

  1. 您的ArrayList无法声明为int。它只能用于对象,而不是原语
  2. Scanner#nextLine返回String,而不是Integer。您应该使用Scanner#nextInt。或者,您可以通过拨打Integer#valueOf
  3. String投射到Integer
  4. 此时使用ArrayList是值得怀疑的。我建议改用Map。它是...
      

    将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值

  5. 因此,您的代码可能如下所示(关系为number, # o/occurrences):

    Map<Integer, Integer> myMap = new HashMap<Integer, Integer>();
    while (inputFile.hasNext()){
        Integer next = inputFile.nextInt();
        if (myMap.containsKey(next)){
            myMap.put(next, myMap.get(next) + 1);
        }else{
            myMap.put(next, 1);
        }
    }