programa java

Iniciado por javieer, 27 Febrero 2019, 17:11 PM

0 Miembros y 1 Visitante están viendo este tema.

javieer

Hola a todos,

estoy completando un programa en el que a traves de una funcion " static char[] encriptacionpalabras (int tamañopalabra) {} , al introducir una palabra se devuelve esta con la misma longitud pero con asteriscos, tengo que completar el codigo de la funcion. alguna pista? deberia empezar con un for?

Gracias.

Serapis

Hay varias formas de acometerlo...

- Una muy sencilla es conociendo la cantidad de caracteres que tiene la palabra, crear otra del mismo tamaño formado solo por asteriscos. La palabra original no se ve así alterada.
- Si el tamaño de las palabras está limitado a un máximo (pongamos 16-20 caracteres), por velocidad puede crearse un array cuyo contenido sean precisamente strings de 1,2,3,4...hasta 16 asteriscos, cuando se reciba la palabra, se devuelve el string contenido en la posición cuyo índice coincide con el tamaño de caracteres de la palabra recibida. La palabra original no se ve así alterada.
- Otro modo... inicias un bucle y remplazas cada carácter aparecido por un asterisco. La palabra original si queda alterada en este otro caso.

...y ahora es tu turno de escribir código...

srWhiteSkull

Yo te recomiendo que añadas otro parámetro y que lo denomines clave, de esa forma podrás usar una clave para cifrar las palabras o textos y hacer más seguro, según el algortimo, la cifrado.

Luego te pongo un ejmeplo que ahora me tengo que ir.

srWhiteSkull

Código (java) [Seleccionar]
...
    public static String encriptaTexto(String clave, String texto){
        String textoEncriptado= new String();
        int i=0;
        char cClave;
        for (char caracter:texto.toCharArray()){
            cClave = clave.charAt((i++)% clave.length());
            textoEncriptado+=(""+(char)(caracter+cClave));
        }
        return textoEncriptado;
    }
   
    public static String desencriptaTexto(String clave, String textoEncriptado){
        String texto= new String();
        int i=0;
        char cClave;
        for (char caracter:textoEncriptado.toCharArray()){
            cClave = clave.charAt((i++)% clave.length());
            texto+=(""+(char)(caracter-cClave));
        }       
        return texto;
    }
   
    public static void main(String[] args) {
        String textoEncriptado=encriptaTexto("1234","Hola mundo");
       
        System.out.println(textoEncriptado);       
        System.out.println(desencriptaTexto("1234",textoEncriptado));       
    }
...


Resultado:
y¡Ÿ•QŸ¨¢•¡
Hola mundo

Serapis

srWhiteSkull, nota que no pide cifrar nada, tan solo 'tapar' la clave con asteriscos, lo cual es trivial.
Citar...al introducir una palabra se devuelve esta con la misma longitud pero con asteriscos...

javieer

gracias a todos por la respuesta, ya logré hacer que convirtiera el texto a asteriscos aunque ahora me falta una funcion booleana que cuando aciertes una letra desaparezca el asterisco como lo puedo hacer¿

spcruzaley

Que tal javieer

No se como hiciste tu implementacion, pero aqui te dejo una propuesta que hice y que quiza puedas adaptar a tus necesidades.

Código (java) [Seleccionar]

public class Pruebas {

    private String palabra;
    private char[] palabraEncriptada;

    public static void main(String[] args) {
        Pruebas pruebas = new Pruebas("unapalabra");
        pruebas.cifra();
        pruebas.log();
        pruebas.validarLetra('n');
        pruebas.log();
        pruebas.validarLetra('a');
        pruebas.log();
        pruebas.validarLetra('r');
        pruebas.log();
        pruebas.validarLetra('l');
        pruebas.log();
    }

    public Pruebas(String palabra) {
        this.palabra = palabra;
    }

    public void cifra() {
        char[] asteriscos = new char[palabra.length()];
        Arrays.fill(asteriscos, '*');
        this.palabraEncriptada = Arrays.copyOf(asteriscos, asteriscos.length);
    }

    public void validarLetra(char letra) {
        int posicion = this.palabra.indexOf(letra);

        if(posicion >= 0) {
            this.palabraEncriptada[posicion] = letra;
        }
    }

    public void log() {
        System.out.println(Arrays.toString(this.palabraEncriptada));
    }
}


Log de salida:
Código (java) [Seleccionar]

[*, *, *, *, *, *, *, *, *, *]
[*, n, *, *, *, *, *, *, *, *]
[*, n, a, *, *, *, *, *, *, *]
[*, n, a, *, *, *, *, *, r, *]
[*, n, a, *, *, l, *, *, r, *]



Saludos.