【问题标题】:I need to create an array list from a list of 1000 numbers on a txt file. Java我需要从 txt 文件中的 1000 个数字列表中创建一个数组列表。爪哇
【发布时间】:2020-07-28 17:04:09
【问题描述】:

数字在同一行,有 1000 行,每行都有一个数字。

这是我拥有的代码,但我在运行它时收到错误,它指向数组列表的 int 部分并显示意外类型。

import java.util.ArrayList;
import java.io.*;
import java.util.Scanner; 
public class Homework4
{
   public static void main(String[] args) throws IOException
   {
      //Variables 
      int num;
      int temp; 

      Scanner kb = new Scanner(new File("number.txt"));
      ArrayList<int> list = new ArrayList<int>();
      while (kb.hasNextLine())
      {
         list.add(kb.nextLine());


      }      

      //Close File
      inputFile.close();




   }
}

【问题讨论】:

  • 我对 Java 不太了解,但我认为 kb.nextLine() 会给你一个字符串。所以基本上你正在将字符串添加到 int arraylist。尝试将 readLine 转换为 int。

标签: java arrays loops file arraylist


【解决方案1】:

你必须使用包装类Integer

ArrayList&lt;int&gt; 更改为ArrayList&lt;Integer&gt;

同样,

long-> Long
double-> Double
char-> Character
float-> Float

您可以阅读更多关于基本类型集合herehere

此外,当您从文件中读取数据时,使用kb.nextLine() 它会返回字符串类型。您可以通过以下方式使用Integer.parseInt()将其转换为Integer类型。

list.add( Integer.parstInt( kb.nextLine() ) );

下一部分是关闭资源。 您尚未按名称 inputFile 声明变量。它必须是kb

kb.close();

完整代码如下

public static void main(String[] args) throws IOException {
    Scanner kb = new Scanner(new File("number.txt"));
    ArrayList<Integer> list = new ArrayList<>();
    while (kb.hasNextLine()) {
        list.add(Integer.parseInt(kb.nextLine()));
    }
    kb.close();
}

希望这会有所帮助。

【讨论】:

  • 这个答案很明确,确实有助于@Myles 了解问题所在。我可以看到你刚刚编辑过,也许你也可以添加这个的 Java 8 版本,这样它不仅有用而且是最新的。
【解决方案2】:

该代码中有几个错误。首先,将Integer 对象包装器用于int 原始类型。接下来,您需要使用Integer.parseInt() 方法将读取的String 解析为整数类型。并关闭 Scanner 实例而不是未定义的文件变量。 试试下面的代码:

import java.util.ArrayList;
import java.io.*;
import java.util.Scanner; 
public class Homework4{

public static void main(String[] args) throws IOException
{
    //Variables
    int num;
    int temp;

    Scanner kb = new Scanner(new File("number.txt"));
    ArrayList<Integer> list = new ArrayList<>();
    while (kb.hasNextLine())
    {
        list.add(Integer.parseInt(kb.nextLine()));


    }

    //Close File
    kb.close();




}

}

【讨论】:

    【解决方案3】:

    既然你声称是从一个文本文件中读取,你可以使用java.nio.file.Files类来读取它,然后使用java的stream API将文本文件的每一行映射到一个Integer并收集所有这些@987654324 @s 转为java.util.List,如下代码所示:

    Path path = Paths.get("path-to-your-file");
    try {
        List<Integer> integers = Files.lines(path) // throws java.io.IOException
                                      .map(Integer::parseInt)
                                      .collect(Collectors.toList());
        System.out.println(integers);
    }
    catch (IOException x) {
        x.printStackTrace();
    }
    

    【讨论】:

    • 这个只在Java 8以后有效,我强烈推荐你开始使用它。
    猜你喜欢
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多