Skip to content

3 - Java e a Arte da Abstração com Classes e Encapsulamento.md (Correção na Regra de Negócio - Regra dos Limites de Velocidade) #3

@dayvsontimoteo

Description

@dayvsontimoteo

Exercício 02 - Java e a Arte da Abstração com Classes e Encapsulamento

Escreva um código onde controlamos as funções de um carro, ele deve ter as seguintes funções:

Ligar o carro;
Desligar o carro;
Acelerar;
diminuir velocidade;
virar para esquerda/direita
verificar velocidade;
trocar a marcha
Siga as seguintes regras na implementação

Quando o carro for criado ele deve começar desligado, em ponto morto e com sua velocidade em 0
O carro desligado não pode realizar nenhuma função;
Quando o carro for acelerado ele deve incrementar 1km em sua velocidade (pode chegar no máximo a 120km);
Quando diminuir a velocidade do carro ele deve decrementar 1 km de sua velocidade (pode chegar no minimo a 0km);
o carro deve possuir 6 marchas, não deve ser permitido pular uma marcha no carro;

A velocidade do carro deve respeitar os seguintes limites para cada velocidade

se o carro estiver na marcha 0 (ponto morto) ele não pode acelerar

se estiver na 1ª marcha sua velocidade pode estar entre 0km e 20km

se estiver na 2ª marcha sua velocidade pode estar entre 21km e 40km

se estiver na 3ª marcha sua velocidade pode estar entre 41km e 60km

se estiver na 4ª marcha sua velocidade pode estar entre 61km e 80km

se estiver na 5ª marcha sua velocidade pode estar entre 81km e 100km

se estiver na 6ª marcha sua velocidade pode estar entre 101km e 120km

O carro podera ser desligado se estiver em ponto morto (marcha 0) e sua velocidade em 0 km
O carro só pode virar para esquerda/direita se sua velocidade for de no mínimi 1km e no máximo 40km;

Explicação:

Se marcha = 1 e velocidade = 20km/h e o motorista acelera => Carro não pode acelerar pois marcha 1 só pode chegar a 20km/h;

Se motorista tenta passar para marcha 2 para poder acelerar => Carro não pode passar marcha pois a velocidade mínima para a marcha é 21km/h (que carro não pode chegar pela regra anterior).

public class Carro {
 private boolean carroLigado = false;
 private int velocidade = 0;
 private int marcha = 0;

 public boolean estaLigado() {
   return carroLigado;
 }

 public void ligarCarro() {
   carroLigado = true;
 }

 public void desligarCarro() {
   if (carroLigado && velocidade == 0 && marcha == 0)
   carroLigado = false;
 }

 public void acelerar(){
   if(carroLigado){
     if(velocidadeEhPermitidaParaMarcha(velocidade + 1, marcha)){
       velocidade++;
     }
   }
 }

 public void frear(){
   if(carroLigado){
     if(velocidadeEhPermitidaParaMarcha(velocidade - 1, marcha)){
       velocidade--;
     }
   }
 }

 public int verificaVelocidade(){
   return velocidade;
 }

 public boolean podeVirar(){
   if(carroLigado && verificaVelocidade() > 0 && verificaVelocidade() <= 40) {
     return true;
   } else {
     return false;
   }
 }

 public void virarEsquerda(){
   if (podeVirar()) {
     System.out.println("virou a esquerda.");
   }
 }

 public void virarDireita(){
   if (podeVirar()) {
     System.out.println("virou a direita.");
   }
 }

 private boolean velocidadeEhPermitidaParaMarcha(int velocidade, int marcha){
   if(marcha == 0 && velocidade != 0){
     return false;
   } else if(marcha == 1 && velocidade < 0 || velocidade > 20){
     return false;
   } else if(marcha == 2 && velocidade < 21 || velocidade > 40){
     return false;
   } else if(marcha == 3 && velocidade < 41 || velocidade > 60){
     return false;
   } else if(marcha == 4 && velocidade < 61 || velocidade > 80){
     return false;
   } else if(marcha == 5 && velocidade < 81 || velocidade > 100){
     return false;
   } else if(marcha == 6 && velocidade < 101 || velocidade > 120){
     return false;
   } else {
     return true;
   }
 }

 public void aumentarMarcha(){
   if(marcha >=6) return;
   if(velocidadeEhPermitidaParaMarcha(velocidade, marcha + 1)){
     marcha++;
   }
 }
 
 public void diminuirMarcha(){
   if(marcha <= 0) return;
   if(velocidadeEhPermitidaParaMarcha(velocidade, marcha - 1)){
     marcha--;
   }
 }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions