Srs, relutei mas não consegui detectar o erro, por fvr me ajudem. Estou fazendo o exercício do Deitel de forma alterada para depois ir no X da questão mas não estou conseguindo somar 7 a cada um dos dígitos da senha. Por exemplo, se digitar 1234 a senha criptografada deveria ser 891011 e só aparece 7777. Alguem pode me ajudar ? Segue abaixo o código:
/* 4.36 - Uma empresa quer transmitir dados por telefone, mas está preocupada com a possibilidade de seus
* telefones estarem grampeados. Ela pediu para você escrever um programa que criptografe dados de modo que
* estes possam ser transmitidos mais seguramente. Todos os dados são transmitidos como inteiros de quatro
* dígitos. Seu aplicativo deve ler um inteiro de quatro dígitos inserido pelo usuário e criptografá-lo desta
* maneira: Substitua cada dígito pelo resultado da adição de 7 ao dígito e obtendo o resto depois da divisão
* do novo valor por 10. Troque então o primeiro dígito pelo terceiro e o segundo pelo quarto. Então imprima o
* inteiro criptografado. Escreva um aplicativo separado que receba entrada de um inteiro de quatro dígitos
* criptografado e o descriptografe para formar o número original.
*/
import java.util.Scanner;
/**
*
* @author paulo
*/
public class Criptografar
{
Scanner entrada = new Scanner(System.in);
Scanner entrada1 = new Scanner(System.in);
private int numero1;
private int numero2;
private int numero3;
private int numero4;
private int senha;
private int criptografia;
public Criptografar(int n1,int n2,int n3,int n4, int sen, int cripto)
{
numero1 = n1;
numero2 = n2;
numero3 = n3;
numero4 = n4;
senha = sen;
criptografia = cripto;
}
public void setNumero1(int n1)
{
numero1 = n1;
}
public int getNumero1()
{
return numero1;
}
public void setNumero2(int n2)
{
numero2 = n2;
}
public int getNumero2()
{
return numero2;
}
public void setNumero3(int n3)
{
numero3 = n3;
}
public int getNumero3()
{
return numero3;
}
public void setNumero4(int n4)
{
numero4 = n4;
}
public int getNumero4()
{
return numero4;
}
public void setSenha(int sen)
{
senha = sen;
}
public int getSenha()
{
return senha;
}
public void setCriptografia(int cripto)
{
criptografia = cripto;
}
public int getCriptografia()
{
return criptografia;
}
public void senha()
{
System.out.printf("Digite sua senha de 4 dígitos: ",numero1,numero2,numero3,numero4);
senha = entrada.nextInt();
if(numero1>=0 && numero2 >=0 && numero3 >=0 && numero4>=0)
{
numero1 += 7;
numero2 += 7;
numero3 += 7;
numero4 += 7;
}
}
public void senhaCriptografada()
{
System.out.printf("Senha Criptografada: %d%d%d%d\n",numero1,numero2,numero3,numero4);
}
}
/**
*
* @author paulo
*/
public class CriptoTest
{
public static void main(String[] args)
{
Criptografar teste = new Criptografar(0,0,0,0,0,0);
teste.senha();
teste.senhaCriptografada();
}
}
Olá, pelo que eu vi você não está lendo os números da criptografia e sim passando todos eles por parâmetro no seu método main com valor igual a 0 (0+7 = 7) (Não entendi sua variável senha) e também não entendi seus getters e setters que não estão sendo usados (você poderá usá-los para receber o valor dos números a serem criptografados, já que eles são private, através de um Scanner no main - uma opção/idéia). Vlw.
Na verdade eu quero que o usuário digite a senha e o aplicativo o converta. Não gostaria de passá-los por parâmetros. Quantos aos get /set terei de revê-los.
Penso que minha solução não é a mais viável, mas você pode receber essa senha na forma de String(Ela que será criptografada?), usar o charAt() para separar cada número, depois usar o Integer.parseInt() e finalizar somando o 7.
Obs.: Não sei se funcionará Integer.parseInt(charAt(0~3)) pois o Integer.parseInt() pega uma String como parâmetro e o charAt() retorna um char e não sei se esse cast funciona Integer.parseInt((String)charAt(0~3)). Se alguém souber… aproveito e deixo essa dúvida aqui também.
Visando ajudar a galera que procura este exercício, segue aí de uma forma até porque o tópico e muito antigo e já foi resolvido!
import java.util.Scanner;
public class Criptografia {
public static void main(String[] args) {
int num, qua, ter, seg, pri, aux, aux2;
Scanner input = new Scanner(System.in);
System.out.println("Informe um número inteiro (4 Dígitos): ");
num = input.nextInt();
// leitura de 4 dígitos
while ( num < 1000 || num > 10000) {
System.out.println("Entrada Inválida! Informe um número inteiro (4 Dígitos): ");
num = input.nextInt();
}
// separação dos dígitos do inteiro
qua = num % 10;
num = num / 10;
ter = num % 10;
num = num / 10;
seg = num % 10;
num = num / 10;
pri = num % 10;
// cálculos para a criptografia
// adição de 7
qua = qua + 7;
ter = ter + 7;
seg = seg + 7;
pri = pri + 7;
// resto da divisão por 10
qua = qua % 10;
ter = ter % 10;
seg = seg % 10;
pri = pri % 10;
// inversões dos números
aux = 0;
aux2 = 0;
aux = qua;
qua = seg;
seg = aux;
aux2 = ter;
ter = pri;
pri = aux2;
// Impressão do dígito Criptografado
System.out.printf("A criptografia do número informado é: %d%d%d%d", pri, seg, ter, qua);
}
}
Agora a descriptografia,
import java.util.Scanner;
public class Descriptografia {
public static void main(String[] args) {
int num, pri, seg, ter, qua, aux, aux2;
Scanner input = new Scanner(System.in);
System.out.println("Informe o número criptografado (4 Dígitos):");
num = input.nextInt();
// leitura do número criptografado
while ( num < 1000 || num > 10000 ) {
System.out.println("Entrada Inválida! Informe o número criptografado (4 Dígitos):");
num = input.nextInt();
}
// separação dos dígitos do inteiro
qua = num % 10;
num = num / 10;
ter = num % 10;
num = num / 10;
seg = num % 10;
num = num / 10;
pri = num % 10;
// inversões dos números
aux = 0;
aux2 = 0;
aux = qua;
qua = seg;
seg = aux;
aux2 = ter;
ter = pri;
pri = aux2;
// cálculos para a descriptografia
pri = (pri + 10) - 7;
seg = (seg + 10) - 7;
ter = (ter + 10) - 7;
qua = (qua + 10) - 7;
// Impressão do dígito Descriptografado
System.out.printf("A descriptografia do número informado é: %d%d%d%d", pri, seg, ter, qua);
}
}
Olá galera, esse tópico me ajudou resolver o exercício. Então resolvi colocar aqui meu código, os que pesquisei dá problema quando a senha é 3541 por exemplo. Criptografar
[code]package defaultpackage;
import java.util.Scanner;
public class Exercicio438 {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
int senha = 0;
while (senha < 1000 || senha > 10000) {
System.out.print("Digite uma senha de 4 dígitos: ");
senha = entrada.nextInt();
}
// define o número do dígito, soma com mais 7 e calcula o número pelo mod de 10
int num1, num2, num3, num4;
num4 = senha % 10;
num4 += 7;
num4 %= 10;
senha /= 10;
num3 = senha % 10;
num3 += 7;
num3 %= 10;
senha /= 10;
num2 = senha % 10;
num2 += 7;
num2 %= 10;
senha /= 10;
num1 = senha % 10;
num1 += 7;
num1 %= 10;
// troca 1 pelo 3 && troca 2 pelo 4
int novo1, novo2;
novo1 = num3;
num3 = num1;
novo2 = num4;
num4 = num2;
System.out.printf("A senha criptografada é: %s%s%s%s", novo1, novo2, num3, num4);
}
}[/code]
Descriptografar
[code]package defaultpackage;
import java.util.Scanner;
public class Exercicio438Descriptografar {