java - 如何从文本文件创建对象数组?

标签 java arrays arraylist data-structures java.util.scanner

我正在尝试完成当前正在执行的 Java 类的作业,但在从文本文件创建对象数组(本例中为长颈鹿)时遇到一些问题。谁能给我一些建议吗?

我遇到的问题是,当我尝试打印 ArrayList 或转换后的数组的值时,我得到类似 [giraffe.Giraffe2@55f96302, giraffe.Giraffe2@3d4eac69] 的内容,而不是文本文件中的值。

我用多种不同的方式创建了一个名为 Giraffes 的类,似乎最有意义的是使用数组来存储构造函数的值并设置数组中的值。

package giraffe;

public class Giraffe2 {
protected String birthLocation, sire, dam, subSpecies, zoo, city,
state,event, name,
localId, birthDate, sex;
protected int giraffeId;
public void Giraffe2(String array[]){
    this.giraffeId = array[0];
    this.sex = array[1];
    this.birthDate = array[2];
    this.sire = array[3];
    this.dam = array[4];
    this.birthLocation = array[5];
    this.localId = array[6];
    this.name = array[7];
    this.subSpecies = array[8];
    this.zoo = array[9];
    this.city = array[10];
    this.state = array[11];
    this.event = array[12];
 }
}

我用来创建长颈鹿的代码是:

package giraffe;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class HW3 {

public static void main(String[] args) throws IOException {
    //Create an ArrayList that will hold the Giraffes
    ArrayList<Giraffe2> giraffes = new ArrayList<>();

    //Create an array that will hold tab-del values
    String temp[] = new String[13];

    //Define the file that will be used for creating objects
    String fileLocation = "theHerd.txt";
    File textFile = new File(fileLocation);

    //Populate the giraffes ArrayList with items from the text file
    int i = 0;
    while(i < 90) {
    if (textFile.canRead()) {
        Scanner in = new Scanner(textFile);
        in = new Scanner(textFile);
        while (in.hasNextLine()) {
    //Split each line at every tab (13 times), store in array temp
            temp = in.nextLine().split("\\t", 13);
    //Create a new giraffe from the array of strings in temp
            giraffes.add(new Giraffe2(temp));
            i++;
        }

        in.close();
    }
    //Print out ArrayList of giraffes
    System.out.println(giraffes);
    //Convert ArrayList to array
    Object[] giraffes2 = giraffes.toArray();
    //Print out a few examples
    System.out.println(giraffes2[0]);
    System.out.println(giraffes2[1]);
    System.out.println(giraffes2[89]);
    }
 }
}

这段代码的输出是:

