我想为这段代码寻求一些帮助。 读取文件本身并将其用作扫描仪没有问题。 我可以很容易地计算出文件中有多少个 double 。 例如,这些是 txt 文件的前五个 double 。 (这些数字应该是垂直列出的,但我毫不怀疑这会有所作为)
10 84 39 93 34
我想将这些 double 放入一个数组中,但出于某种原因,Java 没有将扫描器中的 double 放入数组中,而是只放入 0.0。
Scanner in = new Scanner(new File("numbers.txt"));
//This is for finding out the size of the array.
int nums = 0;
while(in.hasNextDouble() == true){
nums++;
in.nextDouble();
}
double[] list = new double[nums];
try{
for (int i = 0; i < list.length; i++){
list[i] = in.nextDouble();
}
}catch(NoSuchElementException e){
System.out.print(e.getMessage());
}
此代码总体上只打印“num”个 0.0,而不是将实际数字本身相加。请帮忙,谢谢。
最佳答案
问题是,在将数据添加到数组之前,您正在读取所有数据,因此当您添加时,没有数据可供读取。
几个不同的选项:
Scanner in = new Scanner(new File("numbers.txt"));
int nums = 0;
double[] list = new double[5];
while(in.hasNextDouble()){
list[nums] = in.nextDouble();
nums++;
}
尝试更像上面的方法(对于固定数量的数据),在将它们添加到数组之前,您正在读取所有 double ..您不能读取所有数据,因为您只是为了看看如何你的阵列需要很大..除非你制作一个新的扫描仪来重新读取文件
注意:上面的代码假定您的文件始终只有 5 个 double ,如果情况并非如此,您可能想要使用数组列表,以便在您添加未知数量的 double 时列表可以扩展(参见下面使用数组列表的示例)
Scanner in = new Scanner(new File("numbers.txt"));
ArrayList<Double> arrayList = new ArrayList<Double>();
while(in.hasNextDouble()){
arrayList.add(in.nextDouble());
}
或者...在第一个 while 循环完成后,只需再次添加下面的行,您的原始代码就可以工作了。
in.close();
in = new Scanner(new File("numbers.txt"));
关于java - 从文件扫描器到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483387/