Añadir simbolos de operacion desde cadena y viceversa

Iniciado por Debci, 29 Marzo 2010, 15:31 PM

0 Miembros y 1 Visitante están viendo este tema.

Debci

Hola atodo, he codeado esto:
Código (java) [Seleccionar]
package equlator;

/**
*
* @author root
*/
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String operacion = new String("1+5");
       
        //procesador(operacion);
       
    }
    public static int procesador(String proceso)
    {
        //Variable de instancia donde quedara definida la operacion convertida a string
       int procesado = 0;
       //Matriz de caracteres de toda la cadena procesada
       char[] matrizCaracteres = proceso.toCharArray();
        int[] bufferAritmetico = null;
        System.out.println("Procesando expresion aritmetico-algebraica....");
       for(int a = 0; a < proceso.length(); a++)
       {
           System.out.println(matrizCaracteres[a]);
           if(Character.toString(matrizCaracteres[a]).equals("+") ||
              Character.toString(matrizCaracteres[a]).equals("*") ||
              Character.toString(matrizCaracteres[a]).equals("/") ||
              Character.toString(matrizCaracteres[a]).equals("-"))
           {
             if(Character.toString(matrizCaracteres[a]).equals("+"))
             {
               bufferAritmetico[a] = +;
             }else{
                 
             }
             
                 
                 
             
           }else{
           bufferAritmetico[a] = Integer.parseInt(Character.toString(matrizCaracteres[a]).trim());
           }
           }
           System.out.println(bufferAritmetico);
       return procesado;
    }

}

Mi problema es que no puedo pasar una expresion aritmetica que se recoje de forma String a int, he intentado hacer un pequeño procesador que analiza la cadena y va trasladando los valores a un array int, pero los simbolos de suma multiplicacion res y division no se traspasan.
Dentro del bucle logico del procesador he creado un encadenamiento de condiciones para determinar si el caracter o valor que se va analizar en ese loop es un caracter de operacion aritmetico.
Asi lo hago y si se cumple intento asignar el valor con su equivalente en Integer a la posicion de la matriz determinada por el loop y la variable instancia de este.

Espero que me puedan ayudar.

Saludos

1mpuls0

#1
Cita de: ..::| D3Bć1 |::. en 29 Marzo 2010, 15:31 PM
Hola atodo, he codeado esto:
Código (java) [Seleccionar]
package equlator;

/**
*
* @author root
*/
public class Main {

   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) {
       String operacion = new String("1+5");
     
       //procesador(operacion);
       
   }
   public static int procesador(String proceso)
   {
       //Variable de instancia donde quedara definida la operacion convertida a string
      int procesado = 0;
      //Matriz de caracteres de toda la cadena procesada
      char[] matrizCaracteres = proceso.toCharArray();
       int[] bufferAritmetico = null;
       System.out.println("Procesando expresion aritmetico-algebraica....");
      for(int a = 0; a < proceso.length(); a++)
      {
          System.out.println(matrizCaracteres[a]);
          if(Character.toString(matrizCaracteres[a]).equals("+") ||
             Character.toString(matrizCaracteres[a]).equals("*") ||
             Character.toString(matrizCaracteres[a]).equals("/") ||
             Character.toString(matrizCaracteres[a]).equals("-"))
          {
            if(Character.toString(matrizCaracteres[a]).equals("+"))
            {
              bufferAritmetico[a] = +;
            }else{
               
            }
           
               
               
           
          }else{
          bufferAritmetico[a] = Integer.parseInt(Character.toString(matrizCaracteres[a]).trim());
          }
          }
          System.out.println(bufferAritmetico);
      return procesado;
   }

}

Mi problema es que no puedo pasar una expresion aritmetica que se recoje de forma String a int, he intentado hacer un pequeño procesador que analiza la cadena y va trasladando los valores a un array int, pero los simbolos de suma multiplicacion res y division no se traspasan.
Dentro del bucle logico del procesador he creado un encadenamiento de condiciones para determinar si el caracter o valor que se va analizar en ese loop es un caracter de operacion aritmetico.
Asi lo hago y si se cumple intento asignar el valor con su equivalente en Integer a la posicion de la matriz determinada por el loop y la variable instancia de este.

Espero que me puedan ayudar.

Saludos

Hola, amm no estoy seguro de si lo que quieres hacer es un analizador lexico para expresiones aritmeticas. Mirando tú código puedo ver varias "anomalias"

si ya tienes tú arreglo matrizCaracteres, creo que es mas conveniente trabajar con los datos de esta nueva variable.

Código (java) [Seleccionar]
for(int a = 0; a < proceso.length(); a++)

deberias utilizar (a menos de que vayas a trabajar con algo mas)

Código (java) [Seleccionar]
for(char c: matrizCaracteres)


Código (java) [Seleccionar]

bufferAritmetico[a] = +;

?? :xD

Citarpero los simbolos de suma multiplicacion res y division no se traspasan.

Quieres guardar un tipo char en tipo int, no creo que sea posible y no precisamente por su tamaño, sino por la conversion no puedes trabajar un simbolo como si fuera un numero  :-\, no hay un metodo que te permita hacer el parser... ni siquiera de manera explicita

Código (java) [Seleccionar]

if(Character.toString(matrizCaracteres[a]).equals("+") || ... ) {
 if(Character.toString(matrizCaracteres[a]).equals("+")) {
 ....


En esta parte, no entiendo para que vuelves a hacer la comparación, no es mejor que si ya sabes que hay un simbolo "+" hagas lo que tengas que hacer.

Bueno y si quieres hacer un analizador lexico para expresiones aritmeticas dime y te puedo orientar.

Saludos



abc

Debci

Porque esta hecho un poco a lo loco.
Como hago pues para cojer la expresion 5+1 de string y transformarla en 6 int?

Saludos

Blitzkrieg'

Me imagino que te refieres a una int que contenga el valor de 6 y no a seis int.



Debci

Cita de: ddk en 29 Marzo 2010, 20:59 PM
Me imagino que te refieres a una int que contenga el valor de 6 y no a seis int.
asi de sencillo:
Recojo una expresion aritmetica en formato string, la separo la analizo, proceso y calculo.
Y todo eso por supuesto para poder hacer la operacion tengo que pasarlo a integer.
Saludos

Leyer

#5
rayos, :xD

y si utilizas la funciona eval de js? funcionaria normalmente sin tener que separar nada, ademas funcionaria para algo mas complejo como (4+2)/2 o (2*4+5)*2

Debci