如何构造用户(/输入)指定数量的对象

时间:2019-06-20 23:33:05

标签: java class object

我目前正在做一个入门级的本科CS课程(学习使用Java构建“程序”和“类”的基础知识)。

我的个人(与工作相关)项目的相关部分:我有一个县的邮政编码列表。

我要定义一个名为“县”的类。然后,我将使用此类来构造County类型的对象,称为“ middlesex”。

即:County Middlesex = new County();

现在,在这个对象中,我想构造许多类类型为ZipCode的对象。

即:ZipCode objName = new ZipCode();

(每个这样的ZipCode对象将包含某些实例数据)。

我的问题是这个。假设我不知道米德尔塞克斯县包含多少个邮政编码。但是,我有一个.txt文件,其中仅包含Middlesex县的所有邮政编码列表。

假设此列表中有n个邮政编码。

在类类型为“县”的对象“ middlesex”中,我想建立一个循环。此循环将扫描列表中的每个邮政编码,然后为每个邮政编码构造一个类类型为ZipCode的对象。

因此循环可能要经过n次迭代,并构造n个ZipCode类型的对象。

因此,对于循环的每次迭代,必须创建唯一的对象引用名称(对应于列表中的特定邮政编码)。

这个问题的一部分(但又独特又可选)是我想知道如何(如果可能的话),可以建立一个结构,该结构允许将输入(扫描)的字符串用作对象的名称,参考。

如果使用不正确的术语,我深表歉意。我知道很多人会建议使用数组。我尚未了解它们,但我必须在这个周末读到它们,以便上学。我只想尝试一两天,然后继续使用数组来执行此任务。

因此,如果我对任何人都有意义,那么在没有数组的情况下我能做些什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

您描述的是一个非常基本的场景,其中一个对象包含(可能)对第二种类型的对象的许多引用,我们称之为“ composition”的构造函数,这里的关系是“ has-a”关系,县(或县)有一个邮政编码

与使用继承错误地尝试解决此问题相反,“继承”关系或“ is-a”关系-县不是邮政编码,而邮政编码不是县。

创建此代码的代码可能非常简单,例如:

import java.util.ArrayList;
import java.util.List;

public class County {
    private String name;
    private List<String> zipCodes = new ArrayList<>();

    // constructor that takes county name
    public County(String name) {
        this.name = name;
    }

    public void addZipCode(String code) {
        zipCodes.add(code);
    }

    // ..... more code

如果邮政编码是单个字符串,则无需为此创建新的类。但是,如果它比单个String更为复杂并且容纳更多数据,则为ZipCode创建一个类,并将上面的代码更改为类似的

import java.util.ArrayList;
import java.util.List;

public class County {
    private String name;
    private List<ZipCode> zipCodes = new ArrayList<>();

    // constructor that takes county name
    public County(String name) {
        this.name = name;
    }

    public void addZipCode(ZipCode code) {
        zipCodes.add(code);
    }

    // getters, setters, a decent toString method override...

ZipCode可以包含的位置。...

public class ZipCode {
    String code;
    // other fields if needed....

    public ZipCode(String code) {
        this.code = code;
    }

    // ....

然后在读取数据时,创建您的County对象,并在读入每个邮政编码时,使用addZipCode(...)方法将其添加到适当的County对象中。

答案 1 :(得分:0)

zipCode是ZipCode类型的对象,那么它的字段是什么?考虑一下使其成为对象而不是变量的原因

“因此循环可以经过n次迭代,并构造n个ZipCode类型的对象” 不可否认,如果不使用数组,这是不可能的 “允许将输入(扫描)的字符串用作对象名称的结构” 不行。