Friday, July 01, 2005

Algoritmo de la calculadora!

//Para evaluar una expresion como la que sigue: 9+(2*3)
if ( expresion.matches("[0-9]{0,}[\\+\\*\\-\\/][\\(][0-9]{0,}[\\+\\*\\-\\/][0-9]{0,}[\\)]") )
{
int init = expresion.lastIndexOf("("); //posicion donde inicia el parentesis
int end = expresion.lastIndexOf(")"); //posicion donde cierra el parentesis
int hastaaqui = 0; //para saber hasta donde llega el 1er numero
result = expresion.substring( init, end + 1 ); //para coger desde donde inicia hasta donde termina
StringBuffer tmp = new StringBuffer( result ); //para poder borrar los parentesis de los lados
result = tmp.deleteCharAt(0).toString(); //borra el primero parentesis
result = tmp.deleteCharAt( result.length() - 1 ).toString(); //borra el ultimo parentesis

//machea si es el numero + la operacion + el numero (los que estan en el parentesis)
if ( result.matches("[0-9]{0,}[\\+][0-9]{0,}") )
{
number = result.split("[\\+]");
hastaaqui = expresion.indexOf("+");
signo = 1;
}
else if ( result.matches("[0-9]{0,}[\\-][0-9]{0,}") )
{
number = result.split("[\\-]");
hastaaqui = expresion.indexOf("-");
signo = 2;
}
else if ( result.matches("[0-9]{0,}[\\*][0-9]{0,}") )
{
number = result.split("[\\*]");
hastaaqui = expresion.indexOf("*");
signo = 3;
}
else if ( result.matches("[0-9]{0,}[\\/][0-9]{0,}") )
{
number = result.split("[\\/]");
hastaaqui = expresion.indexOf("/");
signo = 4;
}
else
number = new String[1];


//machea la operacion con el numero que esta fuera del parentesis
if ( expresion.matches("[0-9]{0,}[\\+][\\(][0-9]{0,}[\\+\\*\\-\\/][0-9]{0,}[\\)]") )
{
hastaaqui = expresion.indexOf("+");
zSigno = 1;
}
else if ( expresion.matches("[0-9]{0,}[\\-][\\(][0-9]{0,}[\\+\\*\\-\\/][0-9]{0,}[\\)]") )
{
hastaaqui = expresion.indexOf("-");
zSigno = 2;
}
else if ( expresion.matches("[0-9]{0,}[\\*][\\(][0-9]{0,}[\\+\\*\\-\\/][0-9]{0,}[\\)]") )
{
hastaaqui = expresion.indexOf("*");
zSigno = 3;
}
else if ( expresion.matches("[0-9]{0,}[\\/][\\(][0-9]{0,}[\\+\\*\\-\\/][0-9]{0,}[\\)]") )
{
hastaaqui = expresion.indexOf("/");
zSigno = 4;
}



switch( signo ) //Para asociar un numero por la operacion matematica (los que estan dentro del parentesis)
{
case 1:
aFinal = ( Double.parseDouble( number[0] ) + Double.parseDouble( number[1] ) ) ;
break;

case 2:
aFinal = ( Double.parseDouble( number[0] ) - Double.parseDouble( number[1] ) ) ;
break;

case 3:
aFinal = ( Double.parseDouble( number[0] ) * Double.parseDouble( number[1] ) ) ;
break;

case 4:
aFinal = ( Double.parseDouble( number[0] ) / Double.parseDouble( number[1] ) ) ;
break;
}

0 Comments:

Post a Comment

<< Home