文本文件包含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。
答案 0 :(得分:3)
有几点需要注意
ArrayList
无法声明为int
。它只能用于对象,而不是原语Scanner#nextLine
返回String
,而不是Integer
。您应该使用Scanner#nextInt
。或者,您可以通过拨打Integer#valueOf
String
投射到Integer
ArrayList
是值得怀疑的。我建议改用Map
。它是...
将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值
因此,您的代码可能如下所示(关系为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);
}
}