【问题标题】:Creating array from file; getting error: Exception in thread "main" java.util.NoSuchElementException: No line found从文件创建数组;出现错误:线程“main”中的异常 java.util.NoSuchElementException:找不到行
【发布时间】:2017-07-25 18:06:18
【问题描述】:

我要做的就是从文件中的数字创建一个数组...我对 java 还是很陌生,所以它可能不是最有效的方法,但我现在的知识有限。

当我运行它时,我收到以下消息:

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at CreateArray.main(CreateArray.java:27)

这是我对代码的微弱尝试:

import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;

public class CreateArray
{
  public static void main(String[] args) throws IOException
  {
    File file = new File("Numbers.txt");
    Scanner inputFile = new Scanner(file);

    // Find the number of lines in the file
    int count = 0;
    while (inputFile.hasNextLine())
    {
      String str = inputFile.nextLine();
      count++;
    }

    // Create array
    double[] numbers = new double[count];

    // Add numbers to array
    String str;
    while (inputFile.hasNextLine());
    {
      for (int i = 0; i < count; i++)
      {
        str = inputFile.nextLine();
        numbers[i] = Double.parseDouble(str);
      }
    }

    // Display array
    for (int i = 0; i < numbers.length; i++)
      System.out.print(numbers[i] + " ");
  }
}

【问题讨论】:

  • 您的扫描仪已经使用第一个 while 循环到达文件的末尾,因此第二个 while 循环没有任何内容。在循环之间关闭并重新打开文件或合并循环。

标签: java arrays file


【解决方案1】:

当您使用扫描仪在代码中写入inputFile.hasNextLine() 时,您实际上已经从文件中读取了一行。
正如@tima 所说,您在第一个while 循环中完成了文件的读取。试试看这个java: about read txt file into array

【讨论】:

    【解决方案2】:

    像 ArrayList 一样使用 Collection 。所以在读取文件时你不需要声明数组的大小。

    File file = new File("Numbers.txt");
    Scanner inputFile = new Scanner(file);
    List<Double> myList = new ArrayList<Double>();
    
    while (inputFile.hasNextLine()) {
        String str = inputFile.nextLine();
        try {
            myList.add(Double.parseDouble(str));
        } catch (NumberFormatException e) {
            // TODO: handle exception
        }
    }
    
    for (Double data : myList) {
        System.out.println(data);
    }
    

    如果你需要数组类型,那么使用这个:-

    Double data[] = new Double[myList.size()];
        myList.toArray(data);
    
        for (int i = 0; i < data.length; i++) {
            System.out.println(data[i]);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2015-04-15
      • 2017-04-20
      • 1970-01-01
      相关资源
      最近更新 更多