Problema com 2 comparações de ifs

4 respostas
programação
Arthur_Maskalenkas

Pessoal, estou fazendo uns testes com os principios da OO e a idea é de que o carro não ande caso alguma porta esteja aberta e caso esteja, freie na hora e fique a 0 rpm.
na aplicação, criei apenas 2 objetos que representam as portas da frente e as de tras,porem quando chego na hora de testar no Main, ele acaba andando ou não reiniciando, mesmo eu especificando tudo.

(CLASSE PORTAS)

package oo;

public class Portas {

boolean portasDaFrente = true;

boolean PortasDeTras = true;	

}

(CLASSE MOTOR)

public class Motor {

boolean ligado = false;

double fatorInjecao = 1;
int giros () {
	if (!ligado) {
		return 0;
	}else {
	return (int) Math.round(fatorInjecao * 3000);
	}
	}

}

(CLASSE CARRO) (aonde provavelmente esta o erro)
package oo;

public class Carro {

Motor motor = new Motor();
Portas portas = new Portas();

void acelerar () { /// é nessa parte aonde eu acho que esta o erro

if (portas.portasDaFrente == true && portas.PortasDeTras == true) {

motor.fatorInjecao += 0.4;

System.out.println(as portas estão fechadas);

}else if (portas.portasDaFrente == false || portas.portasDaFrente == false){

motor.fatorInjecao -= motor.fatorInjecao;

System.out.println(as portas estão abertas haha);

}

}
void frear () {

if (motor.fatorInjecao < 0) {

motor.fatorInjecao += 0.4;

}else {

motor.fatorInjecao = 0 ;

}

}
//true para fechadas

//false para abertas

boolean fecharPortasDafrente () { // fechadas

return portas.portasDaFrente = true;

}
boolean abrirPortasDaFrente () { //abertas

return portas.portasDaFrente = false;

}
boolean fecharPortasDeTras () {

return portas.PortasDeTras = true;

}
boolean abrirPortasDeTras () {

return portas.PortasDeTras = false;

}
String verificarPortasDaFrente () {

if (portas.portasDaFrente == true) {

return portas da frente estão fechadas;

}else if (portas.portasDaFrente == false) {

return as portas da frente estão abertas;

}else

return null;

}

String verificarPortasDeTRAS () {

if (portas.PortasDeTras == true) {

return portas de tras estão fechadas;

}else if (portas.PortasDeTras == false) {

return as portas de tras estão abertas;

}else

return null;

}
void Ligar() {

motor.ligado = true;

}

void desligar () {

motor.ligado = false;

}

boolean estaLigado() {

return motor.ligado;

}

}
<strong>(CLASSE MAIN)</strong>

package oo;

public class CarroTeste {

public static void main(String[] args) {
Carro c1 = new Carro();
		c1.Ligar();
		System.out.println(c1.estaLigado());
		c1.abrirPortasDeTras();
		System.out.println(c1.verificarPortasDeTRAS());
		System.out.println(c1.motor.giros());**// mesmo com portas abertas, ele continua com velocidade??**
	}	
}

4 Respostas

SkyG0D

A falha está nessa parte, porquê primeiro você liga o carro então sempre vai cair no else, assim retornando o valor 3000, já que o fatorInjecao é 1 e está sendo multiplicado por 3000.

staroski
void acelerar () {
    if (portas.portasDaFrente && portas.PortasDeTras) {
        motor.fatorInjecao += 0.4;
        System.out.println(as portas estão fechadas);
    } else {
        motor.fatorInjecao -= motor.fatorInjecao;
        System.out.println(as portas estão abertas haha);
    }
}
Arthur_Maskalenkas

fiz as alterações e removi os ifs do metodo “acelerar” e coloquei no metodo giros, porem não funcionou

(inclui o objeto portas na classe)

public class Motor {

boolean ligado = false;

double fatorInjecao = 1;
Portas portas = new Portas();


int giros () {
	if (!ligado) {
		return 0;
	}else if (portas.portasDaFrente == false || portas.PortasDeTras == false) {
		return 0;
	}else {
		return (int) Math.round(fatorInjecao * 3000);
	}
		
}

}

Arthur_Maskalenkas

resolvido, acabei usando o metodo get e criando uma nova variavel na classe Carro para saber se o carro esta ligado ou desligado

Criado 12 de junho de 2020
Ultima resposta 13 de jun. de 2020
Respostas 4
Participantes 3