Autor Tema: Ejercicio reemplazar Abecedario por simbolos Java  (Leído 2694 veces)

jinn30

  • Sin experiencia
  • *
  • Mensajes: 5
  • Programador principiante :D
    • Ver Perfil
Ejercicio reemplazar Abecedario por simbolos Java
« en: 13 de Diciembre 2022, 23:45 »
Se debe codificar el abecedario dentro de un arraylist con su correspondiente simbolo pidiendo un nombre por consola.
Yo lo trabaje con el metodo replace, pero ahora debo cambiar todo y ponerlo en un array, mire alguno videos pero la verdad no entendi.

Código: [Seleccionar]
    public static void main(String args[]) {
       
        Scanner scan = new Scanner(System.in);
     System.out.println("Ingrese el nombre");
     String x = scan.nextLine();

     
       String traduccion=x.replace('a','!' ).replace('b', '"').replace('c', '#')
               .replace('d', '$') .replace('e', '%') .replace('f', '&') .replace('g', '´')
                .replace('h', '(') .replace('i', ')') .replace('j', '*') .replace('k', '+')
                .replace('l', ',') .replace('m', '-') .replace('n', '.') .replace('o', '/')
               .replace('p', '0').replace('q', '1').replace('r', '2').replace('s', '3')
               .replace('t', '4').replace('u', '5').replace('v', '6').replace('w', '7')
               .replace('x', '8').replace('y', '9').replace('z', ':');
        System.out.printf("Nombre traducido: %s\n", traduccion);
       
       
   }

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ejercicio reemplazar Abecedario por simbolos Java
« Respuesta #1 en: 14 de Diciembre 2022, 00:56 »
Mmmhh.., no lo veo claro lo de hacerlo con un array / ArrayList....

Hace poco hice un ejercicio similar y lo hice usando una matriz donde tenía "parejas" de caracteres, es decir, el carácter "normal" junto con el carácter/cadena que lo sustituye.

Código: [Seleccionar]
public class Ofuscar {
 
private final static String[][] TABLA = new String[][] {
{"A","4"},{"a","@"},{"B","8"},{"C","(("},
{"D","))"},{"E","3"},{"e","?"},{"G","6"},
{"H","#"},{"I","|"},{"i","1"},{"J","!"},
{"O","0"},{"o","*"},{"P","9"},{"S","$$"},
{"s","2"},{"T","7"},{"t","+"},{"V","\\/"},
{"Y","&"}
};
 
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.print("Introduce password: ");
String pass = teclado.nextLine();
teclado.close();
 
//Construiremos un nuevo String con las letras originales y las ofuscadas
StringBuilder passOfuscado = new StringBuilder();
 
for (int i = 0; i < pass.length(); i++) {
//Seleccionamos letra original
String letra = pass.substring(i, i+1);
//Con un boolean controlamos si la letra sera ofuscada o no
boolean ofuscada = false;
//Recorremos la TABLA
for (int j = 0; j < TABLA.length; j++) {
if (letra.equals(TABLA[j][0])) {
//Letra existe en la TABLA, agregamos su equivalente ofuscado
passOfuscado.append(TABLA[j][1]);
ofuscada = true; //La letra ha sido ofuscada
break; //Ya no es necesario seguir recorriendo la TABLA para la letra actual
}
}
//Si la letra NO ha sido ofuscada, debemos agregar la letra original
if (!ofuscada)
passOfuscado.append(letra);
}
 
//Proceso de ofuscacion terminado
System.out.println("\nPassword ofuscado: " + passOfuscado.toString());
 
}
 
}



Se podría adaptar cambiando las "parejas" de la TABLA para que sean como las del "abecedario" de tu ejercicio.

El resto del código podría quedarse igual, aunque de hecho, se podría simplificar porque en tu ejercicio se han de sustituir todas los caracteres y en el que yo hice algunos se sustituían y otros no.

