-
Notifications
You must be signed in to change notification settings - Fork 158
Description
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--;
}
}
}