Sunday, July 15, 2012

Finding Molecular Weight in Java

This article is basically not for everyone, it is for those who deal with all chemistry related subjects or students who are have a need to find an element's molecular weight. Molecular weight basically is the element's weight and the finding the expression full molecular weight.
For Eg: H2O; in this case we can say that there are two Hydrogen atoms and 1 Oxygen atom so for the molecular weight calculation the expression would be say Hydrogen's atomic weight times 2 + Oxygen's atomic weight. Say for example the element Hydrogen has the atomic weight of 1 and oxygen has the atomic weight of 16. Then the expression result would be 1X2+16=18.

The following is the code for finding the molecular weight in Java:


import java.util.Enumeration;
import java.util.Hashtable;
import java.io.*;

public class ElementCalculation {
static Hashtable hm;
Hashtable[][]reactpro;
Hashtable[] templist;
Hashtable brentry=new Hashtable();
double output,finaloutput;
intnewid=0,roundopen=0,boxopen=0,fullLen=0,indexLen=0,hmrpos=0,hmcpos=0,digitvalue=0,tempindex=0,suffix=0;
String temp="",args="";
boolean keyexists=false,yesno=false;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
public ElementCalculation()
{
setInitialValues();
initializeDefaultreactPro();
}
public void dispose()
{
temp = "";
roundopen = boxopen = tempindex = hmrpos = hmcpos = digitvalue = fullLen = indexLen = newid = suffix = 0;
brentry.clear();
keyexists=yesno=false;
finaloutput = output = 0;
}
private static void setInitialValues()
{
hm=new Hashtable();
hm.put("H", new Double(1.0079));
hm.put("He", new Double(4.0026));
hm.put("Li", new Double(6.941));
hm.put("Be", new Double(9.0122));
hm.put("B", new Double(10.811));
hm.put("C", new Double(12.0107));
hm.put("N", new Double(14.0067));
hm.put("O", new Double(15.9994));
hm.put("F", new Double(18.9984));
hm.put("Ne", new Double(20.1797));
hm.put("Na", new Double(22.9897));
hm.put("Mg", new Double(24.305));
hm.put("Al", new Double(26.9815));
hm.put("Si", new Double(28.0855));
hm.put("P", new Double(30.9738));
hm.put("S", new Double(32.065));
hm.put("Cl", new Double(35.453));
hm.put("K", new Double(39.0983));
hm.put("Ar", new Double(39.948));
hm.put("Ca", new Double(40.078));
hm.put("Sc", new Double(44.9559));
hm.put("Ti", new Double(47.867));
hm.put("V", new Double(50.9415));
hm.put("Cr", new Double(51.9961));
hm.put("Mn", new Double(54.938));
hm.put("Fe", new Double(55.845));
hm.put("Ni", new Double(58.6934));
hm.put("Co", new Double(58.9332));
hm.put("Cu", new Double(63.546));
hm.put("Zn", new Double(65.39));
hm.put("Ga", new Double(69.723));
hm.put("Ge", new Double(72.64));

hm.put("As", new Double(74.9216));
hm.put("Se", new Double(78.96));
hm.put("Br", new Double(79.904));
hm.put("Kr", new Double(83.8));
hm.put("Rb", new Double(85.4678));
hm.put("Sr", new Double(87.62));
hm.put("Y", new Double(88.9059));
hm.put("Zr", new Double(91.224));
hm.put("Nb", new Double(92.9064));
hm.put("Mo", new Double(95.94));
hm.put("Tc", new Double(98));
hm.put("Ru", new Double(101.07));
hm.put("Rh", new Double(102.9055));
hm.put("Pd", new Double(106.42));
hm.put("Ag", new Double(107.8682));
hm.put("Cd", new Double(112.411));
hm.put("In", new Double(114.818));
hm.put("Sn", new Double(118.71));
hm.put("Sb", new Double(121.76));
hm.put("I", new Double(126.9045));
hm.put("Te", new Double(127.6));
hm.put("Xe", new Double(131.293));
hm.put("Cs", new Double(132.9055));
hm.put("Ba", new Double(137.327));
hm.put("La", new Double(138.9055));
hm.put("Ce",new Double(140.116));
hm.put("Pr", new Double(140.9077));
hm.put("Nd", new Double(144.24));
hm.put("Pm", new Double(145));
hm.put("Sm", new Double(150.36));
hm.put("Eu", new Double(151.964));
hm.put("Gd", new Double(157.25));
hm.put("Tb", new Double(158.9253));
        hm.put("Dy",new Double(162.5));
hm.put("Ho", new Double(164.9303));
hm.put("Er", new Double(167.259));
hm.put("Tm", new Double(168.9342));
hm.put("Yb", new Double(173.04));
hm.put("Lu", new Double(174.967));
hm.put("Hf", new Double(178.49));
hm.put("Ta", new Double(180.9479));
hm.put("W", new Double(183.84));
hm.put("Re", new Double(186.207));
hm.put("Os", new Double(190.23));
hm.put("Ir", new Double(192.217));
hm.put("Pt", new Double(195.078));
hm.put("Au", new Double(196.9665));
hm.put("Hg", new Double(200.59));
hm.put("Tl", new Double(204.3833));
hm.put("Pb", new Double(207.2));
hm.put("Bi", new Double(208.9804));
hm.put("Po", new Double(209));
hm.put("At", new Double(210));
hm.put("Rn", new Double(222));
hm.put("Fr", new Double(223));
hm.put("Ra", new Double(226));
hm.put("Ac", new Double(227));
hm.put("Pa", new Double(231.0359));
hm.put("Th", new Double(232.0381));
hm.put("Np", new Double(237));
hm.put("U", new Double(238.0289));
hm.put("Am", new Double(243));
hm.put("Pu", new Double(244));
hm.put("Cm", new Double(247));
hm.put("Bk", new Double(247));
hm.put("Cf", new Double(251));
hm.put("Es", new Double(252));
hm.put("Fm",new Double(257));
hm.put("Md", new Double(258));
hm.put("No", new Double(259));
hm.put("Rf", new Double(261));
hm.put("Lr", new Double(262));
hm.put("Db", new Double(262));
hm.put("Bh", new Double(264));
hm.put("Sg", new Double(266));
hm.put("Mt", new Double(268));
hm.put("Rg", new Double(272));
hm.put("Hs", new Double(277));
hm.put("Ds", new Double(280));
}
//This function is created temporary to test the functinality in BBD
private void initializeDefaultreactPro()
{
reactpro=new Hashtable[2][];
reactpro[0]=new Hashtable[1];
reactpro[1]=new Hashtable[1];
initializeReactPro();
}
//For initializing the reactPro Hashtable
private void initializeReactPro()
{
for(int i=0;i<reactpro.length;i++)

{
for(int j=0;j<reactpro[i].length;j++)
reactpro[i][j]=new Hashtable();
}
}
private boolean contains(String args){
yesno=false;
for(int i=0;i<args.length();i++)
{
if(args.charAt(i)=='(' || args.charAt(i)=='[')
{
yesno=true;
break;
}
}
return yesno;
}
public void accept()
{
try
{
System.out.println("Enter your expression");
args=br.readLine();
if(contains(args)==true)
getNoOfBrackets(args);
reactpro[hmrpos][hmcpos].clear();
calculateLength(args);
matchElementToUpdate(reactpro[hmrpos][hmcpos],brentry);
calculateMolWeight(hmrpos,hmcpos);
}
catch(Exception e1){}
}
//to calculate the no of Brackets appearing in the string
private void getNoOfBrackets(String args)
{
for(int i=0;i<args.length();i++)
{
if(args.charAt(i)=='(' || args.charAt(i)=='[')
tempindex++;
}
templist=new Hashtable[tempindex];

tempindex=0;
initializeTempHash();
}
/*intialized the templist hashtable*/
private void initializeTempHash()
{
for (int i = 0; i < templist.length; i++)
templist[i] = new Hashtable();
}
private void calculateLength(String args)
{
fullLen=args.length();
indexLen=fullLen-1;
readAtom(args);
}
//for calculating the next position within the String array.
private int calculateNextPosition(int org)
{
int id = 0;
if (org == fullLen - 1)
{
if (boxopen > 0 || roundopen > 0)
id = org;
else
id = 0;
}
else if (org < fullLen - 1)
id = org + 1;
newid = id;
return newid;
}
private void readAtom(String args) {
for(int i=0,nxtpos=0;i<args.length();i++)
{
temp="";
nxtpos=calculateNextPosition(i);
if(Character.isUpperCase(args.charAt(i))&& Character.isUpperCase(args.charAt(indexLen-(indexLen-nxtpos))))
{
temp=String.valueOf(args.charAt(i));
addentry(1);
}
else if(Character.isUpperCase(args.charAt(i)) && (args.charAt(indexLen-(indexLen-nxtpos))=='[' || args.charAt(indexLen-(indexLen-nxtpos))=='('))
{
temp = String.valueOf(args.charAt(i));
addentry(1);

if(args.charAt(indexLen - (indexLen - nxtpos))=='(')
roundopen++;
else
boxopen++;
// suffix = 1;
i=readBrackets(args, indexLen - (indexLen - nxtpos));
}
else if(Character.isUpperCase(args.charAt(i)) && Character.isDigit(args.charAt(indexLen-(indexLen-nxtpos))))
{


                       temp =String.valueOf(args.charAt(i));//keyexists = reactpro[hmrpos][hmcpos].containsKey(temp);
i=IsDigit(args, indexLen - (indexLen - nxtpos));
addentry(digitvalue);
}
else if(Character.isUpperCase(args.charAt(i)))
{
temp=String.valueOf(args.charAt(i));
i=readLower(args,i);
i=i-1;
}
else if(args.charAt(i)=='[')
{
boxopen++;
if(!brentry.isEmpty())
{
addToTempHash();
tempindex++;
}
i=readBrackets(args, i);
}
else if(args.charAt(i)=='(')
{
roundopen++;
if(!brentry.isEmpty())
{
addToTempHash();
tempindex++;
}
i=readBrackets(args, i);
}
}
}
//This function is used for reading the elements having lower case letters and also for reading the digits
private int readLower(String args, int idx) {
for(int j=idx+1,nxtpos=0;j<args.length();j++)
{
nxtpos=calculateNextPosition(j);
if(Character.isLowerCase(args.charAt(j))&& (!(Character.isDigit(args.charAt(indexLen-(indexLen-nxtpos))) || Character.isLowerCase(args.charAt(indexLen-(indexLen-
nxtpos))))))
{
temp+=String.valueOf(args.charAt(j));
if (roundopen == 0 && boxopen == 0)
addentry(1);
else
{
if (!brentry.isEmpty())
{
addToTempHash();
tempindex++;
}
addentry(1);
}
}
else if(Character.isLowerCase(args.charAt(j)) && Character.isDigit(args.charAt(indexLen-(indexLen-nxtpos))))
{
temp+=String.valueOf(args.charAt(j));
j=IsDigit(args,indexLen-(indexLen-nxtpos));
addentry(digitvalue);
}
else if(Character.isLowerCase(args.charAt(j))&& args.charAt(indexLen-(indexLen-nxtpos))=='[')
{
temp+=String.valueOf(args.charAt(j));
addentry(1);
boxopen++;
//suffix=1;
addToTempHash();
tempindex++;
j=readBrackets(args, indexLen-(indexLen-nxtpos));
}
else if(Character.isLowerCase(args.charAt(j))&& args.charAt(indexLen-(indexLen-nxtpos))=='(')
{
temp+=String.valueOf(args.charAt(j));
addentry(1);
roundopen++;
//suffix=1;
addToTempHash();
tempindex++;
j=readBrackets(args, indexLen-(indexLen-nxtpos));
}
else if(Character.isDigit(args.charAt(j))&& args.charAt(indexLen-(indexLen-nxtpos))==')')
{
j=IsDigit(args, j);
if(roundopen>1)
{
keyexists=brentry.containsKey(temp);
if(keyexists)
{
suffix=digitvalue;
j=IsDigit(args, indexLen-(indexLen-nxtpos)+1);
digitvalue*=suffix;
suffix=0;
addentry(digitvalue);
roundopen--;
}
else
addentry(digitvalue);
}
else
addentry(digitvalue);
}
else if(Character.isDigit(args.charAt(j)) && args.charAt(indexLen-(indexLen-nxtpos))==']')
{
j=IsDigit(args, j);
if(boxopen>1)
{
keyexists=brentry.containsKey(temp);
if(keyexists)
{
suffix=digitvalue;
j=IsDigit(args, indexLen-(indexLen-nxtpos)+1);
digitvalue*=suffix;
suffix=0;
addentry(digitvalue);
boxopen--;
}
else
addentry(digitvalue);
}
else
addentry(digitvalue);
}
else if(Character.isLowerCase(args.charAt(j)))
{
temp+=String.valueOf(args.charAt(j));
for(int k=j+1,nxtpos1=0;j<args.length();k++)
{
nxtpos1=calculateNextPosition(k);
if(Character.isLowerCase(args.charAt(k))&& !Character.isDigit(args.charAt(indexLen-(indexLen-nxtpos1))))
{
temp+=String.valueOf(args.charAt(k));
addentry(1);
}
else if(Character.isLowerCase(args.charAt(k)) && Character.isDigit(args.charAt(indexLen-(indexLen-nxtpos1))))
{
temp+=String.valueOf(args.charAt(k));
k=IsDigit(args, k);
addentry(digitvalue);
}
else if(Character.isLowerCase(args.charAt(k))&& args.charAt(indexLen-(indexLen-nxtpos1))=='[')
{
temp+=String.valueOf(args.charAt(k));
addentry(1);
boxopen++;
k=readBrackets(args, indexLen-(indexLen-nxtpos1));
}
else if(Character.isLowerCase(args.charAt(k))&& args.charAt(indexLen-(indexLen-nxtpos1))=='(')
{
temp+=String.valueOf(args.charAt(k));
addentry(1);
roundopen++;
k=readBrackets(args, indexLen-(indexLen-nxtpos1));
}
else if(Character.isDigit(args.charAt(k)))
{
k=IsDigit(args, k);
addentry(digitvalue);
}
else if(Character.isUpperCase(args.charAt(k)))
{
j=k-1;
break;
}
else
{
j=k-1;
break;
}
}
}
else if(Character.isDigit(args.charAt(j))&& args.charAt(indexLen-(indexLen-nxtpos))!=')')
{
j=IsDigit(args, j);
addentry(digitvalue);
}
else if(Character.isUpperCase(args.charAt(j)))
{
newid=j;
break;
}
else if(args.charAt(j)=='[' && args.charAt(indexLen-(indexLen-nxtpos))=='(')
{
boxopen++;
j=readBrackets(args, indexLen-(indexLen-nxtpos));
}
else if(args.charAt(j)=='[')
{
boxopen++;
if(boxopen>0)
{
if(!brentry.isEmpty())
{
addToTempHash();
tempindex++;
}
}
j=readBrackets(args, j);
}
else if(args.charAt(j)=='(')
{
roundopen++;
if(roundopen>0)
{
if(!brentry.isEmpty())
{
addToTempHash();
tempindex++;
}
}
j=readBrackets(args, j);
}
else if(args.charAt(j)==')' && Character.isDigit(args.charAt(indexLen-(indexLen-nxtpos))))
{
roundopen--;
j=IsDigit(args, indexLen-(indexLen-nxtpos));
if(boxopen==0 && roundopen==0)
{
if(!brentry.isEmpty())
{
updateentry(brentry,digitvalue);
tempindex=tempindex>0?tempindex=tempindex-1:0;
if(!templist[tempindex].isEmpty())
matchElementToUpdate(this.brentry,this.templist[tempindex]);
else
{
//suffix=0;
addToReactPro();
}
}
else
updateentry(reactpro[hmrpos][hmcpos],digitvalue);
}
else
{
updateentry(brentry,digitvalue);
tempindex=tempindex>0?tempindex=tempindex-1:0;
if(!templist[tempindex].isEmpty())
matchElementToUpdate(brentry, templist[tempindex]);
else                           {//suffix=0;
addToReactPro();
}
}
}
else if(args.charAt(j)==']' && Character.isDigit(args.charAt(indexLen-(indexLen-nxtpos))))
{
boxopen--;
j=IsDigit(args, indexLen-(indexLen-nxtpos));
if(boxopen==0 && roundopen==0)
{
if(!brentry.isEmpty())
{
updateentry(brentry,digitvalue);
tempindex=tempindex>0?tempindex=tempindex-1:0;
if(!templist[tempindex].isEmpty())
matchElementToUpdate(brentry,templist[tempindex]);
else
{
//suffix=0;
addToReactPro();
}
}
else
updateentry(reactpro[hmrpos][hmcpos], digitvalue);
}
else
{
updateentry(brentry,digitvalue);
tempindex=tempindex>0?tempindex=tempindex-1:0;
if(!templist[tempindex].isEmpty())
matchElementToUpdate(this.brentry,this.templist[tempindex]);
else
{
suffix=0;
addToReactPro();
}
}
}
else if(args.charAt(j)==')')
{
roundopen--;
if(roundopen==0 && boxopen==0)
addToReactPro();
else
{
tempindex=tempindex>0?tempindex=tempindex-1:0;
if(!templist[tempindex].isEmpty())
matchElementToUpdate(brentry,templist[tempindex]);
else
{
suffix=0;
addToReactPro();
}
}
}
else if(args.charAt(j)==']')
{
boxopen--;
if(roundopen==0 && boxopen==0)
addToReactPro();
else
{
tempindex=tempindex>0?tempindex=tempindex-1:0;
if(!templist[tempindex].isEmpty())
matchElementToUpdate(brentry,templist[tempindex]);
else
{
suffix=0;
addToReactPro();
}
}
}
newid=j;
}
return newid;
}
//For reading the brackets expression 
private int readBrackets(String args, int idx) {
for(int i=idx+1,nxtpos=0;i<args.length();i++)
{
nxtpos=calculateNextPosition(i);
if(Character.isUpperCase(args.charAt(i)) && Character.isUpperCase(args.charAt(indexLen-(indexLen-nxtpos))))
{
temp=String.valueOf(args.charAt(i));
addentry(1);
}
else if(Character.isUpperCase(args.charAt(i)) && args.charAt(indexLen-(indexLen-nxtpos))=='[')
{
temp=String.valueOf(args.charAt(i));
addentry(1);
addToTempHash();
tempindex++;
boxopen++;
//suffix=1;
i=readBrackets(args, indexLen-(indexLen-nxtpos));
}
else if(Character.isUpperCase(args.charAt(i))&& args.charAt(indexLen-(indexLen-nxtpos))=='(')
{
temp=String.valueOf(args.charAt(i));
addentry(1);
addToTempHash();
tempindex++;
roundopen++;
//suffix=1;
i=readBrackets(args, indexLen-(indexLen-nxtpos));
}
else if(Character.isUpperCase(args.charAt(i))&& args.charAt(indexLen-(indexLen-nxtpos))==')')
{
temp=String.valueOf(args.charAt(i));
addentry(1);
i=readLower(args, i);
i=i-1;
}
else if(Character.isUpperCase(args.charAt(i)) && args.charAt(indexLen-(indexLen-nxtpos))==']')
{
temp=String.valueOf(args.charAt(i));
addentry(1);
i=readLower(args, i);
i=i-1;
}
else if(args.charAt(i)=='(')
{
roundopen++;
if(!brentry.isEmpty())
{
addToTempHash();
tempindex++;
}
continue;
}
else if(args.charAt(i)=='[')
{
boxopen++;
if(!brentry.isEmpty())
{
addToTempHash();
tempindex++;
}
continue;
}
else if(Character.isUpperCase(args.charAt(i)))
{
temp=String.valueOf(args.charAt(i));
i=readLower(args, i);
i=i-1;
}
newid=i;
}
return newid;
}
//This function is used for adding elements in the respective hashmap considering whether any box brackets or round brackets
//are open if not then add the elements to the reactpro hashmap
private void addentry(int value) {
if (boxopen > 0)
{
keyexists = brentry.containsKey(temp);
if (roundopen > 0)
{
if (keyexists == false)
brentry.put(temp, new Integer(value));
else
updateKeyValue(temp, value, brentry);
}
else
{
if (keyexists == false)
brentry.put(temp, new Integer(value));
else
updateKeyValue(temp, value, brentry);
}
}
else if (roundopen > 0)
{
keyexists = brentry.containsKey(temp);
if (keyexists == false)
brentry.put(temp, new Integer(value));
else
updateKeyValue(temp, value, brentry);
}
else
{
keyexists = reactpro[hmrpos][hmcpos].containsKey(temp);
if (keyexists == false)
reactpro[hmrpos][hmcpos].put(temp, new Integer(value));
else
updateKeyValue(temp, value, reactpro[hmrpos][hmcpos]);
}
}
//This function are called when the Box or Round brackets opens we are adding it to the templist hashtable
//when anyother round or box bracket gets opened
private void addToTempHash() {
Enumeration keys=brentry.keys();
while(keys.hasMoreElements())
{
Object retrievedKey=keys.nextElement();
templist[tempindex].put(retrievedKey,brentry.get(retrievedKey));
}
brentry.clear();
}
//For calculating the no of digits after the element.
private int IsDigit(String args, int idx) {
String variable = "";
int newid2 = 0;
for (int k = idx; k < fullLen; k++)
{
if (Character.isDigit(args.charAt(k)))
{
variable += String.valueOf(args.charAt(k));
newid2 = k;
}
else
{
newid2 = k - 1;
break;
}
}
newid = newid2;
if (variable.equals("") || variable.equals("0"))
digitvalue = 1;
else
digitvalue=Integer.parseInt(variable);
return newid;
}
//For updating the key value stored in the hashtable with that of the value specified after the round or box bracket
protected void updateentry(Hashtable h, int value) {
Enumeration keys=h.keys();
while(keys.hasMoreElements())
{
Object retrievedKey=keys.nextElement();
h.put(retrievedKey,(Object)String.valueOf(Integer.parseInt(String.valueOf(h.get(retrievedKey))) * value));
}
}
//This function is called when any box or round brackets gets closed we are updating the brentry hashtable
//with that of the templist hashtable also checking before adding whether any key exists or not.If exists we are updating the key value 
// with that of brentry hashtable and templist hashtable. And also finally adding it to the final hashtable.
public void matchElementToUpdate(Hashtable a, Hashtable b) {
//If a hashmap is empty and the b is not empty then directly copy all the elements from hashmap b to hashmap a
yesno=a.isEmpty() && !b.isEmpty()?true:false;
if(yesno==true)


                {
Enumeration keys=b.keys();
while(keys.hasMoreElements())
{
Object retrievedKey=keys.nextElement();
a.put(retrievedKey, b.get(retrievedKey));
}
}
else
{
Enumeration keys1=a.keys();
while(keys1.hasMoreElements())
{
Object retrievedKey1=keys1.nextElement();
Enumeration keys2=b.keys();
while(keys2.hasMoreElements())
{
Object retrievedKey2=keys2.nextElement();
if(a.containsKey(retrievedKey2))
{
if(retrievedKey1.equals(retrievedKey2))
{
intresult=Integer.parseInt(String.valueOf(a.get(retrievedKey1)))+ Integer.parseInt(String.valueOf(b.get(retrievedKey2)));
a.put(retrievedKey1,(Object)String.valueOf(result));
b.remove(retrievedKey2);
}
}
else
{
a.put(retrievedKey2, b.get(retrievedKey2));
b.remove(retrievedKey2);
}
}
}
}
b.clear();
}
private void addToReactPro() {
Enumeration keys=brentry.keys();
while(keys.hasMoreElements())
{
Object retrievedKey=keys.nextElement();
keyexists=reactpro[hmrpos][hmcpos].containsKey(retrievedKey);
if(keyexists==false)
reactpro[hmrpos][hmcpos].put(retrievedKey, brentry.get(retrievedKey));
else
{
int value=Integer.parseInt(String.valueOf(brentry.get(retrievedKey)));
updateKeyValue(String.valueOf(retrievedKey),value,reactpro[hmrpos][hmcpos]);
}
}
brentry.clear();
}
private void updateKeyValue(String key, int newVal, Hashtable h)
{
Enumeration keys=h.keys();
while(keys.hasMoreElements())
{
Object retrievedKey=keys.nextElement();
if(retrievedKey.equals(key))
{
if(suffix!=0)
{
h.put(retrievedKey,String.valueOf(Integer.parseInt(String.valueOf(h.get(retrievedKey)))* newVal));
suffix=0;
}
else
h.put(retrievedKey,String.valueOf(Integer.parseInt(String.valueOf(h.get(retrievedKey)))+newVal));
break;
}
}
}              
//This function will return the atomic weight of that particular element which is stored in the hm hashmap
//which is acting as a database in our case.
private double getMolWeight(String key)
{
double value=0;
Enumeration keys=hm.keys();
while(keys.hasMoreElements())
{
Object retrievedKey=keys.nextElement();
if(retrievedKey.equals(key))
{
value=Double.parseDouble(String.valueOf(hm.get(retrievedKey)));
break;
}
}
return value;
}
//For calculating the molecular weight of the expression and for storing the molecular weight as per the compounds
//in the mol_weight variable at a particular row and at a particular's column
protected void calculateMolWeight(int rindex,int cindex)
{
finaloutput=0;
Enumeration keys=reactpro[rindex][cindex].keys();
while(keys.hasMoreElements())
{
Object retrievedKey=keys.nextElement();
output=getMolWeight(String.valueOf(retrievedKey));
finaloutput+=output * Integer.parseInt(String.valueOf(reactpro[rindex][cindex].get(retrievedKey)));
}
System.out.println(finaloutput);
}
public static void main(String args[])
{
ElementCalculation obj=new ElementCalculation();
obj.setInitialValues();
obj.accept();
}
}

No comments: