Utilização de método

19 respostas
M

Olá a todos, estava fazendo alguns exercícios básicos de Java para aprender a usar métodos e afins, então encontrei esse e gostaria que alguém me ajudasse a fazer, se possível.

Classe: Casa Atributos: cor, porta1, porta2, porta3 Método: void pinta(String s), int quantasPortasEstaoAbertas()
Crie uma casa e pinte-a. Crie três portas e coloque-as na casa; abra e feche as mesmas como desejar.
Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas.

eu fiz isso :

public class casa {
	String cor="preta";
	
	void pintar(String novaCor){
	  this.cor = novaCor;
	}
}
class programa {
	public static void main(String[] args) {
	  casa minhaCasa;
	  minhaCasa = new casa();
	  
	  minhaCasa.pintar("preta");
	  System.out.println("Cor da casa: " +minhaCasa.cor);
	}
}

Criar o método para pintar eu consegui, mas na parte de abrir e fechar a porta e mostrar quantas estão aberta, eu fiquei meio perdido. não precisa ser código pronto, apenas quero saber como fazer isso, se alguém puder me auxiliar, me ajudaria bastante.
Abraço a todos.

19 Respostas

pimenta

Não tem mais informações sobre o exercício?

Por Exemplo, se você pode criar mais métodos, se pode criar mais classes etc…

Pergunto isso porque imagino que porta seria um objeto, portanto você precisaria da classe Porta e dentro dessa classe teria os métodos abrirPorta(Porta p) e fecharPorta(Porta p).

Se vale o conselho, quase uma exigência, procura usar as regras de nomenclatura, por exemplo, as classes começam sempre com letras maiúsculas…

Abraços,

M

Sim, pode (ou deve) criar mais métodos, e o que for preciso para realizar o que foi pedido.
quando a regra de momenclatura, eu realmente não sabia, vou começar a aplicar, obrigado.

pimenta

Então você cria:

public class Porta{

	public void abrirPorta(Porta p){
		p.abre()
	}
	
	public void fecharPorta(Porta p){
		p.fecha();
	}
}
E na sua classe Casa você vai criar as portas:
Porta porta1 = new Porta();
Porta porta2 = new Porta();
Porta porta3 = new Porta();
E vai abrir a porta1, por exemplo:
porta1.abrirPorta();

Pegou?

M

Para ser sincero, não.
eu tentei fazer isso e apareceram alguns erros.

fiz assim :

public class casa {
	String cor="preta";
	
	void pintar(String novaCor){
	  this.cor = novaCor;
	}
}

public class Porta {  // erro aqui
	public void abrirPorta(Porta p) {
		p.abre();  //erro aqui
	}
	public void fecharPorta(Porta p) {
		p.fechar();  //erro aqui
	}
}

class programa {
	public static void main(String[] args) {
	  Porta porta1 = new Porta();  
	  Porta porta2 = new Porta();  
	  Porta porta3 = new Porta();  
	  casa minhaCasa = new casa();
	  porta1.abrirPorta();  //erro aqui
	  
	  minhaCasa.pintar("preta");
	  System.out.println("Cor da casa: " +minhaCasa.cor);
	}
}

Apareceu erro na criação da classe porta, no “p.fecha”, no “p.abre” e na “porta1.abrirporta()
também não entendi muito bem a lógica.
Aqui por exemplo:

public void abrirPorta(Porta p) {
		p.abre();  
	}

Eu não preciso declarar nenhuma variável porta ? o que é esse “p” ?
Obrigado pela atenção.

pimenta

Não sabia que você ia precisar compilar isso…

O erro que deu é porque não existem os métodos abre() e fecha().

Faz o seguinte:

Na classe, logo abaixo de String cor=“preta”;
Coloca:

int qtdPortaAberta = 0;

No método abrirPorta(Porta p), tira o p.abre(); e coloca:

System.out.println("Porta aberta"); qtdPortaAberta++;

No método fecharPorta(Porta p), tira o p.fecha(); e coloca:

System.out.println("Porta fechada"); qtdPortaAberta--;

Esse p que você perguntou vem do parâmetro do método. O método recebe como parâmetro qual porta será aberta/fechada e esse p representa essa porta.

Outro detalhe importantíssimo é que a definição da classe Porta deve estar em outro arquivo e não no mesmo arquivo que está a definição da classe Casa.

Entendeu?

M

