Exercicio j11 - Crie uma casa e pinte-a. Crie três portas e coloque-as na casa; abra e feche

7 respostas
E

Pessoal criei esse código abaixo (usando apenas o que foi ensinado até então na apostila j11 ), mas a questão é que acontece um erro ao imprimir a quantidade de portas abertas ( qtPtAberta() ) é que ele mostra a quantidade errada. Segue o Código:

class Porta {

boolean aberta = false;

String cor;

double dimensaoX;

double dimensaoY;

double dimensaoZ;
boolean abre() {
	if ( this.aberta == false ) {
		return this.aberta = true;
	}
	else {
		System.out.println ( "A porta ja esta aberta." );
		return true;
	}
}

boolean fecha() {
	if ( this.aberta == true ) {
		return this.aberta = false;
	}
	else {
		System.out.println ( "A porta ja esta fechada." );
		return false;
	}
}

void sitPorta() {
	if ( this.aberta == true ) {
		System.out.println ( "aberta" );
	}
	else {
		System.out.println ( "fechada");
	}
}

void pinta(String c) {
	this.cor = c;
	System.out.println ( "A porta  foi pintada de " + this.cor );
}

void tamanho( double x, double y, double z ) {
	this.dimensaoX = x;
	this.dimensaoY = y;
	this.dimensaoZ = z;
}

void mostra() {
	System.out.print( "A porta " + this.cor + " de tamanho: " + this.dimensaoX + "x" + this.dimensaoY + "x" + this.dimensaoZ + " esta " ); sitPorta();
}

}

class Casa {

String cor;

Porta porta1;

Porta porta2;

Porta porta3;
void pinta( String tinta ){
	this.cor = tinta;
}

int qtPtAberta(){ // verifica quantas portas estão abertas
	int qtAberta = 0;
	
	if( this.porta1.aberta == true ){
		qtAberta += 1;
	}
	
	if ( this.porta2.aberta == true ){
		qtAberta += 1;
	}
			
	if ( this.porta3.aberta == true ){
		qtAberta += 1;
	}		
	return qtAberta;
}

void mostrar(){
	int qtAberta;
	
	qtAberta = this.qtPtAberta();
	System.out.println( "A casa " + this.cor + " esta com " + qtAberta + " porta(s) abertas");
}

}

class TestaCasa{

public static void main( String[] args ){

Casa c1 = new Casa();

Porta p1 = new Porta();

c1.porta1 = p1;

c1.porta2 = p1;

c1.porta3 = p1;
c1.porta1.fecha();
	c1.porta1.pinta( "verde" );
	c1.porta1.dimensaoX = 1.80;
	c1.porta1.dimensaoY = 0.80;
	c1.porta1.dimensaoZ = 0.04;
	c1.porta1.mostra();
	
	c1.porta2.fecha();
	c1.porta2.pinta( "azul" );
	c1.porta2.dimensaoX = 2.10;
	c1.porta2.dimensaoY = 0.90;
	c1.porta2.dimensaoZ = 0.05;
	c1.porta2.mostra();
	
	c1.porta3.abre();
	c1.porta3.pinta( "amarela" );
	c1.porta3.dimensaoX = 2.00;
	c1.porta3.dimensaoY = 0.85;
	c1.porta3.dimensaoZ = 0.03;
	c1.porta3.mostra();
	
	c1.pinta( "Branca" );
	
	c1.mostrar();
	// esta ocorrendo um erro com a quantidade de portas abertas
	// modifique a propriedade c1.portaX.abre/fecha e verifique o resultado.
	// ainda não descobri o motivo desta falha!
	
}

}

7 Respostas

JMARQ

Sempre que adicionar trechos de código, por favor, colocar dentro das tags, como abaixo:

