我想请求一些有关此代码的帮助。 我没有问题阅读文件本身并将其用作扫描仪。 我可以轻松计算文件的双打数量。 作为示例,这些是txt文件的前五个双打。 (这些数字被认为是垂直列出的,但我几乎不怀疑它会有所作为)
10 84 39 93 34
我想将这些双打放入一个数组中,但出于某种原因而不是将扫描器中的双精度放入数组中,Java只会输入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,而不是自己添加实际数字。请帮忙,谢谢。
答案 0 :(得分:1)
问题是,在将数据添加到数组之前,您正在读取所有数据,因此当您添加时,没有数据可供阅读。
几种不同的选择:
Scanner in = new Scanner(new File("numbers.txt"));
int nums = 0;
double[] list = new double[5];
while(in.hasNextDouble()){
list[nums] = in.nextDouble();
nums++;
}
尝试更多类似于上面的内容(对于固定数量的数据),在将它们添加到数组之前,您正在阅读所有双打..您无法读取所有数据,因为您正在查看如何您的阵列需要很大...无需您制作新的扫描仪来重新读取文件
注意:上面的代码假设你的文件总是只有5个双打,但事实并非如此,你可能想要使用一个arraylist,所以当你添加一个未知数量的双打时,列表可以扩展(参见下面的例子,使用arraylist )
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"));
答案 1 :(得分:0)
使用in.nextDouble()时,您正在遍历文件
假设您的文件包含:1.0 2.0 3.0 4.0
当您使用in.hasNextDouble()
时,如果存在任何值double,则此函数返回true
在我们的情况下:
1.0然后是,它返回true并抛出循环
in.nextDouble();
检索1.0 double并将光标放到下一个
然后循环再次使用hasNextDouble()方法检查是否仍有Double值
。
直到文件中没有剩下下一个double值,应用程序退出循环
我建议你试试这段代码
double[] list = new double[nums];
int nums=0;
while(in.hasNextDouble() == true){
list[nums]= in.nextDouble();
nums++;
}
你所拥有的for循环是没用的
答案 2 :(得分:0)
您已经“扫描”了这些数字,当您的while循环终止时,内部文件位置指示符已到达文件的末尾。您需要关闭此扫描仪并重新打开它,或打开一个新扫描仪,以便它可以再次从文件顶部开始。
答案 3 :(得分:0)
您添加所有双打时,您的扫描仪已经读完了该文件。你可以重新编写代码来动态添加它们,或者只是在你的try块之前做一个不太简洁的重新初始化扫描程序的解决方案。
in = new Scanner(new File("numbers.txt"));
答案 4 :(得分:0)
这是怎么回事。
在第一个循环中,您将浏览文件中的所有数字
int nums = 0;
while(in.hasNextDouble() == true){
nums++;
in.nextDouble();
}
然后你试图阅读更多不存在的双打(我假设为什么这是你试图try/catch
它的原因,因为你得到了NoSuchElementExcetion。而不是试图破解那个问题,你应该一直在寻找原因。
循环浏览整个文件后,将无法再读取任何元素。因此,您必须关闭扫描仪并打开一个新扫描仪。
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();
}
in.close();
double[] list = new double[nums];
in = new Scanner(new File("numbers.txt")); // new scanner
try{
for (int i = 0; i < list.length; i++){
list[i] = in.nextDouble();
}
}catch(NoSuchElementException e){
System.out.print(e.getMessage());
}
答案 5 :(得分:0)
while(in.hasNextDouble() == true){
nums++;
in.nextDouble();
}
该循环已经扫描了文件中的数字。
要解决这个问题,你可以弄清楚如何在上面的while循环中输入数字,或者创建一个新的Scanner:
in = new Scanner(new File("numbers.txt")); // redefine Scanner "in"