Me desculpe pela ignorância, mas o que seria a definição da classe Porta ?
e outra coisa… eu vou colocar porta1.abrirPorta(); para abrir a porta 1, mas como o programa vai saber qual é a porta 1 se eu não falei isso em lugar nenhum.
ps.: eu declarei a variável qtsPortaAberta na classe porta e não embaixo da String que definia a cor. segue o código:

public class casa {
	String cor="preta";
	
	
	void pintar(String novaCor){
	  this.cor = novaCor;
	}
}

 class Porta {
	int qtdPortaAberta=0;
	
	public void abrirPorta(Porta p) {
		System.out.println("Porta aberta");
		qtdPortaAberta++;
	}
	public void fecharPorta(Porta p) {
		System.out.println("Porta fechada");  
		qtdPortaAberta--;
	}
}

class programa {
	public static void main(String[] args) {
	  Porta porta1 = new Porta();  
	  Porta porta2 = new Porta();  
	  Porta porta3 = new Porta();  
	  casa minhaCasa = new casa();
	  porta1.abrirPorta(); // erro aqui
	  
	  minhaCasa.pintar("preta");
	  System.out.println("Cor da casa: " +minhaCasa.cor);
	}
}

Mais uma vez obrigado pela atenção

pimenta
No arquivo Casa.java:
public class Casa {  
	String cor;
	Porta porta1;
	Porta porta2;
	Porta porta3;
	int qtdPortaAberta = 0;
	
	public static void main(String[] args) {  
		new Casa().go();  
	}
	
	public go(){
		Casa minhaCasa = new Casa();
	
		porta1 = new Porta();    
		porta2 = new Porta();    
		porta3 = new Porta();		
		  
		porta1.abrirPorta(); // erro aqui  

		minhaCasa.pintar("preta");  
		System.out.println("Cor da casa: " +minhaCasa.cor);	
	}
	
	void pintar(String novaCor){  
	  this.cor = novaCor;  
	}  
}  

No arquivo Porta.java:
class Porta {  

	public void abrirPorta() {  
		System.out.println("Porta aberta");  
		qtdPortaAberta++;  
	}  
	public void fecharPorta() {  
		System.out.println("Porta fechada");    
		qtdPortaAberta--;  
	}  
}

Tenta isso aí..

Abraços,

M

Dá erro em todo lugar que tem o go e qtePortaAberta.

pimenta

bota public void go() e public int qtdPortaAberta

M

Talvez esse não seja o método mais correto, mas parece ter dado certo :

public class casa {
	String cor="preta";
	String porta1, porta2, porta3;
	int qtdPortaAberta = 0;
	int qtdPortaFechada = 0;
	
	void pintar(String novaCor){
	  this.cor = novaCor;
	  
	}
	void abrirporta1() {
	  this.porta1 = "aberta";
	  this.qtdPortaAberta = qtdPortaAberta + 1;
	  
	}
	void fecharporta1() {
	  this.porta1 = "fechada";
	  
	}
	
	
	void abrirporta2() {
	  this.porta2 = "aberta";
	  this.qtdPortaAberta = qtdPortaAberta + 1;
		  
		}
	void fecharporta2() {
	  this.porta2 = "fechada";
	  
	}
	
	void abrirporta3() {
	  this.porta3 = "aberta";
	  this.qtdPortaAberta = qtdPortaAberta + 1;
	}
    void fecharporta3() {
	  this.porta3 = "fechada";
	  
	}
	
	
		
}
class programa {
	public static void main(String[] args) {
	  casa minhaCasa;
	  minhaCasa = new casa();
	  minhaCasa.abrirporta1();
	  minhaCasa.abrirporta2();
	  minhaCasa.fecharporta3();
	  
	  minhaCasa.pintar("preta");
	  System.out.println("Cor da casa: " +minhaCasa.cor+"\nPorta1: "+minhaCasa.porta1);
	  System.out.println("Porta2: "+minhaCasa.porta2+"\nPorta3: "+minhaCasa.porta3);
	  System.out.println("Quantidade de portas abertas: "+minhaCasa.qtdPortaAberta);
	}
}

Se tiver algo errado, por favor fale.
Muitíssimo obridago pela ajuda, Pimenta

pimenta

Cara, que bagunça ficou isso aí…

MAs se atendeu aos seus propósitos…

Abraços,

M

É, ficou “um pouco” bagunçado mesmo ^^
e aproveitando o tópico, alguém pode me responder qual a utilidade de usar métodos ?
Por que não posso simplismente declarar a váriavel com seu valor ?
Como String cor=“preta”;

M

