Duvida com Metodo Inteiro

17 respostas
faeldix
class Casa {

      String CorDaCasa;
      boolean Porta1,Porta2,Porta3; /* false: fechada... true aberta */

             void pinta (String Cor) {
                  this.CorDaCasa = Cor; }

             void AbrePorta1 () {
                  this.Porta1 = true; }

             void AbrePorta2 () {
                  this.Porta2 = true; }

             void AbrePorta3 () {
                  this.Porta3 = true; }

             void FechaPorta1 () {
                  this.Porta1 = false; }

             void FechaPorta2 () {
                  this.Porta2 = false; }

             void FechaPorta3 () {
                  this.Porta3 = false; }

             int PortasAbertas (int cont) {

                 if (this.Porta1 = true) {
                    cont += cont; }
                 if (this.Porta2 = true) {
                    cont += cont; }
                 if (this.Porta3 = true) {
                    cont += cont; }
                 System.out.println("Existe " +cont+ " portas abertas");
                    return cont;
                                 }
 }
 
 class ProgramFinal {
 
       public static void main(String[] args) {
              Casa c1 = new Casa(); 
              c1.CorDaCasa = "branca";
              c1.pinta("Azul");
              c1.AbrePorta1();
              c1.AbrePorta2();
              c1.AbrePorta3();
              c1.PortasAbertas();
              } }

erro nessa linha

c1.PortasAbertas();

Alguem tem nocao do porque?
Grato.

17 Respostas

williamdasflores
celso.martins

Na assinatura do metodo você indica que irá passar um argumento do tipo inteiro e não está passando. Ou define o contador dentro do metodo ou passa um contador para ele.

Obs: letra inicial do método nas convenções do Java é minuscula.

Abraços

williamdasflores

Celso,

Você fez uma observação…se refere ao método “PortasAbertas”???

faeldix

cara vc criou um “procedure” assim eu conseguiria rs… tranquilo, pois ele nao retorna valor.
mas agora ele eu queria fazer isso utilizando um metodo do tipo inteirinho (uma funcao propriamente dita).

celso.martins

williamdasflores:
Celso,

Você fez uma observação…se refere ao método “PortasAbertas”???

positivo

faeldix
celso.martins:
Na assinatura do metodo você indica que irá passar um argumento do tipo inteiro e não está passando. Ou define o contador dentro do metodo ou passa um contador para ele.

Obs: letra inicial do método nas convenções do Java é minuscula.

Abraços

voce diz nesse trecho que esta comentado?

/* int */ PortasAbertas /*(int cont)*/ {  
   
                  if (this.Porta1 = true) {  
                     cont += cont; }  
                  if (this.Porta2 = true) {  
                     cont += cont; }  
                  if (this.Porta3 = true) {  
                     cont += cont; }  
                  System.out.println("Existe " +cont+ " portas abertas");  
                     return cont;  
                                 }
celso.martins

cara vc criou um “procedure” assim eu conseguiria rs… tranquilo, pois ele nao retorna valor.
mas agora ele eu queria fazer isso utilizando um metodo do tipo inteirinho (uma funcao propriamente dita).

The method portasAbertas(int) in the type Casa is not applicable for the arguments ()

faeldix

cara vc criou um “procedure” assim eu conseguiria rs… tranquilo, pois ele nao retorna valor.
mas agora ele eu queria fazer isso utilizando um metodo do tipo inteirinho (uma funcao propriamente dita).

The method portasAbertas(int) in the type Casa is not applicable for the arguments ()

eu queria entender qual é a “engenharia” entao pra chamar o metodo inteiro ;
pq se eu fazer o seguinte

c1.PortasAbertas(0);

