我目前正在做一个入门级的本科CS课程(学习使用Java构建“程序”和“类”的基础知识)。
我的个人(与工作相关)项目的相关部分:我有一个县的邮政编码列表。
我要定义一个名为“县”的类。然后,我将使用此类来构造County类型的对象,称为“ middlesex”。
即:County Middlesex = new County();
现在,在这个对象中,我想构造许多类类型为ZipCode的对象。
即:ZipCode objName = new ZipCode();
(每个这样的ZipCode对象将包含某些实例数据)。
我的问题是这个。假设我不知道米德尔塞克斯县包含多少个邮政编码。但是,我有一个.txt文件,其中仅包含Middlesex县的所有邮政编码列表。
假设此列表中有n个邮政编码。
在类类型为“县”的对象“ middlesex”中,我想建立一个循环。此循环将扫描列表中的每个邮政编码,然后为每个邮政编码构造一个类类型为ZipCode的对象。
因此循环可能要经过n次迭代,并构造n个ZipCode类型的对象。
因此,对于循环的每次迭代,必须创建唯一的对象引用名称(对应于列表中的特定邮政编码)。
这个问题的一部分(但又独特又可选)是我想知道如何(如果可能的话),可以建立一个结构,该结构允许将输入(扫描)的字符串用作对象的名称,参考。
如果使用不正确的术语,我深表歉意。我知道很多人会建议使用数组。我尚未了解它们,但我必须在这个周末读到它们,以便上学。我只想尝试一两天,然后继续使用数组来执行此任务。
因此,如果我对任何人都有意义,那么在没有数组的情况下我能做些什么?
谢谢。
答案 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类型的对象” 不可否认,如果不使用数组,这是不可能的 “允许将输入(扫描)的字符串用作对象名称的结构” 不行。