class Porta { 
boolean aberta = false; 
String cor; 
double dimensaoX; 
double dimensaoY; 
double dimensaoZ; 

boolean abre() { 
if ( this.aberta == false ) { 
return this.aberta = true; 
} 
else { 
System.out.println ( "A porta ja esta aberta." ); 
return true; 
} 
} 

boolean fecha() { 
if ( this.aberta == true ) { 
return this.aberta = false; 
} 
else { 
System.out.println ( "A porta ja esta fechada." ); 
return false; 
} 
} 

void sitPorta() { 
if ( this.aberta == true ) { 
System.out.println ( "aberta" ); 
} 
else { 
System.out.println ( "fechada"); 
} 
} 

void pinta(String c) { 
this.cor = c; 
System.out.println ( "A porta foi pintada de " + this.cor ); 
} 

void tamanho( double x, double y, double z ) { 
this.dimensaoX = x; 
this.dimensaoY = y; 
this.dimensaoZ = z; 
} 

void mostra() { 
System.out.print( "A porta " + this.cor + " de tamanho: " + this.dimensaoX + "x" + this.dimensaoY + "x" + this.dimensaoZ + " esta " ); sitPorta(); 
} 
} 


class Casa { 
String cor; 
Porta porta1; 
Porta porta2; 
Porta porta3; 

void pinta( String tinta ){ 
this.cor = tinta; 
} 

int qtPtAberta(){ // verifica quantas portas estão abertas 
int qtAberta = 0; 

if( this.porta1.aberta == true ){ 
qtAberta += 1; 
} 

if ( this.porta2.aberta == true ){ 
qtAberta += 1; 
} 

if ( this.porta3.aberta == true ){ 
qtAberta += 1; 
}	
return qtAberta; 
} 

void mostrar(){ 
int qtAberta; 

qtAberta = this.qtPtAberta(); 
System.out.println( "A casa " + this.cor + " esta com " + qtAberta + " porta(s) abertas"); 
}	
} 


class TestaCasa{ 
public static void main( String[] args ){ 
Casa c1 = new Casa(); 
Porta p1 = new Porta(); 
c1.porta1 = p1; 
c1.porta2 = p1; 
c1.porta3 = p1; 

c1.porta1.fecha(); 
c1.porta1.pinta( "verde" ); 
c1.porta1.dimensaoX = 1.80; 
c1.porta1.dimensaoY = 0.80; 
c1.porta1.dimensaoZ = 0.04; 
c1.porta1.mostra(); 

c1.porta2.fecha(); 
c1.porta2.pinta( "azul" ); 
c1.porta2.dimensaoX = 2.10; 
c1.porta2.dimensaoY = 0.90; 
c1.porta2.dimensaoZ = 0.05; 
c1.porta2.mostra(); 

c1.porta3.abre(); 
c1.porta3.pinta( "amarela" ); 
c1.porta3.dimensaoX = 2.00; 
c1.porta3.dimensaoY = 0.85; 
c1.porta3.dimensaoZ = 0.03; 
c1.porta3.mostra(); 

c1.pinta( "Branca" ); 

c1.mostrar(); 
// esta ocorrendo um erro com a quantidade de portas abertas 
// modifique a propriedade c1.portaX.abre/fecha e verifique o resultado. 
// ainda não descobri o motivo desta falha! 

}	
}
E

Desculpe eu tentei encontrar como fazer o codigo ficar com essa aparencia mas não encontrei. Na verdade ainda continuo sem saber, você poderia descrever como fazer isso?

JMARQ:
Sempre que adicionar trechos de código, por favor, colocar dentro das tags, como abaixo:
class Porta { 
boolean aberta = false; 
String cor; 
double dimensaoX; 
double dimensaoY; 
double dimensaoZ; 

boolean abre() { 
if ( this.aberta == false ) { 
return this.aberta = true; 
} 
else { 
System.out.println ( "A porta ja esta aberta." ); 
return true; 
} 
} 

boolean fecha() { 
if ( this.aberta == true ) { 
return this.aberta = false; 
} 
else { 
System.out.println ( "A porta ja esta fechada." ); 
return false; 
} 
} 

void sitPorta() { 
if ( this.aberta == true ) { 
System.out.println ( "aberta" ); 
} 
else { 
System.out.println ( "fechada"); 
} 
} 

void pinta(String c) { 
this.cor = c; 
System.out.println ( "A porta foi pintada de " + this.cor ); 
} 

void tamanho( double x, double y, double z ) { 
this.dimensaoX = x; 
this.dimensaoY = y; 
this.dimensaoZ = z; 
} 

void mostra() { 
System.out.print( "A porta " + this.cor + " de tamanho: " + this.dimensaoX + "x" + this.dimensaoY + "x" + this.dimensaoZ + " esta " ); sitPorta(); 
} 
} 


