Duvida de Iniciante

12 respostas
Y

Iai galera do guj, vim aqui hj tentar achar uma solução para este pequeno impasse num código,é aquele sistema da caelum de casa … portas … e incrementei mais uma classe (quarto), no método quantDePortas, o código ta contando em dobro, pois so tem 3 portas criadas, e na interface resulta como 6 portas, este é meu primeiro posto, espero q entendam e me corrijam nos meus erros de programação e de post do tópico. Abraço

Código:

//Classe casa:

package RevisandoPOOcaelum;

public class Casa {

	String cor;
	int quantQuartos;
	int totalDePortas;
	Porta[] p = new Porta[3];
	Quarto [] q = new Quarto[2];
	int i = 0;
	int x = 0;
	boolean aberta;
	
	
		void pinta (String s){
		
		if (this.cor == s){
			
			System.out.println("A casa ja estar pintada desta cor!");
			
		}
		else {
			
			this.cor = s;
			System.out.println("A casa foi pintada da cor: " +cor);
		}
	}
	
		void adicionaPorta(Porta port) {    
			   if (totalDePortas < p.length) {    
			      p[totalDePortas] = port;    
			totalDePortas++;    
			   }     
			   else {    
			      System.out.println("Array cheia");    
			   }    
			}   		
		
		void adicionaQuarto (Quarto novoQuarto){
			
			if (quantQuartos < q.length) {    
			      q[quantQuartos] = novoQuarto;    
			quantQuartos++;    
			   }     
			   else {    
			      System.out.println("Array cheia");    
			   }    
			}   		
		
		
		void abre(){
			
			if (this.aberta != false){
				
				System.out.println("A porta ja se encontra aberta!");
			}
			else{
				
				this.aberta = true;
				System.out.println("Abrindo a porta!");
			}
		}
		
        void quantPortasAbertas (){
			
			int i = 0; int contPortas = 0;
			for (i = 0; i < p.length; i++){
				
				if (this.p[i].aberta == true){
					
				contPortas += 1;	
        		
        		}
			}
			
		System.out.println("Existem " + contPortas + " portas abertas!");
	}
				
		int quantDePortas() {
					
					for (int i = 0; i < p.length; i++){
						 if (p [i] != null) {  
				                totalDePortas += i;  
				            }  
						 
						}  
						System.out.println("Total de portas: " +totalDePortas);
				        return totalDePortas;  
				    }  
		
			
		void fecha(){
		
			if (this.aberta == true){
				
				this.aberta = false;
				System.out.println("Fechando a porta!");
			}
			else{
				
				System.out.println("A porta ja se encontra fechada!");
			}
		}	

		/*int quantQuartos(){
			
			for (int x = 0; x < this.q.length; x++){
				
				int contQuartos = 0;
				if (this.q[x] != null){
					
				  quantQuartos += x;
				  
				}
				System.out.println("Quantidade de quartos: "+ quantQuartos);
				return quantQuartos;
			}
			
		}
*/

}
// TesteCasa:

package RevisandoPOOcaelum;

public class TesteCasa {
	
	public static void main (String args[]){
		
		Casa casa = new Casa();
		Porta p1 = new Porta();
		Porta p2 = new Porta();
		Porta p3 = new Porta();
		Quarto q1 = new Quarto();
		Quarto q2 = new Quarto();
		
		//Não é mais necessario pois foi adicionado o método: Adicionar Porta.
		
	   /*casa.p [0] = p1;
		casa.p [1] = p2;
		casa.p [2] = p3;
		casa.q [0] = q1;
		casa.q [1] = q2;
		*/
		
		casa.pinta ("branca");
		casa.adicionaPorta(p1);
		p1.aberta = false;
		p1.cor = ("verde");
		p1.tipo = ("Madeira");
		casa.adicionaPorta(p2);
		p2.aberta = true;
		p2.cor = ("Azul");
		p2.tipo = ("PVC");
		casa.adicionaPorta(p3);
		p3.aberta = false;
		p3.cor = ("Preta");
		p3.tipo = ("Madeira");
		casa.adicionaQuarto(q1);
		casa.adicionaQuarto(q2);
		q1.tamanho = ("10 metros²");
		q1.suite = true;
		q1.Ehsuite();
		q2.suite = false;
		q2.tamanho = ("8 metros²");
		q2.Ehsuite();
		p1.abre();
		p2.abre();
		casa.pinta("Cinza");
		casa.quantDePortas();
		casa.quantPortasAbertas();
	}
// classe Porta:

package RevisandoPOOcaelum;

public class Porta {