Muito obrigado pela paciência de fazer tudo isso, mas não consegui compilar teu código deu erro nas linhas:

public class Casa {
public class Porta extends Casa {

e

public class ConstruirCasa {

e se não for muito incômodo gostaria de perguntar a função de algumas coisas no código que tu fez.

M
public class Casa {
	
	private String cor="Não Definida";
	private int qtdPortas;
	
	public void novaCasa(String cor, int qtdPortas){
		this.cor = cor;
		this.qtdPortas = qtdPortas;
	}
	
	public int getQtdPortas(){              // Para que serve o get ?
		return qtdPortas;                 // o que exatamente o return faz ?
	}
	
	public String getCorDaCasa(){
		return cor;
	}
	
}
import javax.swing.JOptionPane;

public class Porta extends Casa{
		
	private int qtdAbertas=0;

	int portas[] = new int[50];       // aqui você criou uma array e definiu que  o máximo   
	                                            // de portas que a casa pode ter é 50, certo ?
	public void abrirPorta(int numeroPorta){
		portas[numeroPorta-1]=1;          // utilizou o -1 porque array começa em 0 e vai até n-1, correto ?
		qtdAbertas++;
	}
	
	public void fecharPorta(int numeroPorta){
		portas[numeroPorta-1]=0;
		qtdAbertas--;
	}
	
	
	public int getPortasAbertas(){
		return qtdAbertas;
	}
	
	public boolean isOpen(int numeroPorta){
		if (portas[numeroPorta-1]==0){
			return false;
		}else{
			return true;
		}
	}
	
	public void getErro(){
		JOptionPane.showMessageDialog(null, "Não se pode abrir ou fechar uma Porta mais de uma vez"
				+" se a mesma ja estiver aberta ou fechada. Favor escolher outra porta...","Erro",0);
	}
	

}
import javax.swing.JOptionPane;

public class ConstruirCasa {
	
	enum AcaoPorta{ABRIR, FECHAR};    //Para que serve isso ? 
	
	public static void main(String args[]){
		
		JOptionPane.showMessageDialog(null, "Vamos Crir uma Casa e Controlar suas Portas:", "Casa",1);
		
		int numeroDaPorta=0;
		boolean erro=true;
		boolean continuar=true;
		
		String corDaCasa = JOptionPane.showInputDialog("Cor da Sua Casa: ");
		int qtdPortas = Integer.parseInt(JOptionPane.showInputDialog("Qual a quantidade de PORTAS: "));
		
		Casa casa = new Casa();
		Porta porta = new Porta();
		
		// Definindo Caracteristicas da Casa
		casa.novaCasa(corDaCasa, qtdPortas);
		
		JOptionPane.showMessageDialog(null, "A cor da sua casa é: "+casa.getCorDaCasa()+"\n" +
				"Sua casa tem: "+casa.getQtdPortas()+" portas \n\n"+
				"VAMOS CONTRALAR AS PORTAS ABERTAS E FECHADAS!!!!\n" +
				"Por padrão todas as portas estão fechadas...", "Casa",1);

		AcaoPorta acaoPorta;            // o que é isso ?
		
		do{
			int status = Integer.parseInt(JOptionPane.showInputDialog("Digite:\n" +
					"1(UM) para A B R I R uma porta\n" +
					"0(ZERO) para F E C H A R uma porta."));
		
			if (status == 1){
				acaoPorta = AcaoPorta.ABRIR;
			}else{
				acaoPorta = AcaoPorta.FECHAR;			
			}
		
			do{
				do{
					numeroDaPorta = Integer.parseInt(JOptionPane.showInputDialog("Voce tem portas rotuladas de 1 à "+
					casa.getQtdPortas()+"\n\nEscolha uma delas:"));
				}while((numeroDaPorta>casa.getQtdPortas())||(numeroDaPorta<=0));
				
				boolean portaJaAperta = porta.isOpen(numeroDaPorta);
				
				if (acaoPorta == AcaoPorta.ABRIR){
					if(portaJaAperta == true){
						erro=true;
						porta.getErro();
					}else{
						porta.abrirPorta(numeroDaPorta);
						erro=false;
					}
				}
				if (acaoPorta == AcaoPorta.FECHAR){
					if(portaJaAperta == false){
						erro=true;
						porta.getErro();
					}else{
						porta.fecharPorta(numeroDaPorta);
						erro=false;
					}
				}
				
				if ((porta.getPortasAbertas()==3)&&(acaoPorta == AcaoPorta.ABRIR)){
					break;
					
				}
				if ((porta.getPortasAbertas()==0)&&(acaoPorta == AcaoPorta.FECHAR)){
					break;
					
				}
				
			}while(erro==true);
			
			
			JOptionPane.showMessageDialog(null, "Status Das Portas:\n\n" +
					"ABERTAS: "+porta.getPortasAbertas()+"\n" +
					"FECHADAS: "+(casa.getQtdPortas()-porta.getPortasAbertas()),"Status",1);
			
			status = Integer.parseInt(JOptionPane.showInputDialog("Digite:\n\n" +
					"1(UM) para ESCOLHER outra porta para FECHAR ou ABRIR.\n" +
					"0(ZERO) para sair do sistema e destruir a sua casa da Mémoria."));
			
			if (status==1){
				continuar=true;
			}else{
				continuar=false;
				System.exit(0);
			}
			
		}while(continuar==true);
	}
}

Bom, fiz algumas perguntas em forma de comentário para tentar facilitar, se puder responder, me tiraria muitas dúvidas, abraço e obrigado pela atenção e dedicação.

Allan_BSO

[color=blue][size=18]Vamos lá, deixa eu ver se consigo te ajudar…[/size][/color]

[color=red] [/color] Para que o programa compile apropriadamente, você devera criar uma [color=blue]classe [/color]para os seguintes objetos:

