@SuppressWarnings("unchecked") @Override public P calcular() throws Exception { for (int i = 0; i <= (MyStr.length() - 1); i++) { CharSequence MyChar = "" + MyStr.charAt(i); if (numeros.contains(MyChar)) { pila.push(Integer.parseInt(MyChar.toString())); } else { String a = MyChar.toString(); op1 = (Integer) pila.pop(); op2 = (Integer) pila.pop(); if (a.equals("+")) res = op1 + op2; else if (a.equals("-")) res = op2 - op1; else if (a.equals("*")) res = op1 * op2; else if (a.equals("/")) res = op2 / op1; else if (a.equals("^")) res = op2 ^ op1; else throw new Exception("Se ingreso un caracter desconocido!"); pila.push(res); } } return (P) pila.peek(); }
public static void main(String[] args) { Pila<Videojuego> pila = new Pila<Videojuego>(); try { pila.push(new Videojuego("Dark Souls", "Action RPG")); pila.push(new Videojuego("Resident Evil", "Survival Horror")); pila.push(new Videojuego("Batman: Arkham Asylum", "Acción")); } catch (TituloNoValidoException | GeneroNoValidoException e) { System.out.println(e.getMessage()); } while (!pila.pila.isEmpty()) { System.out.println(pila.top()); System.out.println("Desapilo de la pila: " + pila.pop()); } }
/** * Ejecutamos un AFND para una cadena dada hasta el caracter cuyo numero es indicado por * parametros y devolvemos el vector de configuraciones instantaneas al momento * * @param cadena * @param hasta * @return vector de configuraciones instantaneas */ public ArrayList<ConfigInstantanea> ejecutar(String entrada, int hasta) throws NoDefinido { // definimos el conjunto de estados de la configuracion instantanea ArrayList<Estado> estados = new ArrayList<Estado>(); // Agregamos el estado inicial estados.add(this.getEstadoInicial()); // modificamos la cadena para considerar lambda al principio, final, e intercalado System.out.println("Leemos: " + entrada); entrada += "&"; // recorremos la cadena modificada para determinar el conjunto de estados for (int i = 0; i <= hasta; i++) { System.out.println("Pila: " + pila.toString()); // definimos el conjunto de estados proximos ArrayList<Estado> estadosProximos = new ArrayList<Estado>(); // recorremos todos los estados del conjunto de estados de la config instantanea for (int b = 0; b < estados.size(); b++) { Estado q = estados.get(b); System.out.println("Estamos en el estado: " + q.getNombre()); ArrayList<Estado> qs = new ArrayList<Estado>(); try { System.out.println("Analizamos: " + entrada.charAt(i) + ", " + pila.leer()); qs = q.valuar(entrada.charAt(i), this.pila); } catch (ExcepcionPilaVacia e) { System.out.println("Pila Vacia..."); } // si corresponde agregar un estado if (qs.size() > 0) { estadosProximos.addAll(qs); System.out.println("...y pasamos al estado: " + qs.get(0).getNombre()); } else { // si no hay transiciones pero el caracter es lambda nos quedamos en el estado actual if (entrada.charAt(i) == '&') { estadosProximos.add(q); } } } // Comprobamos que haya al menos 1 estado en el conjunto de los siguientes if (estadosProximos.size() <= 0) throw new NoDefinido(); // definimos estados como los estados siguientes para usarlos en la proxima iteracion estados = estadosProximos; } // si todo va bien salimos con el vector de configuraciones instantaneas if (estados.size() > 0) { // cadena restante por leer String cadenaRestante = entrada.substring(hasta); // creamos un vector para las configuraciones instantaneas ArrayList<ConfigInstantanea> cfgs = new ArrayList<ConfigInstantanea>(); // recorremos los estados al momento for (int j = 0; j < estados.size(); j++) cfgs.add(new ConfigInstantanea(estados.get(j), cadenaRestante)); return cfgs; } // si llegamos aca paso algo!! salimos con excepcion! throw new NoDefinido(); }