[RESOLVIDO] Ajuda com exercício em Java

5 respostas
metodosjava
L

Olá, estou tentando fazer um exercício de java e está dando um erro nos métodos aumentarTemperatura() e reduzir temperatura(), especificamente no comando int temperatura = termostato.getTemperatura(); segundo o Eclipse, mas não tenho certeza se é somente isso. Quem puder me ajudar ficarei muito grata.

O exercício é o seguinte:

Criar as classes CondicionadorDeAr e Termostato.
a) A classe CondicionadorDeAr tem um atributo termostato do tipo Termostato e um atributo boolean chamado ligado. O construtor de CondicionadorDeAr não recebe nenhum parâmetro, mas instancia um termostato e coloca ligado em false. Crie um método de acesso para ligado e outro para termostato. Não precisa fazer os métodos modificadores. Crie um método ligar, que muda ligado para true, e um desligar, que muda ligado para false. Crie um método aumentarTemperatura, que aumenta a temperatura do termostato em um grau cada vez que é chamado até o limite de 28 graus. Crie um método reduzirTemperatura que reduz a temperatura em um grau cada vez que é chamado até o limite de 15 graus. Crie um método imprimirTemperatura que imprime a temperatura atual. Não se esqueça de
verificar se o condicionador está ligado antes de aumentar ou diminuir a temperatura ou imprimi-la.
b) A classe Termostato tem um atributo privado temperatura. Seu construtor não recebe parâmetros, mas instancia a temperatura em 20. Crie métodos de acesso e modificador. Estes métodos devem respeitar os limites estabelecidos no item anterior.
c) Crie a classe Usuario, com o método main. Neste método você deve instanciar um CondicionadorDeAr, aumentar a temperatura para 30 graus (receber mensagem de erro), reduzir a temperatura para 10 graus (receber mensagem de erro). Aumentar a temperatura para 25 graus e imprimir a temperatura.


Classe Termostato

public class Termostato {

private int temperatura;

public Termostato (int temperatura) {
	
	this.temperatura = temperatura;
}

public int getTemperatura() {
	return temperatura;
}

public int setTemperatura(int temperatura) {
	this.temperatura = temperatura;
	return temperatura;
}

}


Classe CondicionadorDeAr

import javax.swing.JOptionPane;

public class CondicionadorDeAr {

private Termostato termostato;
private boolean ligado;

public CondicionadorDeAr(){
	this.termostato = new Termostato(20);
	this.ligado = false;
}

public Termostato getTermostato() {
	return termostato;
}

public boolean getLigado() {
	return ligado;
}

public boolean ligar(){
	
	ligado = true;
	return ligado;
}

public boolean desligar(){
	
	ligado = false;
	return ligado;
    }

public int aumentarTemperatura(){  
	
	int temperatura = termostato.getTemperatura();
	
	if (ligado == false){
		JOptionPane.showMessageDialog(null, "O condicionador está desligado!","Atenção!",0);
		return 0;
	
	}else{
		
	    if (temperatura < 28) {
	        termostato.setTemperatura(++temperatura);
	    }else{
	    	JOptionPane.showMessageDialog(null, "Temperatura máxima atingida!","Atenção!",0);
	    }
	    return temperatura;
	}
}

public int reduzirTemperatura(){
	
        int temperatura = termostato.getTemperatura();
	
	if (ligado == false){
		JOptionPane.showMessageDialog(null, "O condicionador esta desligado!","Atenção!",0);
		return 0;
	
	}else{
		
	    if (temperatura > 15) {
	        termostato.setTemperatura(--temperatura);
	    }else{
	    	JOptionPane.showMessageDialog(null, "Temperatura mínima atingida!","Atenção!",0);
	    }
	    return temperatura;
	}
}

    @Override
public String toString() {
	
	int temperatura = termostato.getTemperatura();
	return "TEMPERATURA ATUAL: " + temperatura + "°C";
}

}


Classe Usuário

import javax.swing.JOptionPane;

public class Usuario {

public static void main(String[] args) {
	
	int menu=0;
	String n;
	CondicionadorDeAr condicionador = new CondicionadorDeAr();
	Termostato termostato = new Termostato(20);
	int temperatura = termostato.getTemperatura();
	
    do{
    	
    	boolean ligado = condicionador.getLigado();
    	if(ligado == false){
    		
    		n = "OFF";
    	}else{
    		n = "ON";
    	}
	
    	Object[] options = { "Aumentar temperatura", "Diminuir temperatura", "Ligar", "Desligar", "Encerrar Programa" };
    
    	int op_index = JOptionPane.showOptionDialog(null, "STATUS CONDICIONADOR DE AR: " + n + "  |   "  + condicionador.toString() + "\nO que deseja fazer?", "Informe a opção desejada", 0, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
    
    	if (op_index == 0){
    		
                condicionador.aumentarTemperatura();
    		
    		menu = 1;
    	}
    	
    	if (op_index == 1){
    		
    		condicionador.reduzirTemperatura();
    		
    		menu = 1;

    	}
    	
    	if (op_index == 2){
    		
    		boolean lig = condicionador.getLigado();
    		if(lig == false){
    			
    			condicionador.ligar();
    			JOptionPane.showMessageDialog(null, "Condicionador de ar ligado com sucesso!", "Atenção!",2);
    		
    		}else{
    			
    			JOptionPane.showMessageDialog(null, "O condicionador já está ligado!", "Atenção!",0);
    		}
    		
    		menu = 1;
    	}
    	
    	if(op_index == 3){
    		
    		boolean lig = condicionador.getLigado();
    		if(lig == false){
    			
    			JOptionPane.showMessageDialog(null, "O condicionador já está desligado!", "Atenção!",0);
    		
    		}else{
    			
    			condicionador.desligar();
    			JOptionPane.showMessageDialog(null, "Condicionador de ar desligado com sucesso!", "Atenção!",2);
    		}
    		
    		int op = JOptionPane.showConfirmDialog(null, "Deseja voltar ao menu?", "Voltar ao início?", JOptionPane.YES_NO_OPTION);  
            if (op == JOptionPane.YES_OPTION){ 
            	menu = 1;		
            }else {  
    	    	menu = 0;
            }
    		
    	}
    	
    	if (op_index == 4){
    		
    		System.exit(0);
    	}
    
    
    } while(menu == 1);
}

}


Agradeço a todos desde já!

5 Respostas

L

No construtor de CondicionadorDeAr troque…

Termostato termostato = new Termostato(20);

Por

this.termostato = new Termostato(20);
W

Uma dica de sintaxe, ao invez de criar uma newTemp você faz o seguinte: temperatura -= 1;
Muito mais coeso e fácil manutenção. Abraço.

L

Também cuidado nesse if…

if(temperatura <= 28){
    return temperatura++;	
}

Pode atingir 29, melhor seria…

if (temperatura < 28) {
    return temperatura++;
}

O mesmo vale para reduzirTemperatura

if (temperatura >= 15) //pode chegar a 14

if (temperatura > 15) //chega no minimo a 15

Aliás, um jeito de melhorar seu método sem tanto if-else…

public int aumentarTemperatura() {
    if (!ligado) { //desligado ou ligado == false
        JOptionPane.showMessageDialog(null, "O condicionador está desligado");
        return 0;
    }

    int temperatura = termostato.getTemperatura();
    if (temperatura < 28) {
        termostato.setTemperatura(++temperatura); //temp atualizada
    }		
    return temperatura;
}

E por convenção, métodos set… costumam retornar void, por exemplo, não faz sentido retornar a temperatura em setTemperatura se você já tem o get para isso não é mesmo?

L

Muito obrigada! Reescrevi algumas parte usando suas sugestões e deu certo! Editei o post e deixei o código corrigido para quem quiser ver.

L

Está bem melhor que antes!

Agora no método main, pode melhorar mais um pouco, quando você faz o if para testar o op_index, pode substituir todos esses if’s por switch… mas ai fica para quando você avançar mais nos estudos…

Outra observação, hoje você está usando números para comparar as opções do usuário certo?

Mas já pensou daqui a um tempo você voltar a ver seu código e esquecer o que cada número significa?

Cuidados com os números mágicos e procure usar constantes para melhorar a leitura do código…

http://www.aeciocosta.com.br/index.php/enumaration-em-java-numeros-magicos-nunca-mais/

Criado 15 de abril de 2017
Ultima resposta 15 de abr. de 2017
Respostas 5
Participantes 3