【问题标题】:Am I Instantiating an Object from File, when I want to create an ArrayList from File? Java当我想从文件创建一个 ArrayList 时,我是在从文件实例化一个对象吗?爪哇
【发布时间】:2015-02-18 15:03:22
【问题描述】:

我们被指派将文本文件转换为几何对象的 ArrayList。问题是我不知道我是否将其转换为 ArrayList 或只是实例化了一个对象? Eclipse 声称我没用过 ArrayList 库

文本文件看起来像这样:

圆圈,红色,假,4.0

圆形,蓝色,真,2.0

圆形,蓝色,真,10.0

矩形,黄色,真,10.0,6.0

矩形,绿色,真,5.0,11.0

矩形,红色,真,20.0,15.0

到目前为止,我已经用我的代码做到了这一点:

public class Driver {

    public static void main(String[] args) throws FileNotFoundException {

        GeometricObject g = null;
        File diskFile = new File("e:/temp/obj.txt");
        Scanner diskScanner = new Scanner(diskFile);
        while (diskScanner.hasNext()) {
            String list = diskScanner.nextLine();

            g = recreateObject(list);
        }
        diskScanner.close();
    }

    private static GeometricObject recreateObject(String list) {

        String[] data = list.split(",");
        String geoObject = data[0];

        if (geoObject.equals("Circle")) {
            String color = data[1];
            boolean filled = Boolean.valueOf(data[2]);
            double radius = Double.valueOf(data[3]);
            return new Circle(color, filled, radius);
        }

        if (geoObject.equals("Rectangle")) {
            String color = data[1];
            boolean filled = Boolean.valueOf(data[2]);
            double length = Double.valueOf(data[3]);
            double width = Double.valueOf(data[4]);
            return new Rectangle(color, filled, length, width);
        }

        return null;
    }
}

我想将每个 GeometricObject 存储到“ArrayList list = new ArrayList();”中[尚未实施] 但我不知道该怎么做。

【问题讨论】:

  • 尚未运行代码,但看起来您正在读取每一行,从中生成GeometricObject 并...丢弃它。所以你很接近。您需要创建一个List<GeometricObject> 并在创建时将每个对象添加到其中。

标签: java arraylist instantiation


【解决方案1】:

只需在 while 循环外声明 ArrayList,然后在循环内添加新对象 g...

List<GeometricObject> geoList = new ArrayList<GeometricObject>();
while(diskScanner.hasNext()){
    String list = diskScanner.nextLine();
    g = recreateObject(list);

    geoList.add(g);

}

【讨论】:

  • 通过接口引用对象通常是最佳实践。在你的情况下 List geoList = new ArrayList();
  • @antonio 好收获!更新了示例。
  • 哎呀,这比我想象的要简单。哈哈,谢谢,我试图在 for 循环和 if 语句中使用 .add() 方法。有时我对简单性有一个真正的问题。
  • @shirrine 我认为在使用 diskScanner.hasNext() 方法时,它会删除 .txt 文件的最后一行。
  • 嗯...你在看什么?还是没看到?哈哈
猜你喜欢
  • 2012-02-18
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多