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;
       int newid=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))
                                         {
                                                int result=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();
             }
}

 

Up Next
    Ebook Download
    View all
    Learn
    View all