public void setTransicao(int estado, char simbolo, int estadoFut)
     throws SimbNaoAlfabetoException, NaoEstadoException {
   if (estado < getQtdaEstados() && estadoFut < getQtdaEstados()) {
     if (isLinguagemVazia(estado, simbolo)) {
       Collection<Integer> conjunto = new HashSet<Integer>();
       conjunto.add(estadoFut);
       funcao[estado][alf.getChave(simbolo)] = conjunto;
     } else {
       ((Collection<Integer>) transicao(estado, simbolo)).add(estadoFut);
     }
   } else throw new NaoEstadoException();
 }
  public void printFuncaoTransicao() throws SimbNaoAlfabetoException {
    System.out.print("[EST\\ALF]");
    for (int i = 0; i < getAlf().getTamAlf(); i++) {
      System.out.print(alf.getSimbolo(i) + "\t\t");
    }
    System.out.println();
    for (int i = 0; i < this.getQtdaEstados(); i++) {
      System.out.print(i + "\t");
      for (int j = 0; j < getAlf().getTamAlf(); j++) {
        printEstado(transicao(i, alf.getSimbolo(j)));
        System.out.print("\t\t");
      }
      System.out.println();
    }

    Integer[] estadofim = new Integer[conjEstFinal.size()];
    conjEstFinal.toArray(estadofim);
    System.out.print("Estados finais:");
    System.out.print(conjEstFinal.toString() + "\n");
    System.out.println();
  }
 /**
  * Apenas copiar a função passada, sobrepondo a existente (substitui os estado atual passado
  * correspodentes ao de b).
  *
  * @param b função a ser copiada. Deve ser menor ou igual a função corrente.
  * @return
  */
 public boolean copiarFuncaoTransicao(FuncaoTrasicaoAfn b) {
   if (this.getQtdaEstados() >= b.getQtdaEstados()) {
     for (int i = 0; i < b.getQtdaEstados(); i++) {
       for (int j = 0; j < alf.getTamAlf(); j++) {
         funcao[i][j] = b.getFuncao()[i][j];
       }
     }
     // this.inserirEstadosFinal(b.getConjEstFinal());
     return true;
   }
   return false;
 }
 /**
  * Adiciona uma transição.
  *
  * @param estado estado atual.
  * @param simbolo simbolo a ser passado.
  * @param cojunto novo conjunto de estados.
  * @throws SimbNaoAlfabetoException
  */
 public void setTransicao(int estado, char simbolo, Collection<Integer> cojunto)
     throws SimbNaoAlfabetoException {
   funcao[estado][alf.getChave(simbolo)] = cojunto;
 }
 public Collection<Integer> transicao(int estado, char simbolo) throws SimbNaoAlfabetoException {
   return (Collection<Integer>) funcao[estado][alf.getChave(simbolo)];
 }
 public FuncaoTrasicaoAfn(int qtdaEst, Alfabeto alfabeto) {
   alf = alfabeto;
   qtdaEstados = qtdaEst;
   funcao = new Object[qtdaEst][alf.getTamAlf()];
   conjEstFinal = new HashSet<Integer>();
 }