Olá Pessoal!
Estou com um problema para fazer um método que deve receber uma String e retornar outra criptografada pelo Ciframento de César usando chave 3.
Por exemplo:
a letra ‘c’ deve ser alterada para ‘f’;
a letra ‘a’ deve ser alterada pela letra ‘d’;
(código ascii + 3)
Tenho algumas saídas que são esperadas para realizar testes, e o método que fiz funciona para algumas, porém, outras estão retornando caracteres diferentes dos que são esperados:
Entrada: ”
Saída Esperada: —
Saída do método: †
Entrada: ’
Saída Esperada: •
Saída do Método: ’
Código:
public static String ciframento(String palavra){
String cifrada = "";
int chave = 3;
for(int i = 0; i < palavra.length(); i++){
int cod = (int) palavra.charAt(i);
cifrada = cifrada + (char) (cod + chave);
}
return cifrada;
}
Alguém tem alguma ideia do que pode estar acontecendo?
Aparentemente seu código funciona, veja: https://ideone.com/TtASWJ
Não deu pra entender as entradas que deram errado, quais caracteres são esses? São as aspas ou foi erro de digitação? Acho que ficaria mais fácil se você colocasse a string inteira que deu problema. E não esqueça de formatar corretamente o código. Basta selecioná-lo e usar o botão </>
do editor:
De qualquer forma, tem outra maneira - na minha opinião - mais simples. Basta obter o array de char
da string, modificá-lo (somando 3 em todos os elementos) e criar a nova string a partir dele:
public static String ciframento(String palavra){
char[] chars = palavra.toCharArray();
int chave = 3;
for(int i = 0; i < chars.length; i++){
chars[i] += chave;
}
return new String(chars);
}
Muito Obrigada pela dica!
De acordo com a tabela seriam esses caracteres:
As aspas duplas (código 148) deveria retornar o traço (código 151)
E a citação a direita (código 146) deveria retornar o ponto (código 149)
Vou colocar a String inteira:
Entrada: Me vê se a panela da moça é de aço, Madalena Paes, e vem.”
Saída Esperada: Ph#yí#vh#d#sdqhod#gd#prêd#ì#gh#dêr/#Pdgdohqd#Sdhv/#h#yhp1—
Entrada: fale à Danissa!’
Saída Esperada: idoh#ã#Gdqlvvd$•
Tem certeza que essa tabela está certa?
Pois o caractere 148 não é aspas duplas, na verdade ele se chama “CANCEL CHARACTER”:
System.out.println(Character.getName(148)); // CANCEL CHARACTER
Quando você usa o HTML Entity ”
, ele se torna o caractere “RIGHT DOUBLE QUOTATION MARK”, cujo código é 8221. Faça esse teste em JavaScript:
var p = document.createElement('p');
p.innerHTML = '”';
console.log(p.innerText.codePointAt(0)); // 8221
E ao somar 3, o resultado é o caractere cujo código é 8224, que no caso é o “DAGGER” (†
).
O mesmo acontece com o —
, cujo código é 8212 (“EM DASH”), ou seja, a diferença dele para as aspas nem é 3, não teria como um virar o outro mesmo.
1 curtida
Então é isso mesmo, fiz esse teste aqui e consegui ver o erro agora, eu estava em dúvida se esta tabela estava certa ou o se o problema era meu código.
Muito Obrigada!