【发布时间】:2015-04-19 01:34:43
【问题描述】:
我一直在处理一项任务,遇到了困难。这是一个创建元素周期表的程序。要创建每个元素,我需要获取一个文件(CSV),拆分它,并将每个拆分部分设置为一个名为“元素”的对象的属性。分割文件的每一行并读入到目前为止都没有问题。但是,我一直坚持如何获取每个部分并将其添加为 Element 对象的属性。任何人都可以对此有所了解吗?
这是我的代码:
“周期表”类:
public class PeriodicTable {
private String line;
private String[] parts;
private String filename = "file.csv";
public PeriodicTable() throws IOException {
}
public void readValues(String filename) throws IOException{
Scanner sc = new Scanner(new FileReader(filename));
ArrayList<Element> ar1 = new ArrayList<Element>();
while(sc.hasNextLine()){
line = sc.nextLine();
parts = line.split(",");
Element el = new Element();
el.setChemicalName(parts[0]);
el.setAtomNum(parts[1]);
el.setMeltPoint(parts[3]);
el.setBoilPoint(parts[4]);
el.setDensity(parts[5]);
el.setAtomWeight(parts[6]);
// System.out.println(el.getChemicalName());
//System.out.println(el.getAtomWeight());
ar1.add(el);
}
System.out.println(ar1);
}
}
“元素”类
public class Element {
private String chemicalName;
private String atomNum;
private String boilPoint;
private String meltPoint;
private String density;
private String atomWeight;
public Element() throws IOException{
}
/**
* @return the chemicalName
*/
public String getChemicalName() {
return chemicalName;
}
/**
* @param chemicalName the chemicalName to set
*/
public void setChemicalName(String chemicalName) {
this.chemicalName = chemicalName;
}
/**
* @return the atomNum
*/
public String getAtomNum() {
return atomNum;
}
/**
* @param atomNum the atomNum to set
*/
public void setAtomNum(String atomNum) {
this.atomNum = atomNum;
}
/**
* @return the boilPoint
*/
public String getBoilPoint() {
return boilPoint;
}
/**
* @param parts2 the boilPoint to set
*/
public void setBoilPoint(String parts2) {
this.boilPoint = parts2;
}
/**
* @return the meltPoint
*/
public String getMeltPoint() {
return meltPoint;
}
/**
* @param parts2 the meltPoint to set
*/
public void setMeltPoint(String parts2) {
this.meltPoint = parts2;
}
/**
* @return the density
*/
public String getDensity() {
return density;
}
/**
* @param density the density to set
*/
public void setDensity(String density) {
this.density = density;
}
/**
* @return the atomWeight
*/
public String getAtomWeight() {
return atomWeight;
}
/**
* @param input the atomWeight to set
*/
public void setAtomWeight(String input) {
this.atomWeight = input;
}
@Override
public String toString(){
return chemicalName;
}
}
因为String.split() 方法使用一个数组来保存每个拆分的部分,所以我尝试使用对保存该值的部分数组中的索引的引用来为每个属性设置值,例如...。
el.setChemicalName(parts[0]));
但是,这似乎不起作用 - 当我尝试打印出该变量的值时,我通常会得到一个空值。
【问题讨论】:
-
如果你先读入关于你正在阅读的元素的必要数据,它会更干净一些。并在制作对象时立即传递这些属性值。因此,您将它们作为参数传递给构造函数。这样您就不必在创建实例后设置它们。显示“线”和“部分”可能表明原因。