【问题标题】:Object needs to created from the file and placed into an array需要从文件中创建对象并放入数组中
【发布时间】:2017-10-12 07:35:27
【问题描述】:

我正在尝试为每一行文本创建一个对象,并在创建每个对象时将其放入一个数组中。我正在努力将它放入一个数组中。这是我的代码:

    File inFile = new File("shareholders.txt");
    Scanner inputFile = new Scanner(inFile);
    String str;
    Shareholder shareholder = new Shareholder();

    while (inputFile.hasNext()) {

        str = inputFile.nextLine();
        String tokens[] = str.split(",");
        shareholder.setID(tokens[0]);
        shareholder.setName(tokens[1]);
        shareholder.setAddress(tokens[2]);
        shareholder.setPortfolioID(tokens[3]);

    }

【问题讨论】:

  • 你的数组在哪里?
  • 你有数组吗?你有需要插入索引的计数器吗?您是否正确处理了数组大小或处理太多元素?由于您忽略了包含任何数组处理代码,因此我看不出问题在哪里。

标签: java arrays file text


【解决方案1】:

如果你有固定数量的股东,你可以这样做——

  File inFile = new File("shareholders.txt");
    Scanner inputFile = new Scanner(inFile);
    String str;
    int i=0;
    Shareholder[] shareholder = new Shareholder[n];

    while (inputFile.hasNext()) {
        str = inputFile.nextLine();
        String tokens[] = str.split(",");
        shareholder[i++] = new Shareholder(tokens[0],tokens[1],tokens[2],tokens[3]);
    }

或者如果不知道股东人数,那么你可以使用列表 -

File inFile = new File("shareholders.txt");
Scanner inputFile = new Scanner(inFile);
String str;
List<Shareholder> list = new ArrayList<>();

while (inputFile.hasNext()) {
    Shareholder shareholder = new Shareholder();
    str = inputFile.nextLine();
    String tokens[] = str.split(",");
    list.add(new Shareholder(tokens[0],tokens[1],tokens[2],tokens[3]));
}

【讨论】:

    【解决方案2】:

    我认为股东对象列表在这里可能最有意义:

    File inFile = new File("shareholders.txt");
    Scanner inputFile = new Scanner(inFile);
    String str;
    List<Shareholder> list = new ArrayList<>();
    
    while (inputFile.hasNext()) {
        Shareholder shareholder = new Shareholder();
        str = inputFile.nextLine();
        String tokens[] = str.split(",");
        shareholder.setID(tokens[0]);
        shareholder.setName(tokens[1]);
        shareholder.setAddress(tokens[2]);
        shareholder.setPortfolioID(tokens[3]);
    
        list.add(shareholder);
    }
    

    列表之所以有意义,是因为您可能不知道输入文件中有多少股东。因此,在这种情况下,数组可能无法很好地工作(即使股东人数是固定的,它也可能在以后发生变化)。

    【讨论】:

    • @DaveNewton 引用圣经,我觉得知道数组、集合等何时合适是一种只需要知道的事情。也许通过看到我的建议,OP 会明白为什么收藏在这里有意义。
    • 同意,但也许这是一条评论。我的意思是,这显然是学校作业。
    【解决方案3】:

    在读取文件之前,您无法知道文件有多少行。 有关行数的信息对于使用特定大小初始化数组很重要,否则您需要通过创建一个新的更大的数组来多次扩展数组。这是不好的做法和不好的表现。

    但不要使用数组本身,而是使用 arraylist 以便于使用,并且只返回一个简单的数组,该数组可以从您使用的 arraylist 中接收。

    作为解决此问题的方法,我的建议如下。请注意,以下代码并非 100% 完整,不会在其状态下运行。完成它并让它运行是你的工作。

    public void readFileIntoArray(String filename, Shareholder[] targetArray)
    {
        File sourceFile = new File(filename);
        // Read in the file to determine the number of lines (int numberOfLines)
        ArrayList<Shareholder> lines = new ArrayList<>(numberOfLines);
    
        Shareholder sh;
        while(file.hasNext())
        {
            sh = new Shareholder();
            //Parse data into Shareholderobject
            lines.add(sh);
        }
        return lines.toArray();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多