Cifra de Cesar

6 respostas
N

Pessoal , através da Cifra de Cesar tenho que decodificar o código contido no vetor A utilizando o alfabeto do vetor B, deslocando 9 casas no vetor B.

public static void main(String[] args) {

char[] a = { 'U', 'N', '%', 'J', 'W', '#', 'N', 'I', '%','Ô','X','I','M','N','I','J','L','X','!','M','X','I','L','X','V','I','X',
                 '@','I','Y','U','J','W','X','@','I','À','@','I','E','Q','D','.','I','W','N','V','I','$','V','J','I','@','Ó','I','K',
                 'X','V','K','J','I','M','N','%','N','I','@','N','!','I','U','J','W','Ç','J','M','J','I','M','N','@','L','$','R','M',
                 'J','M','J','V','N','W','#','N','.' }; 

    

    char[] b = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
                  'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z','!','@','#','$','%',
                  '&','*','+','='}; 
   
    int k = 9;
        for(int i=0; i < a.length; i++){
            for(int j=0; j < b.length; j++){
            if ( a[i] == b[j]) {
                if (j < 9){                        
                    j = 25; /* 25 é o total de letras do alfabeto -1 (por começar do 0 */
                    k = 9 - j;                        
                }
               System.out.print(b[j -k]);
            }                
        }
    }
}

A mensagem decifrada fica correta, porém os caracteres que tem acento não estão imprimindo, tal como na palavra VOÔ e nos demais caracteres que tem acento e Ç.

run:
LEVANTE VO DE ACORDO COM OS PLANOS S 6H5 NEM UMA S BOMBA DEVE SER LANADA DESCUIDADAMENTE BUILD SUCCESSFUL (total time: 0 seconds)

O correto seria:

LEVANTE VOÔ DE ACORDO COM OS PLANOS ÀS 6H5 NEM UMA SÓ BOMBA DEVE SER LANÇADA DESCUIDADAMENTE.

Poderiam auxiliar?

6 Respostas

pmlm

Na tua mensagem encriptada não têns esses caracteres encriptados mas sim os originais: Ô À Ç … E no teu alfabeto não tens esses caracteres. A mensagem não está a encriptar esses caracteres, logo também não os deve desencriptar. Ou então acrescentas os mesmos ao teu alfabeto e voltas a encriptar.

N

Se eu acrescentar esses Caracteres no vetor B , ele vai seguir a regra dos demais caracteres, o que estaria errado, pois eles nao seguem a mesma regra. O correto seria quando o usuário digitasse por exemplo ‘Ô’ ele se manteria ‘Ô’ para mostrar na saida para o usuário e não andar 9 elementos para trás no vetor como os demais.

peczenyj

Bom entao que tal implementar essa condição?

como vc faria isso?

N

Tentei criar outro if caso (a[i] != a[b]). Fiz teste com Switch case , e tbm testei com outro vetor. Sem sucesso.

peczenyj

Antes do loop interno, crie uma variabel booleana achei = false;

Achou a letra? achei vira true

Acabou o loop interno: acho é false? Então vc caiu nesse caso particular meu caro :slight_smile:

Sergiojunior_Lhp

tenta isso man.

if ( a[i] == b[j]) {
	if (j < 9){                        
		j = 25; /* 25 é o total de letras do alfabeto -1 (por começar do 0 */
		k = 9 - j;                        
	}
	System.out.print(b[j -k]);
}
else {
	System.out.print(a[i]);
}
Criado 28 de outubro de 2016
Ultima resposta 29 de out. de 2016
Respostas 6
Participantes 4