2010-12-29 10 views
0

化学式のバランスをとるJavaアプリケーションを作っています。私は各用語をループし、2人のarraylistsを作成します。あるarraylistでは、私はすべての要素のセットを持っています。例えば、(第1項において)方程式がC 6 H 12 O 6 + O 2 = CO 2 + H 2 Oである場合、Arraylistは{C、H、O}を有する。別の例では、対応する数字があるので、{6,12,6}を含みます。 (ケミカルバランサのヘルプ? (arraylistsから行列への変換)

(0,0)= 6 (1,0)が12 (2,0)= 6 を=私は次のようになり、マトリックス(4によって3)を形成するために、これらの全てを組み合わせることが必要0,1)= 0 (1,1)= 0 (2,1)= 2 (0,2)= 1 (1,2)= 0 (2,2)= 2 (0、上記の行列は、行0がC、行1がH、行2がOとなるように設計されています。列は次のようになります。用語(0,1,2,3)

arraylistsをマトリックスに変換するための提案はありますか?

+0

Ummです。私はあなたがそれをやっているように情報を失うことは確かです。それはマトリックスではありません。 (2,3)のようなものはどうですか?それは何を表していますか? – Falmarri

答えて

3

楽しいことやプロジェクトのためにこれをやっているのならば、大丈夫です。化学者が本当に拡張可能なアプリケーションを使用するためにこれを行っている場合は、> 100要素、多くの試薬と製品、および分数を満たす必要があります。オープンソースのJava化学ライブラリがたくさんあるので、私はあなたを紹介してくれるでしょう。車輪を再発明しないでください。 http://www.blueobelisk.org

これを行うには、Ugiによって開発されたボンド/電子マトリックスが真剣に必要です。あなたの最高の場所はUgi自身の論文です: www.iupac.org/publications/pac/1978/pdf/5011x1303.pdf

p 1307.

EDIT: これは現在の問題のために過剰です!

単純な行列アプローチは、既知の元素についてはネーム(例えば100)の列​​と多くの反応物および生成物として不定数の行(nR、nP)との2つの結合行列R(反応物)およびP従って、行列は一般に等次元ではない。反応物[nR] [nelem]および生成物[nP] [nelem]。また、乗算器nreact [nR]とnprod [nP]の2つの列ベクトルがあります。一般に、化学式および乗数は一般的には整数であるが、必ずしもそうである必要はない(化合物は要素の単純な整数比を持たないことがある)ことに留意されたい。

これに取り組むために私は独自のCMLFormulaとCMLReaction Javaクラスを使っています(http://www.xml-cml.org参照)。あなたがそこに開始を歓迎している - それはあなたが配列の行列を表すことができ

0

楽になります:列のデータの配列として各行を考える:

[[6 12 6], 
[0 0 2], 
[1 0 2], 
[0 2 1]] 

この方法で、あなたの行列ポイントがあります指定された点の別の配列内の配列位置を参照します。他の言葉で:

matrix[0][2] == 2 

(最初の配列(0)、第二の位置のための(1))

でも、私は化学のあなたのロジックのためかに対して話すことはできません。:)

関連する問題