	boolean aberta;
	String cor;
	String tipo;
	
	void abre(){
	
		if (this.aberta != true){
			
			this.aberta = true;
			System.out.println("Abrindo a porta!");
		}
		else{
			
			System.out.println("A porta ja se encontra aberta!");
		}
	}
	
	void fecha(){
		
		if (this.aberta != false){
			
			this.aberta = false;
			System.out.println("Fechando a porta!");
			
		}
		System.out.println("A porta ja se econtra fechada!");
		
	}
	
	void pinta (String c){
		
		if (this.cor == c){
			
			System.out.println("A porta ja estar pintada desta cor!");
			
		}
		else {
			
			this.cor = c;
			System.out.println("A porta foi pintada da cor: " +cor);
		}
	}
	
	boolean estaAberta (){
	  
	        if (this.aberta == true) {  
	            System.out.println("Porta aberta");  
	        } else {  
	            System.out.println("Porta fechada");  
	        }  
	        return false;

	
	}
	
	
}

12 Respostas

igor_ks

Por favor, poste seu código com as tags [code]

E
if (this.cor == s){

Em Java infelizmente o sinal de “==” não compara direito duas strings. No seu caso, você precisa usar equals:

if (this.cor.equals (s)){

Não sei se esse é o seu problema, mas como esse é um erro muito óbvio, pode estar causando os outros problemas.

marcelo.silva.java
if (this.cor == s){

Em Java infelizmente o sinal de “==” não compara direito duas strings. No seu caso, você precisa usar equals:

if (this.cor.equals (s)){

no java 7 isto já e possivel rapaziada…

[]s

G

uma coisa que reparei é que no método adicionaQuarto

a quantQuartos é somada:

void adicionaQuarto (Quarto novoQuarto){  
              
            if (quantQuartos < q.length) {      
                  q[quantQuartos] = novoQuarto;      
            quantQuartos++;      
               }       
               else {      
                  System.out.println("Array cheia");      
               }      
            }

o mesmo ocorre na contagem…

Y

E o que deveria ser feito neste caso?

bastides

Cara roda seu programa em debug, poe os breaks que provavelmente você mesmo vai achar o erro, debugando você vai ver exatamente o que o programa esta fazendo, as vezes o que achamos que ele esta fazendo, em tempo de execução muda, por detalhes que passam despercebidos. Olhando por cima só vi os erros de comparação de string mesmo…

[]'s

G
int quantQuartos(){

apenas retorne o valor da int

int quantQuartos(){ return quantQuartos; }

o mesmo para a parte de portas…

funciona ?

bastides

Você tem que definir onde precisa ser contado o quarto. Na hora de adicionar ou só na hora da contagem? se realmente precisar contar quando add a porta, cria outra variável para isso. Ou zera a que foi incrementada na hora de fazer a contagem.

[]'s

bastides

Ou realmente esquece esse metodo que faz contagem. se ja incrementa a variavel quando add, é só retornar o valor mesmo dando um get nele como sugeriu o gejava.

[]'s

G

como você ainda não esta trabalhando com encapsulamento basta retornar

System.out.println(obj.quantQuartos);

acredito que isso fara mais sentido quando começar a ver getters e setters

A

Não entendi porque você criou dois atributos “aberta” do tipo booleano um na Classe Casa e outro na Classe Porta.
Como todo o código se refere a porta em si e seus estados o atributo “aberta” da classe Casa pode ser deletado.

G

Se quiser postar o exercicio aqui eu posso tentar dar uma explicação mais direta ao que você precisa entender…

Criado 18 de fevereiro de 2013
Ultima resposta 18 de fev. de 2013
Respostas 12
Participantes 7