Usando un ArrayList, no veo cómo almacenar las "parejas".
A no ser que en el ArrayList guardemos pequeños arrays de 2 elementos para tener las parejas.
Aunque eso sería precisamente crear una matriz...

Mira a ver si lo de la matriz te sirve e intenta adaptar mi código para tu ejercicio. Si no lo consigues, dilo y te ayudamos.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jinn30

  • Sin experiencia
  • *
  • Mensajes: 5
  • Programador principiante :D
    • Ver Perfil
Re: Ejercicio reemplazar Abecedario por simbolos Java
« Respuesta #2 en: 14 de Diciembre 2022, 01:07 »
Ahora que tu lo propones asi con la matriz si tiene mas sentido. Acepto la ayuda. Gracias por lo anterior.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ejercicio reemplazar Abecedario por simbolos Java
« Respuesta #3 en: 14 de Diciembre 2022, 12:02 »
Mira, como dije antes, en tu ejercicio se puede simplificar el proceso ya que hay que traducir TODOS los caracteres.

Hacemos una tabla matriz similar a la de mi ejercicio, solo que de tipo char.

Pedimos una cadena por teclado y a continuación recorremos con un bucle la matriz.
En cada repetición del bucle, aplicamos un replace() usando como argumentos las "parejas" de la matriz.

Y listo, nombre traducido.

Código: [Seleccionar]
public class Reemplazar {

private final static char[][] TABLA = new char[][] {
{'a','!'},{'b','"'},{'c','#'},{'d','$'},
{'e','%'},{'f','&'},{'g','´'},{'h','('},
{'i',')'},{'j','*'},{'k','+'},{'l',','},
{'m','-'},{'n','.'},{'o','/'},{'p','0'},
{'q','1'},{'r','2'},{'s','3'},{'t','4'},
{'u','5'},{'v','6'},{'w','7'},{'x','8'},
{'y','9'},{'z',':'}
};

public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.print("Introduce nombre: ");
String nombre = teclado.nextLine();
teclado.close();

for (int i = 0; i < TABLA.length; i++) {
nombre = nombre.replace(TABLA[i][0], TABLA[i][1]);
}

System.out.println("Nombre traducido: " + nombre);

}

}

Al ejecutarlo, parece funcionar bien:
Citar
Introduce nombre: juan antonio
Nombre traducido: *5!. !.4/.)/
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jinn30

  • Sin experiencia
  • *
  • Mensajes: 5
  • Programador principiante :D
    • Ver Perfil
Re: Ejercicio reemplazar Abecedario por simbolos Java
« Respuesta #4 en: 14 de Diciembre 2022, 17:26 »
Muchas gracias, si lo hice similar, excepto por recorrer la tabla, aún se me dificulta entender el for. La ultima duda que tengo es como hacer para que de alguna manera compare los nombres traducidos, con el que va a ser almacenado, cosa de que si es igual, no muestre la traduccion y diga que existe el nombre. Lo intente con .equals y no me funciono como crei y eso dentro de un if.
Código: [Seleccionar]
String a = ...
String b = ...

if (Objects.equals(a, b)) {
    // iguales
} else {
    // diferentes
}