[giraffe.Giraffe2@55f96302, giraffe.Giraffe2@3d4eac69, giraffe.Giraffe2@42a57993, giraffe.Giraffe2@75b84c92, giraffe.Giraffe2@6bc7c054, giraffe.Giraffe2@232204a1, giraffe.Giraffe2@4aa298b7, giraffe.Giraffe2@7d4991ad, giraffe.Giraffe2@28d93b30, giraffe.Giraffe2@1b6d3586, giraffe.Giraffe2@4554617c, giraffe.Giraffe2@74a14482, giraffe.Giraffe2@1540e19d, giraffe.Giraffe2@677327b6, giraffe.Giraffe2@14ae5a5, giraffe.Giraffe2@7f31245a, giraffe.Giraffe2@6d6f6e28, giraffe.Giraffe2@135fbaa4, giraffe.Giraffe2@45ee12a7, giraffe.Giraffe2@330bedb4, giraffe.Giraffe2@2503dbd3, giraffe.Giraffe2@4b67cf4d, giraffe.Giraffe2@7ea987ac, giraffe.Giraffe2@12a3a380, giraffe.Giraffe2@29453f44, giraffe.Giraffe2@5cad8086, giraffe.Giraffe2@6e0be858, giraffe.Giraffe2@61bbe9ba, giraffe.Giraffe2@610455d6, giraffe.Giraffe2@511d50c0, giraffe.Giraffe2@60e53b93, giraffe.Giraffe2@5e2de80c, giraffe.Giraffe2@1d44bcfa, giraffe.Giraffe2@266474c2, giraffe.Giraffe2@6f94fa3e, giraffe.Giraffe2@5e481248, giraffe.Giraffe2@66d3c617, giraffe.Giraffe2@63947c6b, giraffe.Giraffe2@2b193f2d, giraffe.Giraffe2@355da254, giraffe.Giraffe2@4dc63996, giraffe.Giraffe2@d716361, giraffe.Giraffe2@6ff3c5b5, giraffe.Giraffe2@3764951d, giraffe.Giraffe2@4b1210ee, giraffe.Giraffe2@4d7e1886, giraffe.Giraffe2@3cd1a2f1, giraffe.Giraffe2@2f0e140b, giraffe.Giraffe2@7440e464, giraffe.Giraffe2@49476842, giraffe.Giraffe2@78308db1, giraffe.Giraffe2@27c170f0, giraffe.Giraffe2@5451c3a8, giraffe.Giraffe2@2626b418, giraffe.Giraffe2@5a07e868, giraffe.Giraffe2@76ed5528, giraffe.Giraffe2@2c7b84de, giraffe.Giraffe2@3fee733d, giraffe.Giraffe2@5acf9800, giraffe.Giraffe2@4617c264, giraffe.Giraffe2@36baf30c, giraffe.Giraffe2@7a81197d, giraffe.Giraffe2@5ca881b5, giraffe.Giraffe2@24d46ca6, giraffe.Giraffe2@4517d9a3, giraffe.Giraffe2@372f7a8d, giraffe.Giraffe2@2f92e0f4, giraffe.Giraffe2@28a418fc, giraffe.Giraffe2@5305068a, giraffe.Giraffe2@1f32e575, giraffe.Giraffe2@279f2327, giraffe.Giraffe2@2ff4acd0, giraffe.Giraffe2@54bedef2, giraffe.Giraffe2@5caf905d, giraffe.Giraffe2@27716f4, giraffe.Giraffe2@8efb846, giraffe.Giraffe2@2a84aee7, giraffe.Giraffe2@a09ee92, giraffe.Giraffe2@30f39991, giraffe.Giraffe2@452b3a41, giraffe.Giraffe2@4a574795, giraffe.Giraffe2@f6f4d33, giraffe.Giraffe2@23fc625e, giraffe.Giraffe2@3f99bd52, giraffe.Giraffe2@4f023edb, giraffe.Giraffe2@3a71f4dd, giraffe.Giraffe2@7adf9f5f, giraffe.Giraffe2@85ede7b, giraffe.Giraffe2@5674cd4d, giraffe.Giraffe2@63961c42]

giraffe.Giraffe2@55f96302
giraffe.Giraffe2@3d4eac69
giraffe.Giraffe2@63961c42

非常感谢任何帮助。我已经为此奋斗了几天,但我无法真正理解问题所在

最佳答案

为了使用 System.out.println 打印对象,您需要实现要打印的类的 toString() 方法。

关于java - 如何从文本文件创建对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29019388/

相关文章:

c++ - 用 sizeof 替换 strlen 来替换 c 字符串

java - 将 Java ArrayList 修剪为具有最新日期的不同行

java - 如何将Java写的 "ArrayList<ClassNod>"转成C++程序语言?

java - 如何在从下一个 fragment 按下的背面显示 fragment 中的列表?

c# - 如何为 Windows Phone 7 解析以下 JSON?

java - DefaultTableModel getValueAt 方法生成看似随机的结果

c++ - 查找数组其余部分的最大值

java - 在循环中创建具有不同名称的多个对象以存储在数组列表中

java - 代码效率: withoutX2

java - 单元测试 : Is it bad practice to call public methods (for setup) while testing another method?