ele compila… mas vai me devolver zero… (oq eu acho ne… nao e o certo… pois ja declarei 3 portas abertas…
deveria me devolver “3”;

pmlm

Problema 1:

Não estás a comparar correctamente. Para comparar tens de usar ==

if (this.Porta1 == true) {    
          cont += cont; 
  }    
...

Como Porta1 já é um boolean, podes fazer simplesmente:

if (this.Porta1) {    
          cont += cont; 
 }    
...

Problema 2:

Estás a somar cont com ele próprio, se é 0, continua 0.
Se encontras uma porta aberta, deves somar 1.

if (this.Porta1) {    
          cont += 1; 
 }    
...

Ou simplesmente:

if (this.Porta1) {    
          cont ++; 
 }    
...

Problema 3:

O teu método não precisa de receber um int como parâmetro. Deve ser simplesmente int PortasAbertas(){…
A tua variável cont deve ser criada dentro do método

int PortasAbertas () {  

    int cont = 0;   
                  
    if (this.Porta1) {  
        cont ++; 
    }  
...
celso.martins

Olha isso, um pouco mais OO. Desenvolva a partir disso, use agora a sua imaginação:

Abraços

public class CasaExecuta {

	public static void main(String[] args) {
		Casa casa = new Casa();
		casa.pintar("Azul");
		
		Porta portaCozinha = new Porta("Cozinha");
		casa.abrir(portaCozinha);
		casa.substituir(portaCozinha);
		
		Porta portaSala = new Porta("Sala");
		portaSala.fechar();
		casa.substituir(portaSala);
		
		System.out.println(casa.portasAbertas());
		
		portaSala.abrir();
		casa.substituir(portaSala);
		System.out.println(casa.portasAbertas());
	}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Casa {
	private String corDaCasa;
	private List<Porta> portas;

	public void pintar(String cor) {
		this.corDaCasa = cor;
	}
	
	public void abrir(Porta porta) {
		porta.abrir();
	}
	
	public void fechar(Porta porta) {
		porta.fechar();
	}
	
	public void adicionar(Porta porta) {
		portas.add(porta);
	}
	
	public void remover(Porta porta) {
		portas.remove(porta);
	}
	
	public void substituir(Porta porta) {
		if (portas.contains(porta)) {
			portas.remove(porta);
		}
		portas.add(porta);
	}

	public int portasAbertas() {
		int contador = 0;
		
		for (Porta porta : portas) {
			if (porta.isAberta()) {
				contador++;
			}
		}
		return contador;
	}

	public String getCorDaCasa() {
		return corDaCasa;
	}

	public List<Porta> getPortas() {
		return Collections.unmodifiableList(portas);
	}

	public Casa() {
		this.portas = new ArrayList<Porta>();
	}
}
public class Porta {
	
	private String local;
	private boolean aberta;
	
	public Porta(String local) {
		this.local = local;
	}
	
	public Porta() {}

	public void fechar() {
		this.aberta = false;
	}
	
	public void abrir() {
		this.aberta = true;
	}

	public boolean isAberta() {
		return aberta;
	}

	public String getLocal() {
		return local;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((local == null) ? 0 : local.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Porta other = (Porta) obj;
		if (local == null) {
			if (other.getLocal() != null)
				return false;
		} else if (!local.equals(other.getLocal()))
			return false;
		return true;
	}
}
T

Beleza ?

Então você deve passar o valor 0, para o metódo PortasAbertas, e no metódo PortasAbertas, trocar onde você faz a soma:

cont += cont;

da maneira acima, você pega o valor de cont que é 0 é soma com ele mesmo que é 0, resultado sempre vai ser 0.

se você colocar:

cont += 1;

será sempre soma ao valor de cont o valor 1.

espero ter ajudado.

faeldix
pmlm:
Problema 1: Não estás a comparar correctamente. Para comparar tens de usar ==
if (this.Porta1 == true) {    
          cont += cont; 
  }    
...
Como Porta1 já é um boolean, podes fazer simplesmente:
if (this.Porta1) {    
          cont += cont; 
 }    
...

Problema 2:

Estás a somar cont com ele próprio, se é 0, continua 0. Se encontras uma porta aberta, deves somar 1.
if (this.Porta1) {    
          cont += 1; 
 }    
...
Ou simplesmente:
if (this.Porta1) {    
          cont ++; 
 }    
...

Problema 3:

O teu método não precisa de receber um int como parâmetro. Deve ser simplesmente int PortasAbertas(){... A tua variável cont deve ser criada dentro do método
int PortasAbertas () {  

    int cont = 0;   
                  
    if (this.Porta1) {  
        cont ++; 
    }  
...

certo.. eu entendi..
so que agora eu sou chato rs.. se eu quiser chamar um metodo inteiro?
como eu procederia?

celso.martins

faeldix:

se eu quiser chamar um metodo inteiro?
como eu procederia?

O que você chama de “método inteiro”?

williamdasflores

Velho, tenta isso..

void portasAbertas(int cont) {

                  
                  if (this.Porta1 == true) {
                     cont += 1; }
                  if (this.Porta2 == true) {
                     cont += 1; }
                  if (this.Porta3 == true) {
                     cont += 1; }
                  System.out.println("Existe " +cont+ " portas abertas");
                     
               }
public static void main(String [] args) {
        Teste t1 = new  Teste();
               t1.CorDaCasa = "branca";
               t1.pinta("Azul");
               t1.AbrePorta1();
               t1.AbrePorta2();
               t1.AbrePorta3();
               t1.FechaPorta1();
               t1.portasAbertas(0);
    }
faeldix

celso.martins:
faeldix:

se eu quiser chamar um metodo inteiro?
como eu procederia?

O que você chama de “método inteiro”?

apenas uma forma de chamar… um “metodo inteiro” é aquele metodo que vai me retornar um valor inteiro… entende?

faeldix

quote=williamdasflores

public static void main(String [] args) { Teste t1 = new Teste(); t1.CorDaCasa = "branca"; t1.pinta("Azul"); t1.AbrePorta1(); t1.AbrePorta2(); t1.AbrePorta3(); t1.FechaPorta1(); t1.portasAbertas(0); }

[/quote]

ow cara vlw… eu ja fiz… exatamente isso que vc acabou de fazer.
vlw pela ajuda.

drigo.angelo
faeldix:
pmlm:
Problema 1: Não estás a comparar correctamente. Para comparar tens de usar ==
if (this.Porta1 == true) {    
          cont += cont; 
  }    
...
Como Porta1 já é um boolean, podes fazer simplesmente:
if (this.Porta1) {    
          cont += cont; 
 }    
...

Problema 2:

Estás a somar cont com ele próprio, se é 0, continua 0. Se encontras uma porta aberta, deves somar 1.
if (this.Porta1) {    
          cont += 1; 
 }    
...
Ou simplesmente:
if (this.Porta1) {    
          cont ++; 
 }    
...

Problema 3:

O teu método não precisa de receber um int como parâmetro. Deve ser simplesmente int PortasAbertas(){... A tua variável cont deve ser criada dentro do método
int PortasAbertas () {  

    int cont = 0;   
                  
    if (this.Porta1) {  
        cont ++; 
    }  
...

certo.. eu entendi..
so que agora eu sou chato rs.. se eu quiser chamar um metodo inteiro?
como eu procederia?


Cara, só olhar esse código aí, o método portasAbertas() retorna um valor inteiro! entende?
int portasAbertas(){ ...
o int ali indica o tipo de retorno, que é inteiro xD

se você quiser chamar esse método de outras classes, pode colocar ele como public, daí ele fica assim:
public int portasAbertas(){
...
}
sendo que public significa que pode ser chamado por outra classe, int é o tipo de retorno e portasAbertas é o nome do método. Repare também que ele não tem parâmetros, o motivo disso o faeldix explicou ai em cima :D

Atente também ao padrão java que nomes de variáveis e de métodos começam com a letra minúscula :P

Criado 10 de março de 2011
Ultima resposta 10 de mar. de 2011
Respostas 17
Participantes 6