2012-11-15 19 views
2

我有一個化學化合物,例如'H',我想爲其添加'H','C','O'或'N'。我怎樣才能在代碼中檢查我正在添加到當前化合物中的哪一個?檢查字符串以查看Java中正在添加的內容

第二次,當我添加到我目前的化合物可能是H2。所以如果我添加了H,它會變成H2H,但我希望它是H3,我該如何解決這個問題?

我真的不知道做編碼明智的話,但

String Compound = "H2"; 
String a="H"; 
String b="C"; 
String c="O"; 
string d="N"; 

if (I am adding "H" to Compound){ 

//do something 

} 

if(I am adding "C" to Compound) { 

//do something else 

} 
+1

你能提供你期望的功能嗎?我不清楚。 – Pankaj

+0

更具體。一些示例代碼會非常有幫助。 – JimN

+0

我想檢查我添加到它。例如,如果我有H,我想檢查是否添加了另一個'H',或'C'或'N'或'O'。 – Joe24

回答

2

爲了使事情變得更容易理解和更,我想用Compound類自己可能工作的面向對象如預期的。

class Compound { 
    String last; 
    String compound; 
    int lastSuffixCount; 

    Compound() { 
     this.last = ""; 
     this.compound = ""; 
     this.lastSuffixCount = 0; 
    } 

    public String getCompound() { 
     return compound; 
    } 

    public void setCompound(String compound) { 
     this.compound = compound; 
    } 

    public void add(String suffix, int times) { 
     if (suffix.equals(this.last) && times > 0) 
     { 
      this.compound = compound.replace(lastSuffixCount + "", ""); 
      this.lastSuffixCount = lastSuffixCount + times; 
      this.compound += lastSuffixCount; 
     } else if (times > 0) { 
      this.compound += suffix + times; 
     } 
     this.lastSuffixCount = times; 
     this.last = suffix; 
    } 
} 

採樣驅動程序:

public static void main(String[] args) { 
    Compound c = new Compound(); 
    c.add("H", 2); 
    System.out.println(c.getCompound()); 
    c.add("H", 1); 
    System.out.println(c.getCompound()); 
    c.add("O", 6); 
    c.add("H", 4); 
    System.out.println(c.getCompound()); 
} 

輸出:

H2 
H3 
H3O6H4 
+0

我同意,OO是答案。但是,不是將化合物作爲String存儲在Compound類中,而是使用Object的集合。例如,使用Map 可以很好地工作,將元素(即'H','C','O'或'N')映射到計數。然後,您可以輕鬆地將地圖的數據轉換爲正確的字符串表示形式。通過這種設計,「H2」+「H」=「H3」問題變得微不足道! – DaoWen

+0

感謝您的幫助。我只是有一個問題,當我做一些像 複合a; a =新化合物(); a.setCompound(「H」); a.add(「C」,1); 它會覆蓋以前的化合物,而不是添加到origianl,除非我做錯了什麼 – Joe24

+0

@ Joe24請檢查我的答案,我已經包含了一個示例驅動程序。接受我的答案,如果它對你有用。 – Juvanis

0

要構造一個正則表達式,將捕獲大寫字母,下面的小寫字母和數字。這將把公式分解成不同的元素和數量。使用地圖來保存計數應該有效。

有了這樣C8H10N4O2

輸入最終你會喜歡的東西:

{ 
    "C" : 8, 
    "H" : 10, 
    "N" : 4, 
    "O" : 2 
} 

有兩個操作數做到這一點,並添加計數在一起。

迭代地圖的按鍵,並將它們與他們的計數結合在一起以作答案。如何迭代鍵可能必須由化學命名規則決定,其中我非常無知。

0

我感到有點困惑(I am adding "C" to Compound)

你想檢測,如果你添加字符串包含「C」(或其他字符串)?

使用String.indexOf(String s)

例如:

String c = "C"; 
String somethingAdding = "CH3"; 
if(somethingAdding.indexOf(c) == -1) 
{ 
    // NOT adding C 
} 
else 
{ 
    // adding C 
} 

但我真的建議你作一個類來包裝,而不是使用字符串

0

這裏的數據,是我的OO方法:

public class Compound { 

    private static Pattern elementPattern = Pattern.compile("[A-Z]\\d*"); 

    private Map<Character, Integer> elements; 

    public Compound(String compoundString) { 
     elements = new HashMap<Character, Integer>(); 

     Matcher matcher = elementPattern.matcher(compoundString); 
     while(matcher.find()) { 
      String elementAndCount = m.group() 

      char element = elementAndCount.charAt(0); 
      int count = (elementAndCount.length() > 1) ? 
        Integer.valueOf(elementAndCount.substring(1)) : 
        1; 

      elements.put(element, count); 
     } 
    } 

    public void addElement(Character element) { 
     addElement(element, 1); 
    } 

    public void addElement(Character element, int count) { 
     if (elements.containsKey(element)) { 
      int currentCount = elements.get(element); 
      elements.put(element, count + 1); 
     } else { 
      elements.put(element, 1); 
     } 
    } 

    @Override 
    public String toString() { 
     StringBuilder toReturn = new StringBuilder(); 
     for (Map.Entry<Character, Integer> entry : elements.entrySet()) { 
      toReturn.append("" + entry.getKey() + entry.getValue()); 
     } 
     return toReturn.toString(); 
    } 
} 

      if (element