你好
我正在编写一个图形界面程序来解决化学方程式和其他功能,例如在不同的窗口中显示元素周期表。
正如标题所暗示的那样,我遇到了对象解析器的字符串问题,并希望获得一些帮助以使其正常工作。
它得到一个String公式 ( C6H14 + O2 => CO2 + H2O) 并将其划分为不同的对象(Molecule(s) 有一个 Element(s) 列表,用于存储名称和数量),然后返回。注意*我将其设置为void仅用于测试目的。
我将函数分为两部分:第一部分读取StringElement 对象;名称和数量。第二部分制作 Molecule 对象并检查一个分子从哪里开始,另一个分子在哪里结束,并相应地放置元素对象。这就是为什么我不过滤掉诸如+,=和之类的数字操作>。
解析器:
public void formatFormula(String formula) {
List[] temp = new List[] {
new ArrayList<Molecule>(),
new ArrayList<Molecule>()
};
List<Element> ell = new ArrayList<>();
boolean newMol = true;
String crnN = null;
int crnQ=0;
int side = 0;
for (int i=0;i<formula.length()+1;i++) {
String d;
try { d = formula.substring(i,i+1); } catch (Exception e) { d = formula.substring(i-1); }
if (Character.isWhitespace(d.charAt(0))) continue;
if (isNumber(d)) {
crnQ = Integer.parseInt(crnQ+d);
} else if (d == d.toUpperCase()) {
if (crnN != null)
ell.add(new Element(crnN,crnQ));
crnN = d;
crnQ = 0;
} else {
crnN = crnN + d;
}
}
我从中得到的价值观是完全错误的。第二个 list on side2是空的, list1和2on side2具有相同的值,并且没有一个 Molecule 对象具有多个元素。
它应该返回一个分子的二维数组,一个在箭头之前,一个在箭头之后。那些 Molecule 对象存储 Element 对象。
输入: C6H14 + O2 => CO2 + H2O 输出:
C6H14 + O2 => CO2 + H2O
Obj(Molecule){ | Obj(Molecule){ || Obj(Molecule){ | Obj(Molecule){
Obj(Element){C:6} | Obj(Element){O:2}} || Obj(Element){C:1} | Obj(Element){H:2}
Obj(Element){H:14}} || Obj(Element){O:2}} | Obj(Element){O:1}}
注意*这只是对象的表示。但是Molecules 存储一个 s 列表,该列表Element又存储 aString和一个int值。
手掌心
30秒到达战场
相关分类