Estou tendo dificuldades com a lógica em meu código

1 resposta
javaprogramação
F

Estou criando uma aplicação que recebe um número de 4 dígitos pelo usuário e faz uma encriptação do mesmo utilizando um algoritmo.

Os passos são o seguinte:

1 - Ler um número de 4 digitos;

2 - Criptografar este número com o seguinte algoritmo: substitua cada dígito pelo resultado da adição de 7 ao dígito, obtendo o restante depois da divisão do novo valor por 10. Troque então o primeiro dígito pelo terceiro e o segundo dígito pelo quarto;

3 - Imprimir o número criptografado;

4 - Criar uma aplicação separada que descriptografe um número criptografado entrado pelo usuário (revertendo o esquema de criptografia).

Eu consegui realizar os três primeiros passos, mas encontro muita dificuldade com o quarto passo, especificamente ao reverter o esquema de criptografia. Aqui vai o código:

import java.util.Scanner;

public class Encrypt {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		int i; //contador
		int num; //inteiro de 4 dígitos
		int digito; //digito do inteiro
		String digitoString = ""; //armazena os digitos em String
		String string; //string que vai possibilitar o acesso aos digitos individualmente
		
		System.out.println("Enter a 4 digit integer: ");
		num = in.nextInt();
		
		//convertendo o número para string 
		string = Integer.toString(num);
		
		//encriptando cada digito
		for (i=0; i< string.length(); i++) {
			
			digito = Integer.parseInt(String.valueOf(string.charAt(i)));																																
			digito = (digito+7)%10; 						
			digitoString += String.valueOf(digito);
		}
		
		//transformar o primeiro dígito em terceiro e o segundo dígito em quarto
		System.out.print("\n\nEncrypteded number: ");
		char dig1 = digitoString.charAt(0);
		char dig2 = digitoString.charAt(1);
		char dig3 = digitoString.charAt(2);
		char dig4 = digitoString.charAt(3);
	
		//trocando os dígitos
		dig1 = dig3;
		
		dig2 = dig4;
		
		//imprimindo o numero criptografado
		String numEncriptado = dig1+""+dig2+""+dig3+""+dig4;
		
		System.out.println("\n"+numEncriptado);
		
	
	}

}

Gostaria que me guiassem com a realização do quarto passo e no aprimoramento deste código, se possível.

1 Resposta

pmlm

Aqui não estás a trocar os digitos, estás a colocar o 1 igual ao 3 e o 2 igual ao 4. E estás a descartar completamente o anterior 1 e 3;

Se tirares esta parte, podes simplesmente fazer

String numEncriptado = dig3+""+dig4+""+dig1+""+dig2;

Para descriptografar, fazes as operações pela ordem inversa.
Primeiro trocas os digitos, depois, uma vez que fazes mod 10, em vez de somar 7, somas 3.

Criado 24 de dezembro de 2021
Ultima resposta 27 de dez. de 2021
Respostas 1
Participantes 2