  • Casa (objeto no main)
  • Porta (objeto no main)
  • ContruirCasa (main)

[color=red] [/color] Na minha visão os getters and setters são usados como padronização no sentido de obter e setar valores para uma variável, respectivamente, no entanto, em outras visões são usados para encapsulamento de código. Cada um diz uma coisa!!! :shock:
Eu aconselharia a você ler esse tópico: http://www.guj.com.br/posts/list/31949.java#171153

[color=red] [/color] A palavra chave [color=blue]return[/color] devolve um valor:

public int getQtdPortas(){ return qtdPortas; // o que exatamente o return faz ? }

Nesse caso acima ele retorna um variável que tem o numero total de Portas (inteiro) de acordo com o tipo de dado que a classe tem que retornar. Observe com qual tipo de dado a classe foi criada (Inteiro)…

public int getQtdPortas(){}

[color=red] [/color] Eu define o numero 50 como valor máximo de portas…

int portas[] = new int[50];

mas voce poderia criar um Construtor de classe que definiria o numero total de portas da casa…
Da uma pesquisada no livro: Java como programar 6 . Pag 68 - Cap 3 - Muito Bom!!!

[color=red] [/color]o index dos arrays sempre comeca com 0 portanto eu fiz exatamente isso!!! :wink:

portas[numeroPorta-1]=1;          // utilizou o -1 porque array começa em 0 e vai até n-1, correto ?

[color=red] [/color]O [color=blue]enum [/color]é como se fosse uma classe para enumerar status, ações… digamos que deixa os programas mais organizados e fáceis de efetuar futuras manutenções…

enum AcaoPorta{ABRIR, FECHAR};    //Para que serve isso ?

[color=red] [/color]Após criado a “classe” enum eu criei um objeto dessa

AcaoPorta acaoPorta;            // o que é isso ?

Bom espero ter ajudado…

[color=olive]Espero que quando vc estiver bem tbm ajude outras pessoas… soh assim vamos pra frente!!!
Além disso podemos aprender mais tirando duvidas de outros… É assim que eu faço… comecei em java a 4 meses. estou ralando pra caramba… [/color]

qqr coisa meu e-mail é [email removido]

M

Muito obrigado pela ajuda, algumas coisas ainda ficaram meio confusas na minha cabeça, mas com o tempo as coisas vão se organizando.
Pode deixar que quando eu souber o suficiente para ajudar, eu farei isso.
Abraços e bons estudos.

Paulo_Faulstich

Olá amigo da uma lida neste material, vai te ajudar a esclarecer todas estas duvidas.

http://www.scribd.com/doc/248901/caelumjavaobjetosfj11

Abraço.

M

Paulo Faulstich:

Olá amigo da uma lida neste material, vai te ajudar a esclarecer todas estas duvidas.

http://www.scribd.com/doc/248901/caelumjavaobjetosfj11

Abraço.

É exatamente esta apostila que eu estou estudando, realmente muito boa.

Paulo_Faulstich

:stuck_out_tongue:

Criado 24 de maio de 2008
Ultima resposta 25 de mai. de 2008
Respostas 19
Participantes 4