entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

problema casting de int a char en Java no muestra nada en consola

Cuando intento hacer una conversión de un valor interger a char, al mostrar por consola esa variable no me muestra nada, sin embargo, si le sumo un valor al char (ya convertido) si que me muestra por consola la variable.. pero entonces nunca muestra lo que realmente debe tener dicha variable.
La instrucción comentada es la que me sirve, en cambio la que tocaría funcionar sin problemas no muestra nada por consola.

public static char generarAleatorio(int min, int max){
    char caracterAleatorio;                            
    //caracterAleatorio = (char)(('a')+((min+(int)(Math.random()*(max-min)))-1));
    caracterAleatorio = (char)(min+(int)(Math.random()*(max-min))));
    return caracterAleatorio;
}

Si ahora asignara a una variable el valor que retorna generarAleatorio(); y lo mostrara con un System.out.println(); no me muestra nada, si uso la orden comentada sí.. pero me parece un poco chapuzas.

Alguien sabe a qué se debe ésto?

PD: Uso Netbeans 7.3 por si sirve de algo..

3 Respuestas

3votos

clsm Puntos260

Hola,

El problema está en que el valor entro (int) que obtienes de forma aleatoria no es un valor representable en formato carácter (char). Al sumar el valor aleatoria al valor entorno (int) de la letra 'a', te estas asegurando que el carácter sea representable y lo puedas mostrar en la consola.

Para solucionarlo te debes asegurar de que el valor aleatorio que calculas esté dentro del juego de caracteres representables. Algo así:

public static char generarAleatorio(int min, int max) { 
  String base="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  int pos = (min+(int)(Math.random()*(max-min)))) % base.lenght();
  char caracterAleatorio = base.charAt(pos);
  return caracterAleatorio;
}

Saludos.

3votos

morgano Puntos200

Tu método funciona perfecto para mí, tal vez el problema está en como lo estás llamando. Si yo lo uso de esta forma:

System.out.println(generarAleatorio('a', 'z'));

entonces siempre genera un char aleatorio, que puede ser una minúscula entre a y z. Pero si lo que estás haciendo es algo como:

System.out.println(generarAleatorio(1, 26));

entonces sí que tienes problemas, porque (char)1 no es igual a 'a'. Un par de consejos a esto:

  • Por claridad y limpieza de código, cambia el tipo de los parámetros de tu método a char de esta forma:

    public static char generarAleatorio(char min, char max) { ... }

    después de todo estás trabajando con caracteres (char), no con números (int)

  • Revisa la lógica del código que está llamando a tu método, si resulta que el código externo realmente mapea "a" a "1", entonces aplica el consejo de @clsm y haz tu mapeo interno (la variable String "abcd...")

1voto

gonnotda Puntos770

Os dejo mi aportación:

public class JavaApplication1 {

public static char generarAleatorio(){
    char caracterAleatorio;                            
    caracterAleatorio = (char)((Math.random() * (int)'a') + (int)'a');
    return caracterAleatorio;
}

public static void main(String[] args) {
    System.out.println(generarAleatorio());
}

}

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta