if (!added)
if (!added) {
  private void best_first() throws Exception  {    int i,j,classI,count=0,fc,tree_count=0;    int evals=0;    BitSet best_group, temp_group;    int [] stale;    double [] best_merit;    double merit;    boolean z;    boolean added;    Link2 tl;      Hashtable lookup = new Hashtable((int)(200.0*m_numAttributes*1.5));    LinkedList2 bfList = new LinkedList2();        best_merit = new double[1]; best_merit[0] = 0.0;    stale = new int[1]; stale[0] = 0;    best_group = new BitSet(m_numAttributes);    // Add class to initial subset    classI = m_theInstances.classIndex();    best_group.set(classI);      best_merit[0] = estimateAccuracy(best_group, 1);        if (m_debug)      System.out.println("Accuracy of initial subset: "+best_merit[0]);    // add the initial group to the list    bfList.addToList(best_group,best_merit[0]);    // add initial subset to the hashtable    lookup.put(best_group,"");          while (stale[0] < m_maxStale)    {      added = false;      // finished search?      if (bfList.size()==0)      {	stale[0] = m_maxStale;	break;      }      // copy the feature set at the head of the list      tl = bfList.getLinkAt(0);      temp_group = (BitSet)(tl.getGroup().clone());      // remove the head of the list      bfList.removeLinkAt(0);      for (i=0;i<m_numAttributes;i++)      {	// if (search_direction == 1)	z = ((i != classI) && (!temp_group.get(i)));	if (z)	{	  // set the bit (feature to add/delete) */	  temp_group.set(i);	  	  /* if this subset has been seen before, then it is already in 	     the list (or has been fully expanded) */	  BitSet tt = (BitSet)temp_group.clone();	  if (lookup.containsKey(tt) == false)	  {	    fc = 0;	    	    for (int jj=0;jj<m_numAttributes;jj++)	      if (tt.get(jj))		fc++;	    merit = estimateAccuracy(tt, fc);	    if (m_debug)	      System.out.println("evaluating: "+printSub(tt)+" "+merit);	    	    // is this better than the best?	    // if (search_direction == 1)	 	    z = ((merit - best_merit[0]) > 0.00001);	 	    // else	    // z = ((best_merit[0] - merit) > 0.00001);	    if (z)	    {	      if (m_debug)		System.out.println("new best feature set: "+printSub(tt)+				   " "+merit);	      added = true;	      stale[0] = 0;	      best_merit[0] = merit;	      best_group = (BitSet)(temp_group.clone());	    }	    // insert this one in the list and the hash table	    bfList.addToList(tt, merit);	    lookup.put(tt,"");	    count++;	  }	  // unset this addition(deletion)	  temp_group.clear(i);	}      }      /* if we haven't added a new feature subset then full expansion 	 of this node hasn't resulted in anything better */      if (!added)	stale[0]++;    }       // set selected features    for (i=0,j=0;i<m_numAttributes;i++)      if (best_group.get(i))	j++;        m_decisionFeatures = new int[j];    for (i=0,j=0;i<m_numAttributes;i++)      if (best_group.get(i))	m_decisionFeatures[j++] = i;      }