我需要一些帮助,我正在研究这个项目,任何人的投入都很有价值。我根本没有编程经验。我已经创建了一个累积参数,并通过我猜的条款循环但不能进一步发展。
公式makeMolecular
您需要为分子式创建累积参数,
循环旧公式中的条款,
在每次迭代中,找到按字母顺序排列的第一个术语,将其添加到分子式中,并将其从旧公式中删除,
结合分子式中的术语,如果它们具有相同的元素。
您正在使用的过程称为选择排序。
请记住,每个元素必须只出现在分子式中一次,但它可以帮助您首先构建一个只生成分子式的版本,其中元素按字母顺序排列。
这是我的代码:
public void makeMolecular()
{
ArrayList<Term> terms2 = new ArrayList<Term>();
ArrayList<Term> terms3 = new ArrayList<Term>();
for (Term s : terms)
{
Term r=nextElement();
if (r == r)
{
terms3.add(r);
terms2.remove(r);
}
}
}
如果需要,这是构造函数:
public Formula(String s)
{
terms = new ArrayList<>();
String termstart = s;
for (int i = s.length()-1; i>=0; i--)
{
if((Character.isUpperCase(s.charAt(i)))) //if character is uppercase at i, starts at i
{
terms.add(0, new Term(termstart.substring(i)));
termstart = s.substring(0, i);
}
}
}
答案 0 :(得分:0)
所以,你想从公式中提取所有使用的原子,没有重复,然后使用插入排序按字母顺序对它们进行排序
public static List<Character> getAtoms(String formula) {
final List<Character> atoms = new ArrayList<Character>();
for (int i=0, imax=formula.length(); i<imax; i++)
if (Character.isAlphabetic(formula.charAt(i))) {
final Character o = Character.toUpperCase(formula.charAt(i));
if (!atoms.contains(o))
atoms.add(o);
}
return atoms;
}
public static List<Character> getSortedAtoms(String formula) {
final List<Character> original = getAtoms(formula);
final List<Character> sorted = new ArrayList<Character>();
if (original.size() == 0)
return sorted;
final int size = original.size();
for (int i=0; i<size; i++) {
Character best = original.get(i);
for (int k=i+1; k<size; k++)
if (original.get(k) < best)
best = original.get(k);
sorted.add(best);
}
return sorted;
}
这些应该指向正确的方向。
如果您需要从/转换为String / List,请使用以下行:
public static List<Character> stringToList(String text) {
final List<Character> theList = new ArrayList<Character>();
for (int i=0, imax=text.length(); i<imax; i++)
theList.add(text.charAt(i));
return theList;
}
public static String listToString(List<Character> x) {
String theString = "";
for (Character c : x)
theString += c;
return theString;
}