Pular para o conteúdo
Bruno Dórea
Todos os posts

4 mins de leitura


Cofres Seguros - Dominando o Encapsulamento e Abstração

Dominando Desafios de Códigos Intermediários em Java - 5/5


Desenvolvimento Java com IA
Desenvolvimento Java com IA

Descrição

Você foi contratado para desenvolver um sistema de cofres seguros. O objetivo é criar dois tipos de cofres: um Cofre Digital, que é aberto por senha, e um Cofre Físico, que é aberto por chave.

Entrada

O programa irá solicitar ao usuário que digite o tipo de cofre a ser criado: "digital" ou "físico". Se for escolhido o tipo "digital", o programa irá solicitar a senha e a confirmação de senha do cofre digital (ambas com apenas números). Caso seja escolhido o tipo "físico", não é necessário nenhuma outra entrada.

Saída

O programa irá exibir as informações do cofre criado. Para o Cofre Digital, será exibido o tipo e o método de abertura (senha). Para o Cofre Físico, será exibido apenas o tipo e o método de abertura (chave).

Exemplos

A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.

EntradaSaída
digitalTipo: Cofre Digital
12345Metodo de abertura: Senha
1234Senha incorreta!
EntradaSaída
fisicoTipo: Cofre Fisico
Metodo de abertura: Chave
EntradaSaída
digitalTipo: Cofre Digital
2525Metodo de abertura: Senha
2525Cofre aberto!

Resolução

import java.util.Scanner;
 
abstract class Cofre {
  protected String tipo;
  protected String metodoAbertura;
 
  public Cofre(String tipo, String metodoAbertura) {
    this.tipo = tipo;
    this.metodoAbertura = metodoAbertura;
  }
 
  public void imprimirInformacoes() {
    System.out.println("Tipo: " + this.tipo);
    System.out.println("Metodo de abertura: " + this.metodoAbertura);
  }
}
 
class CofreDigital extends Cofre {
 
  private int senha;
 
  public CofreDigital(int senha) {
    super("Cofre Digital", "Senha");
    this.senha = senha;
  }
 
  public boolean validarSenha(int confirmacaoSenha) {
    return confirmacaoSenha == this.senha;
  }
}
 
class CofreFisico extends Cofre {
 
  public CofreFisico() {
    super("Cofre Fisico", "Chave");
  }
}
 
public class Desafio {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String tipoCofre = scanner.nextLine();
 
    if (tipoCofre.equalsIgnoreCase("digital")) {
      int senha = Integer.parseInt(scanner.nextLine());
      int confirmacaoSenha = Integer.parseInt(scanner.nextLine());
 
      CofreDigital cofreDigital = new CofreDigital(senha);
      cofreDigital.imprimirInformacoes();
      if (cofreDigital.validarSenha(confirmacaoSenha)) {
        System.out.println("Cofre aberto!");
      } else {
        System.out.println("Senha incorreta!");
      }
    } else if (tipoCofre.equalsIgnoreCase("fisico")) {
      CofreFisico cofreFisico = new CofreFisico();
      cofreFisico.imprimirInformacoes();
    } else {
      System.out.println("Tipo de cofre inválido!");
    }
 
    scanner.close();
  }
}

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.