2

「H」という化合物があり、「H」、「C」、「O」、「N」のいずれかを追加したいと思います。現在のコンパウンドに追加しているコードをチェックインするにはどうすればよいですか?

次に、現在の化合物に追加する場合、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

}
4

4 に答える 4

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
于 2012-11-15T02:54:09.077 に答える
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
}

ただし、文字列を使用する代わりに、データをラップするクラスを作成することを強くお勧めします

于 2012-11-15T03:02:43.790 に答える
0

大文字、小文字、および数字をキャプチャする正規表現を作成したいと考えています。これにより、数式がさまざまな要素とその数に分解されます。カウントを保持するためにマップを使用するとうまくいくはずです。

のような入力でC8H10N4O2

次のような結果になります。

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

これを両方のオペランドで行い、カウントを合計します。

マップのキーを反復処理し、それらの数をまとめて答えを出します。キーをどのように反復処理するかは、おそらく化学命名規則によって決定する必要がありますが、私は幸いなことにその規則を知りません.

于 2012-11-15T02:55:31.130 に答える
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   
于 2012-11-15T03:55:04.553 に答える