Trocar letras de um array pelo outro

Olá :slight_smile:
Estou fazendo um programinha para relembrar meus conhecimentos em java.
Nele, a pessoa digita algo e ele codifica o que a pessoa digitou. No caso que vou citar, ele se baseia naquela brincadeira de ZENIT POLAR, trocanco Z por E e vice-versa, assim como outros caracteres.

public class Criptografia 
{
	String[] letras={"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"};
	String[] zenit={"I", "B", "C", "D", "O", "F", "G", "H", "A", "J", "K", "N", "M", "L", "E", "Z", "Q", "T", "S", "R", "U", "V", "W", "X", "Y", "P"};

	
	public String zenitPolar(String palavra)
	{
		String palavraCodificada = "";
		
		for (int i = 0; i < letras.length; i++)
		{
			palavraCodificada = palavra.replace(letras[i], zenit[i]);
			
		}
		return palavra;
		
	}

Gostaria de saber o que falta no código, já que ao digitar a palavra, ele continua igual:

public class Teste {
public static void main(String[] args) {
	Criptografia c= new Criptografia();
	String palavra=(JOptionPane.showInputDialog("Digite uma palavra"));
	c.zenitPolar(palavra);
        
	System.out.println(palavra);

Troque

c.zenitPolar(palavra); 

por

palavra = c.zenitPolar(palavra); 

Além do que o entaglement falou, lembre-se que Strings são imutáveis. Logo, a variável palavra não se altera com o replace. Ela só retorna a palavra alterada.
Por isso, o último replace que você dá é o que termina na palavra codificada.

Para fazer o que você quer, você deve alterar periodicamente um pelo outro, assim:

public String zenitPolar(String palavra) { String palavraCodificada = palavra; for (int i = 0; i < letras.length; i++) { palavraCodificada = palavraCodificada.replace(letras[i], zenit[i]); } return palavraCodificada; }

Note que vc também estava retornando palavra ao invés de palavraCodificada.

Há formas mais eficientes de se fazer o que você quer.

Lembre-se que a letra A tem o valor 65. Então, você poderia só criar o array zenit e usar essa propriedade:

public class Criptografia { String[] zenit={"I", "B", "C", "D", "O", "F", "G", "H", "A", "J", "K", "N", "M", "L", "E", "Z", "Q", "T", "S", "R", "U", "V", "W", "X", "Y", "P"}; public String zenitPolar(String palavra) { StringBuilder palavraCodificada = new StringBuilder(); for (int i = 0; i < palavra.length; i++) { int aOffSet = (int) 'A'; int letra = (int)palavra.chatAt(i); palavraCodificada.append(zenit[letra-aOffSet]); } return palavraCodificada.toString(); } }

Ok, eu fiz as alterações no código como citado, e ele funciona parcialmente.

Quando eu digito ZENIT, ele retornaria POLAR, certo?
Mas ele retorna PELAR.
Eu já olhei os dois vetores e a ordem está certa, algum outro possível erro?

Na última dica o programa roda normal…
Mas agora fiquei encucada, pq ele não funciona do outro jeito…