elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Añadir simbolos de operacion desde cadena y viceversa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Añadir simbolos de operacion desde cadena y viceversa  (Leído 4,396 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Añadir simbolos de operacion desde cadena y viceversa
« en: 29 Marzo 2010, 15:31 pm »

Hola atodo, he codeado esto:
Código
  1. package equlator;
  2.  
  3. /**
  4.  *
  5.  * @author root
  6.  */
  7. public class Main {
  8.  
  9.    /**
  10.      * @param args the command line arguments
  11.      */
  12.    public static void main(String[] args) {
  13.        String operacion = new String("1+5");
  14.  
  15.        //procesador(operacion);
  16.  
  17.    }
  18.    public static int procesador(String proceso)
  19.    {
  20.        //Variable de instancia donde quedara definida la operacion convertida a string
  21.       int procesado = 0;
  22.       //Matriz de caracteres de toda la cadena procesada
  23.       char[] matrizCaracteres = proceso.toCharArray();
  24.        int[] bufferAritmetico = null;
  25.        System.out.println("Procesando expresion aritmetico-algebraica....");
  26.       for(int a = 0; a < proceso.length(); a++)
  27.       {
  28.           System.out.println(matrizCaracteres[a]);
  29.           if(Character.toString(matrizCaracteres[a]).equals("+") ||
  30.              Character.toString(matrizCaracteres[a]).equals("*") ||
  31.              Character.toString(matrizCaracteres[a]).equals("/") ||
  32.              Character.toString(matrizCaracteres[a]).equals("-"))
  33.           {
  34.             if(Character.toString(matrizCaracteres[a]).equals("+"))
  35.             {
  36.               bufferAritmetico[a] = +;
  37.             }else{
  38.  
  39.             }
  40.  
  41.  
  42.  
  43.  
  44.           }else{
  45.           bufferAritmetico[a] = Integer.parseInt(Character.toString(matrizCaracteres[a]).trim());
  46.           }
  47.           }
  48.           System.out.println(bufferAritmetico);
  49.       return procesado;
  50.    }
  51.  
  52. }
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


En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Añadir simbolos de operacion desde cadena y viceversa
« Respuesta #1 en: 29 Marzo 2010, 18:03 pm »

Hola atodo, he codeado esto:
Código
  1. package equlator;
  2.  
  3. /**
  4.  *
  5.  * @author root
  6.  */
  7. public class Main {
  8.  
  9.    /**
  10.      * @param args the command line arguments
  11.      */
  12.    public static void main(String[] args) {
  13.        String operacion = new String("1+5");
  14.  
  15.        //procesador(operacion);
  16.  
  17.    }
  18.    public static int procesador(String proceso)
  19.    {
  20.        //Variable de instancia donde quedara definida la operacion convertida a string
  21.       int procesado = 0;
  22.       //Matriz de caracteres de toda la cadena procesada
  23.       char[] matrizCaracteres = proceso.toCharArray();
  24.        int[] bufferAritmetico = null;
  25.        System.out.println("Procesando expresion aritmetico-algebraica....");
  26.       for(int a = 0; a < proceso.length(); a++)
  27.       {
  28.           System.out.println(matrizCaracteres[a]);
  29.           if(Character.toString(matrizCaracteres[a]).equals("+") ||
  30.              Character.toString(matrizCaracteres[a]).equals("*") ||
  31.              Character.toString(matrizCaracteres[a]).equals("/") ||
  32.              Character.toString(matrizCaracteres[a]).equals("-"))
  33.           {
  34.             if(Character.toString(matrizCaracteres[a]).equals("+"))
  35.             {
  36.               bufferAritmetico[a] = +;
  37.             }else{
  38.  
  39.             }
  40.  
  41.  
  42.  
  43.  
  44.           }else{
  45.           bufferAritmetico[a] = Integer.parseInt(Character.toString(matrizCaracteres[a]).trim());
  46.           }
  47.           }
  48.           System.out.println(bufferAritmetico);
  49.       return procesado;
  50.    }
  51.  
  52. }
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
  1. for(int a = 0; a < proceso.length(); a++)

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

Código
  1. for(char c: matrizCaracteres)


Código
  1. bufferAritmetico[a] = +;
  2.  
?? :xD

Citar
pero 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
  1. if(Character.toString(matrizCaracteres[a]).equals("+") || ... ) {
  2.  if(Character.toString(matrizCaracteres[a]).equals("+")) {
  3.  ....
  4.  

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





« Última modificación: 29 Marzo 2010, 18:11 pm por Darhius » En línea

abc
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Añadir simbolos de operacion desde cadena y viceversa
« Respuesta #2 en: 29 Marzo 2010, 20:21 pm »

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
En línea

Blitzkrieg'


Desconectado Desconectado

Mensajes: 546


print('Hi there')


Ver Perfil WWW
Re: Añadir simbolos de operacion desde cadena y viceversa
« Respuesta #3 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.
En línea



Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Añadir simbolos de operacion desde cadena y viceversa
« Respuesta #4 en: 29 Marzo 2010, 21:44 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
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Añadir simbolos de operacion desde cadena y viceversa
« Respuesta #5 en: 29 Marzo 2010, 23:30 pm »

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
« Última modificación: 30 Marzo 2010, 00:17 am por LEYER » En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Añadir simbolos de operacion desde cadena y viceversa
« Respuesta #6 en: 30 Marzo 2010, 08:58 am »

He encontrado esta libreria que por ahora funciona muy bien:
https://eval.dev.java.net/eval-dist-0.5.zip

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines