如何在阵列列表中找到按字母顺序排列的第一个术语?

时间:2016-04-14 12:26:59

标签: java arraylist

我需要一些帮助,我正在研究这个项目,任何人的投入都很有价值。我根本没有编程经验。我已经创建了一个累积参数,并通过我猜的条款循环但不能进一步发展。

公式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); 

   }
 }
}

1 个答案:

答案 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;
}