【问题标题】:Read an array from a CSV file从 CSV 文件中读取数组
【发布时间】:2020-11-12 00:40:28
【问题描述】:

(编辑,更新代码) 我正在尝试完成从 CSV 文件中读取数组并返回汽车数组列表的任务。我通过了五个测试中的两个,但我认为我的问题是最后的“返回 null”。我不确定我应该返回什么。我试过翻阅我们的讲义并问过教授,他们都没有帮助。我不是在问答案,我只需要指出正确的方向

到目前为止,这是我的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Practice reading CSV files
 * 
 * @author 250 Instructors
 * @version Feb 2017
 *
 */
public class CarsForSale {

/**
 * Read an array from CSV file
 * 
 * @param aFile
 *            - string pointing to file
 * @return the array list of Cars; return null if error encountered
 */
public static ArrayList<Car> getCarsFromCSVFile(String aFile) {
    ArrayList<Car> cars = new ArrayList<Car>();
    
    File file = new File(aFile);
    try {
        Scanner scan = new Scanner(file);

        while (scan.hasNext()) {
            String car = scan.nextLine();
        }
        scan.close();
    }
    catch (FileNotFoundException e) {
        System.out.println("Failed to open file " + aFile);
        System.out.println(e);
        return null;
    }
    return cars; 
}

}

【问题讨论】:

  • 如果您的代码成功,我认为您想返回一个实际的数组列表,例如return cars;。您的返回类型是 ArrayList&lt;Car&gt; 而不是 ArrayList&lt;String&gt;,因此您需要创建 Car 对象并将它们添加到数组中,而不仅仅是创建字符串数组 ArrayList&lt;Car&gt; cars = new ArrayList&lt;Car&gt;();
  • @sorfiend 根据您之前发表的评论,我注意到我需要将ArrayList&lt;String&gt; 更改为ArrayList&lt;Car&gt;。这让我又通过了一项测试,现在它正朝着正确的方向前进。

标签: java arraylist file-io


【解决方案1】:

JavaDoc 注释说:

@return Cars 的数组列表;遇到错误返回null

如果你从 catch 块返回 null 并在方法结束时返回 cars,你将满足这些要求。

try {
    // read from file
}
catch (FileNotFoundException e) {
    // handle exception

    return null;
}

您可以阅读更多关于从 catch 块返回 here

【讨论】:

  • 谢谢你。我意识到我的最后一个 if 语句是不必要的,我将它浓缩在 catch 中。现在我试图找出try 中的while 循环。我知道那辆车不是字符串,所以我需要更改它,但我遇到了String car = scan.nextLine(); 行的问题。我编辑了它,现在它是Car car = scan.nextLine();,但它不是一个字符串,所以它有问题。
  • @BrandonBerry 你没有展示 Car 类的样子,请更新你的问题以包含它,但是,它应该有一个方法来创建一个 new car 对象。例如Car car = new Car(scan.nextLine());。这是关于对象和类如何工作的官方 java 教程:docs.oracle.com/javase/tutorial/java/concepts/index.html
  • @sorfiend 我用我当前的代码更新了原始问题
  • @BrandonBerry 我的意思是Car 类(它将位于另一个名为Car 的类文件中,例如public class Car{...)。该类应该有一个初始化器,它接受一个字符串来创建一个新的Car 对象。
【解决方案2】:

主要问题在于您要返回的内容和位置。 JavaDoc 说:

@return Cars 的数组列表;遇到错误返回null

任何错误都应该被您的 catch 块捕获,这意味着您希望在该 catch 块的末尾返回 null(如果您曾经输入过)。

要返回 Cars 的 ArrayList,首先您需要确保使用从文件中获取的输入创建 Car 对象,然后将这些对象添加到 ArrayList(而不是像您当前拥有的字符串)。

如果一切顺利,您应该在 try 块的末尾返回 Car 对象的 ArrayList。

try {
    // read from file, create Car objects and add the objects to an ArrayList

    return Cars;
}
catch (FileNotFoundException e) {
    // handle exception

    return null;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2018-08-23
    相关资源
    最近更新 更多