No se si el problema esta en como vuelvo a pedir el nombre o simplemente esa estructura no me sirve.
Ya siento que me estoy aprovechando de ti. :(

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ejercicio reemplazar Abecedario por simbolos Java
« Respuesta #5 en: 14 de Diciembre 2022, 18:32 »
Mmmhh... no me ha quedado claro lo que necesitas hacer. Quizás si publicas el código completo pueda entender en que consiste tu ejercicio.

En cualquier caso, la clase String ya incorpora su propio método equals.

Código: [Seleccionar]
String a = ...
String b= ...

if (a.equals(b) {
    //iguales
}
else {
    //diferentes
}

Comprueba si de esta manera te da mejor resultado.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jinn30

  • Sin experiencia
  • *
  • Mensajes: 5
  • Programador principiante :D
    • Ver Perfil
Re: Ejercicio reemplazar Abecedario por simbolos Java
« Respuesta #6 en: 14 de Diciembre 2022, 21:56 »
Si mira este es el codigo completo
Código: [Seleccionar]
  public static void main(String args[]) {
        String tecla = null;
        Scanner scan = new Scanner(System.in);
        Scanner scanner = new Scanner(System.in);
        do {
            System.out.println("---Menu de opciones---");
            System.out.println("1. Traducir nombre");
            System.out.println("Ingresar opcion:");

            int opcion = scanner.nextInt();
            System.out.println("Ingrese el nombre del terricola: ");
            String nombre = scan.nextLine();
            boolean opc = (opcion <= 1);

            switch (opcion) {
                case 1:
                    String traduccion = nombre.replace('a', '!').replace('b', '"').replace('c', '#')
                            .replace('d', '$').replace('e', '%').replace('f', '&').replace('g', '´')
                            .replace('h', '(').replace('i', ')').replace('j', '*').replace('k', '+')
                            .replace('l', ',').replace('m', '-').replace('n', '.').replace('o', '/')
                            .replace('p', '0').replace('q', '1').replace('r', '2').replace('s', '3')
                            .replace('t', '4').replace('u', '5').replace('v', '6').replace('w', '7')
                            .replace('x', '8').replace('y', '9').replace('z', ':');


                    if (nombre.equals(traduccion)) {
                        System.out.println("El nombre ya existe"); //Correcto para comparar strings!
                    }
                    else
                        System.out.printf("Nombre traducido a marciano: %s\n", traduccion);
                   
                    break;
        }

            System.out.print("\n¿Quiere seguir?\n");
            tecla = new Scanner(System.in).nextLine();

        } while (tecla.equals("si") || tecla.equals("s"));
    }
}


Te lo pongo con un ejemplo:

---Menu de opciones---
1. Traducir nombre
Ingresar opcion:
1
Ingrese el nombre del terricola:
karenth
Nombre traducido a marciano: +!2%.4(

¿Quiere seguir?
si
---Menu de opciones---
1. Traducir nombre
Ingresar opcion:
1
Ingrese el nombre del terricola:
karenth   // Aca donde se repite el nombre necesito que diga que existe
Nombre traducido a marciano: +!2%.4(     //y que no muestre la traducción
¿Quiere seguir? // si debe hacer la pregunta


Pero no lo he logrado, no se si cuando vuelve al menu la variable se resetea y pierde el valor anterior
¿Tienes alguna idea mejor? Gracias por tanto.

jinn30

  • Sin experiencia
  • *
  • Mensajes: 5
  • Programador principiante :D
    • Ver Perfil
Re: Ejercicio reemplazar Abecedario por simbolos Java
« Respuesta #7 en: 14 de Diciembre 2022, 21:57 »
Si mira este es el codigo completo
Código: [Seleccionar]
  public static void main(String args[]) {
        String tecla = null;
        Scanner scan = new Scanner(System.in);
        Scanner scanner = new Scanner(System.in);
        do {
            System.out.println("---Menu de opciones---");
            System.out.println("1. Traducir nombre");
            System.out.println("Ingresar opcion:");

            int opcion = scanner.nextInt();
            System.out.println("Ingrese el nombre del terricola: ");
            String nombre = scan.nextLine();
            boolean opc = (opcion <= 1);

            switch (opcion) {
                case 1:
                    String traduccion = nombre.replace('a', '!').replace('b', '"').replace('c', '#')
                            .replace('d', '$').replace('e', '%').replace('f', '&').replace('g', '´')
                            .replace('h', '(').replace('i', ')').replace('j', '*').replace('k', '+')
                            .replace('l', ',').replace('m', '-').replace('n', '.').replace('o', '/')
                            .replace('p', '0').replace('q', '1').replace('r', '2').replace('s', '3')
                            .replace('t', '4').replace('u', '5').replace('v', '6').replace('w', '7')
                            .replace('x', '8').replace('y', '9').replace('z', ':');


                    if (nombre.equals(traduccion)) {
                        System.out.println("El nombre ya existe"); //Correcto para comparar strings!
                    }
                    else
                        System.out.printf("Nombre traducido a marciano: %s\n", traduccion);
                   
                    break;
        }

            System.out.print("\n¿Quiere seguir?\n");
            tecla = new Scanner(System.in).nextLine();

        } while (tecla.equals("si") || tecla.equals("s"));
    }
}


Te lo pongo con un ejemplo:

Citar
---Menu de opciones---
1. Traducir nombre
Ingresar opcion:
1
Ingrese el nombre del terricola:
karenth
Nombre traducido a marciano: +!2%.4(

¿Quiere seguir?
si
---Menu de opciones---
1. Traducir nombre
Ingresar opcion:
1
Ingrese el nombre del terricola:
karenth   // Aca donde se repite el nombre necesito que diga que existe
Nombre traducido a marciano: +!2%.4(     //y que no muestre la traducción
¿Quiere seguir? // si debe hacer la pregunta


Pero no lo he logrado, no se si cuando vuelve al menu la variable se resetea y pierde el valor anterior
¿Tienes alguna idea mejor? Gracias por tanto.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ejercicio reemplazar Abecedario por simbolos Java
« Respuesta #8 en: 14 de Diciembre 2022, 23:50 »
A ver, las variables "nombre" y "traduccion" JAMÁS van a ser iguales(equals) porque "traduccion" es el producto de alterar la variable "nombre".
Así que SIEMPRE serán distintas.

Parece ser que lo que necesitas es almacenar los nombres (sin traducir) que el usuario vaya introduciendo y evitar que vuelvan a ser traducidos.
Para esto sí tiene sentido usar el ArrayList del que hablábamos al principio.

En ese ArrayList podemos ir guardando los nombres introducidos y, antes de hacer ninguna traducción, comprobar si el nombre que nos da el usuario ya existe en el ArrayList.

Si ya existe, pues no traducimos.

Si no existe, hacemos la traducción y guardamos el nombre original en el ArrayList para no volver a traducirlo.

Señalo con colores los cambios en el código.
La línea en rojo y tachada, puedes borrarla del código, no tiene ninguna utilidad.

Citar
   public static void main(String args[]) {

      ArrayList<String> nombres = new ArrayList<String>();
      String tecla = null;
      Scanner scan = new Scanner(System.in);
      Scanner scanner = new Scanner(System.in);
      do {
         System.out.println("---Menu de opciones---");
         System.out.println("1. Traducir nombre");
         System.out.println("Ingresar opcion:");

         int opcion = scanner.nextInt();
         System.out.println("Ingrese el nombre del terricola: ");
         String nombre = scan.nextLine();
         boolean opc = (opcion <= 1);

         switch (opcion) {
         case 1:
            //Antes de traducir, comprobamos si este nombre ya ha sido traducido anteriormente
            if (nombres.contains(nombre)) //Sí ha sido traducido
               System.out.println("El nombre ya existe");
            else { //Nunca ha sido traducido
               String traduccion = nombre.replace('a', '!').replace('b', '"').replace('c', '#')
                     .replace('d', '$').replace('e', '%').replace('f', '&').replace('g', '´')
                     .replace('h', '(').replace('i', ')').replace('j', '*').replace('k', '+')
                     .replace('l', ',').replace('m', '-').replace('n', '.').replace('o', '/')
                     .replace('p', '0').replace('q', '1').replace('r', '2').replace('s', '3')
                     .replace('t', '4').replace('u', '5').replace('v', '6').replace('w', '7')
                     .replace('x', '8').replace('y', '9').replace('z', ':');
               
               System.out.printf("Nombre traducido a marciano: %s\n", traduccion);
               
               nombres.add(nombre); //Añadimos a la lista de nombres traducidos   
            }
            break;
         }

         System.out.print("\n¿Quiere seguir?\n");
         tecla = new Scanner(System.in).nextLine();

      } while (tecla.equals("si") || tecla.equals("s"));
   }
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".