Java 在计算每个数字的发生率时,将数字从文本文件输入ArrayList

Java 在计算每个数字的发生率时,将数字从文本文件输入ArrayList,java,arraylist,readfile,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 mai

文本文件包含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();
   }
}
import java.util.ArrayList;
导入java.util.Scanner;
导入java.io*;
公共级HW4
{
公共静态void main(字符串[]args)
{
FileReader文件=新的FileReader(“numbers.txt”);
ArrayList intList=新的ArrayList(1000);
扫描仪输入文件=新扫描仪(文件);
while(inputFile.hasNext())
{
add(inputFile.nextLine());
}
intList.close();
}
}
到目前为止,我已经声明了filereader和arrayList以及scanner。while循环会将文本文件中的数字添加到数组中,但我需要帮助确定如何确保每个数字只存储一次,并且计数出现的次数。
编辑:人们建议我使用地图而不是arrayList,但我的教授要求我使用arrayList。

有几件事需要注意

  • 您的
    ArrayList
    不能声明为持有
    int
    。它只能处理对象,不能处理基本体
  • Scanner#nextLine
    返回一个
    字符串
    ,而不是
    整数
    。你应该改为使用。或者,您可以通过调用
  • 此时,您使用的
    ArrayList
    是有问题的。我建议用一个新的。它是。。。 将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射到一个值

  • 因此,您的代码可以如下所示(关系是
    number,#o/occurrencess
    ):

    Map myMap=newhashmap();
    while(inputFile.hasNext()){
    整数next=inputFile.nextInt();
    if(myMap.containsKey(下一个)){
    myMap.put(next,myMap.get(next)+1);
    }否则{
    myMap.put(下一步,1);
    }
    }
    
    使用ArrayList.contains()确定列表中是否有整数,使用integer.parseInt()将行转换为整数。有关读取文件的信息,请参阅此问题:您尝试了什么?这不是一个抛售你的项目并让社区解决它的地方。到目前为止,你做了哪些尝试,你被困在了哪里?你不能指望社区为你解决问题。请在你的实际问题中发布,并正确设置格式。你的具体要求是什么?您是否必须使用ArrayList,或者是否可以使用更合适的ArrayList,例如地图?地图建议加1。这也是我的答案。不幸的是,我必须使用arrayList来完成这项任务,并且不能使用map。非常感谢您的反馈。我很感激!您仍然可以使用映射来存储每个数字的出现,同时也可以将数字添加到ArrayList中。但是你也可以考虑只使用一个简单的101个int数组来保存这些事件,这可能比一个地图更具空间和时间效率。背负这个答案,你可以使用自动装箱来实现你使用ARRAYLIST的要求。如果你使用地图,那就被认为是作弊,就像米迦勒的答案一样。最后你做了
    arraylistintlist=newarraylist(myMap.keySet())
    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);
        }
    }