Foros del Web » Programación para mayores de 30 ;) » Java »

problema

Estas en el tema de problema en el foro de Java en Foros del Web. Tengo la siguiente linea ingresada a un String 22*2-A deseo separar los caracteres e igualarlos a una variable independiente para imprimirlos uno por uno. tb ...
  #1 (permalink)  
Antiguo 19/05/2005, 19:20
 
Fecha de Ingreso: diciembre-2002
Ubicación: arequipa
Mensajes: 114
Antigüedad: 21 años, 4 meses
Puntos: 0
problema

Tengo la siguiente linea ingresada a un String 22*2-A deseo separar los caracteres e igualarlos a una variable independiente para imprimirlos uno por uno.
tb tengo q imprimir su codigo ascii de cada uno ejm de A = 65
y tb como puedo hacer al ingresar por teclado la letra a y despues b y igualar las dos a una variabl e imprimir ab.
  #2 (permalink)  
Antiguo 19/05/2005, 19:48
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 8 meses
Puntos: 1
Supongo que querrás hacer algo así como una calculadora. Si es así, supongo que el string 22*2-A también podría ser 22-4*b-45*c o cualquier cosa. Es decir, puede haber muchos símbolos, no sabemos cuántos. Si es así, deberás usar un java.util.Vector() para guardarlos. En cuanto a cómo separar los números y variables de las operaciones, puedes hacerlo con java.util.StringTokenizer:
Código:
import java.util.*;

...
String linea = "22*2-A"; // Podrá ser lo que sea
StringTokenizer tk = new StringTokenizer(linea, "*/-+"); // Todos los caracteres que sean operaciones
Vector v = new Vector(); // Aquí guardaremos cada variable
while(tk.hasMoreTokens()){
  String var = tk.nextToken();
  if(var.length() == 1 && Character.isLetter(var.charAt(0)))
    v.add(var);
}
// Y ahora se muestran uno a uno
Iterator it = v.iterator();
while(it.hasNext()){
  System.out.println(it.next());
}
Si no te hace falta guardarlos en el Vector, sino que sólo quieres mostrarlos por pantalla, te vale así:
Código:
import java.util.*;

...
String linea = "22*2-A"; // Podrá ser lo que sea
StringTokenizer tk = new StringTokenizer(linea, "*/-+"); // Todos los caracteres que sean operaciones
while(tk.hasMoreTokens()){
  String var = tk.nextToken();
  if(var.length() == 1 && Character.isLetter(var.charAt(0)))
    System.out.println(var);
}
__________________
Mi página personal: Julián Urbano
  #3 (permalink)  
Antiguo 20/05/2005, 11:53
 
Fecha de Ingreso: diciembre-2002
Ubicación: arequipa
Mensajes: 114
Antigüedad: 21 años, 4 meses
Puntos: 0
Claro la idea si es buena.
te explico el problema q quiero hacer.
ingreso los siguientes codigos.
23*136+3-
6136+3-
6193-
616
la cosa es ingresamos 2 luego 3 los acumula en una cola o un arreglo pero cada vez q encuentre un +-*/ cualquiera de esos operadores agarre los dos ultimos numeros q ingresamos y lo sume reste multiplique o divida ya cualquiera seal el operador q ingresemos si ingresamos un numero q lo siga acumulando en la cola o ya seal el caro que ingresemos 23*136+3- todo en una sola linea y te de resultado 616 q subtraiga los caracteres del string lo convierta a un entero si se trata de un numero o q realice la operacion si es un operador.
  #4 (permalink)  
Antiguo 20/05/2005, 12:48
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 8 meses
Puntos: 1
Tienes que mantener la jerarquí de operaciones?? Si no es así, haz esto:
Código:
Pila operadores, operandos;
while(tengo tokens){
if(el toquen es un operador)
 operadores.push(token);
else
 operandos.push(token);
}
// Y ahora operar
while(operadores no esté vacío){
  op = operadores.pop();
  op1 = operandos.pop();
  op2 = operandos.pop();
  resultado = op1 op op2; // 635 + 67 ,por ejemplo
  operandos.push(resultado);
}
final = operandos.pop(); // Este es el resultado
Se trata de ir apilando las cosas en pilas separadas, y al operar usar el operador dle tope de la pila y los dos operandos del tope de la otra pila.
__________________
Mi página personal: Julián Urbano
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 15:24.