2010-12-29 3 views
0

Ich mache eine Java-Anwendung, die chemische Gleichungen ausgleicht. Ich wiederhole jeden Ausdruck und erstelle zwei Arraylisten. In einer Arraylist habe ich die Menge aller Elemente. Zum Beispiel (im ersten Term), wenn die Gleichung C6H12O6 + O2 = CO2 + H2O ist, wird die Arraylist {C, H, O} haben. In einem anderen habe ich die entsprechenden Zahlen, also wird es {6,12,6} enthalten. Ich brauche alle diese zu kombinieren, um eine Matrix (3 x 4) zu bilden, das wäre:Hilfe mit einem chemischen Balancer? (Umwandlung von Arraylisten in Matrix) in Java

(0,0) = 6 (1,0) = 12 (2,0) = 6 (0,1) = 0 (1,1) = 0 (2,1) = 2 (0,2) = 1 (1,2) = 0 (2,2) = 2 (0, 3) = 0 (1,3) = 2 (2,3) = 1

Die obige Matrix ist so ausgelegt, dass Zeile 0 C, Zeile 1 H und Zeile 2 O ist. Die Spalten sind die Begriffe (0, 1, 2 und 3)

Haben Sie Vorschläge, die Arraylisten in eine Matrix umzuwandeln?

+0

Umm. Ich bin mir ziemlich sicher, dass du Informationen verlierst, so wie du es tust. Und das ist keine Matrix. Was ist mit etwas wie (2,3). Was bedeutet das? – Falmarri

Antwort

3

Wenn Sie dies aus Spaß oder ein Projekt tun, gut. Wenn Sie dies für eine echte erweiterbare Anwendung tun, die von Chemikern verwendet werden soll, dann müssen Sie auf> 100 Elemente, viele Reagenzien und Produkte und Bruchmengen achten. Es gibt viele Open-Source-Java-Chemie-Bibliotheken, und ich würde mich freuen, Sie vorzustellen. Erfinde das Rad nicht neu. Siehe http://www.blueobelisk.org

Um dies ernsthaft zu tun, benötigt man eine Bond/Elektron-Matrix, wie sie von Ugi entwickelt wurde. Ihr bester Platz ist Ugis eigenes Papier: www.iupac.org/publications/pac/1978/pdf/5011x1303.pdf

siehe - z.B. p 1307.

EDIT: Dies ist Overkill für das aktuelle Problem! Ein einfacher Matrixansatz würde 2 gekoppelte Matrizen R (Reaktanten) und P (Produkte) mit nelem (sagen 100) Spalten für bekannte Elemente und eine unbestimmte Anzahl von Reihen (nR, nP) sowie viele Reaktanten und Produkte einschließen. Die Matrizen würden daher in der Regel nicht gleich groß sein. Reaktant [nR] [Nelem] und Produkt [nP] [Nelem]. Es würde auch zwei Spaltenvektoren für die Multiplikatoren nreact [nR] und nprod [nP] geben. Man beachte, dass chemische Formeln und Multiplikatoren im Allgemeinen gewöhnlich integral sind, aber nicht sein müssen (die Verbindungen können keine einfachen ganzzahligen Verhältnisse von Elementen aufweisen).

Ich würde meine eigene CMLFormula und CMLReaction Java klassifiziert (siehe), um dies anzugehen. Sie sind herzlich eingeladen, dort zu starten - es wird das Leben leichter machen

0

Sie eine Matrix von Arrays darstellen kann: Man denke an jede Zeile als ein Array von Spaltendaten:

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

diese Weise Ihre Matrix Punkt ist ein Referenz auf die Array-Position in einem anderen Array an einem bestimmten Punkt. mit anderen Worten:

matrix[0][2] == 2 

(für das erste Array (0), die zweite Position (1))

ich für oder gegen Ihre Logik in der Chemie nicht sprechen kann, though.:)