class Casa { 
String cor; 
Porta porta1; 
Porta porta2; 
Porta porta3; 

void pinta( String tinta ){ 
this.cor = tinta; 
} 

int qtPtAberta(){ // verifica quantas portas estão abertas 
int qtAberta = 0; 

if( this.porta1.aberta == true ){ 
qtAberta += 1; 
} 

if ( this.porta2.aberta == true ){ 
qtAberta += 1; 
} 

if ( this.porta3.aberta == true ){ 
qtAberta += 1; 
}	
return qtAberta; 
} 

void mostrar(){ 
int qtAberta; 

qtAberta = this.qtPtAberta(); 
System.out.println( "A casa " + this.cor + " esta com " + qtAberta + " porta(s) abertas"); 
}	
} 


class TestaCasa{ 
public static void main( String[] args ){ 
Casa c1 = new Casa(); 
Porta p1 = new Porta(); 
c1.porta1 = p1; 
c1.porta2 = p1; 
c1.porta3 = p1; 

c1.porta1.fecha(); 
c1.porta1.pinta( "verde" ); 
c1.porta1.dimensaoX = 1.80; 
c1.porta1.dimensaoY = 0.80; 
c1.porta1.dimensaoZ = 0.04; 
c1.porta1.mostra(); 

c1.porta2.fecha(); 
c1.porta2.pinta( "azul" ); 
c1.porta2.dimensaoX = 2.10; 
c1.porta2.dimensaoY = 0.90; 
c1.porta2.dimensaoZ = 0.05; 
c1.porta2.mostra(); 

c1.porta3.abre(); 
c1.porta3.pinta( "amarela" ); 
c1.porta3.dimensaoX = 2.00; 
c1.porta3.dimensaoY = 0.85; 
c1.porta3.dimensaoZ = 0.03; 
c1.porta3.mostra(); 

c1.pinta( "Branca" ); 

c1.mostrar(); 
// esta ocorrendo um erro com a quantidade de portas abertas 
// modifique a propriedade c1.portaX.abre/fecha e verifique o resultado. 
// ainda não descobri o motivo desta falha! 

}	
}
Joao_Alonso

Da uma olhada aqui
http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor
pra ver como posta.

ai posta o erro que está ocorrendo.

D

Use as tags [code]

N

Vê se esses links pode te ajudar

Acesse: http://www.ividi.com.br/home/index.php?option=com_content&view=category&id=39:java&Itemid=55&layout=default ou
             http://www.ividi.com.br/home/index.php?option=com_content&view=category&layout=blog&id=121&Itemid=72
rderoci

Você está atribuindo a mesma instancia de Porta para todos os atributos do tipo Porta da sua classe Casa. Por isso ele atribui o abre ou fecha do ultimo que foi codificado na sequencia que vc montou.

Troque:

Porta p1 = new Porta(); c1.porta1 = p1; c1.porta2 = p1; c1.porta3 = p1;

Por:

Casa c1 = new Casa(); c1.porta1 = new Porta(); c1.porta2 = new Porta(); c1.porta3 = new Porta();

Abs,
Romulo Rocha

E

Fantástico! Romulo ( rderoci) O problema era esse mesmo, Valeu cara. E obrigado a todos pelas dicas, desculpe minhas falhas no post, prometo que não vai mais acontecer.

Só uma observação sobre a apostila J-11 - que estou gostando de ler, foi justamente nessa questão de atribuição de classes que estou com dificuldade de assimilar. Talvez a apostila tenha pecado um pouco por não mostrar ( pelo menos até o momento do exercício ) um exemplo como o da atribuição postada pelo “rderoci”.

Criado 30 de junho de 2012
Ultima resposta 30 de jun. de 2012
Respostas 7
Participantes 6