単純な問題がありますが、最近気が狂いそうになっています。私は化学プログラム(より具体的にはAndroidアプリ)を作成しており、ユーザーが入力した要素を分離するメソッドを持っています。例えば「FeZnKPb」と入力すると、「Fe」「Zn」「K」「Pb」に分かれます。
そのために、いくつかのネストされたループと変数を使用して制御しています。Chem[] 配列で定義されたすべての要素があります。分離された要素は、savedChem[] という配列に格納されます。基本的には、すべての要素定数 (Chem[]) をループし、入力と一致する場合、それらの要素の名前と式を savedChem[] にコピーするだけです。
これが私のコードです:
public void separateElements(String Input)
{
boolean found = false;
int start = 0;
int end = 2;
int length = Input.length();
while(length >= end)
{
for(int x = 0; x < numChemicals; x++)
{
if((end + 0) > length)
{
end += 5;
break;
}
if(Input.substring(start, end).equals(Chem[x].getFormula()))
{
savedChem[numSaved].setName(Chem[x].getName());
savedChem[numSaved].setFormula(Chem[x].getFormula());
numSaved++;
start += 2;
end += 2;
found = true;
}
else
{
found = false;
}
}
if(!found)
{
start += 2;
end += 2;
}
}
}
私の問題は、「Fe」や「Zn」などの 2 文字の要素でしか機能しないことです。「K」なども認識してほしい。もう 1 つの問題は、他の要素をスキップする場合があることです。たとえば、「FeZnHg」と入力すると、「Fe」、「Zn」、「Hg」に分けられます。しかし、「ZnFeHg」のように順番を変えて入力すると、なぜか「Zn」と「Hg」しか検出されず、「Fe」が検出されません。
これを正しく機能させるには、他にどのような方法でこれを解決できますか?