Porta Lógica

eu tenho que fazer um programinha bem simples que reconheça algumas portas lógicas(OU EXCLUSIVO, AND, OU …) usando essa classe genérica PortaLogica

public class PortaLogica
		{
			private boolean A;
			private boolean B;
			private boolean S;

			PortaLogica() { A = B = S = false; }

			PortaLogica(boolean a, boolean b, boolean s) { A = a; B = b; S = s; }

			protected void setA(boolean a) { A = a;}
			protected void setB(boolean b) { B = b; }
			protected void setS(boolean s) { S = s; }
			public boolean getA() { return A; }
			public boolean getB() { return B; }
			public boolean gets() { return S; }
		}

Alguem pode me dar uma dica ???[/code]

Dica do que!? :slight_smile:

Alguma dica sobre como fazer as portas específicas, tipo a porta AND ou a porta OU EXCLUSIVO usando essa classe principal PortaLogica.

eu fiz esse código, onde uma subclasse OuExclusivo herda algumas coisas da classe principal PortaLogica alguem tem alguma observação a fazer ???Alguma correção???

// OuExclusivo.java

public class OuExclusivo extends PortaLogica{

public OuExclusivo(boolean s ){
	 boolean a;
	 boolean b;
	
	getA(a);
	getB(b);
	
 if (a=b) { 

	setS(s=false);
else
	setS(s=true);
}	
	return s;

}
}

Seria melhor vc fazer métodos dentro da classe PortaLógica mesmo… não prescisa ir tão longe ehhehe
Faz tipo isso:

public class PortaLogica { 
	private boolean A; 
	private boolean B; 
	private boolean S; 

	PortaLogica() { A = B = S = false; } 

	PortaLogica(boolean a, boolean b, boolean s) { A = a; B = b; S = s; } 

	protected void setA(boolean a) { A = a;} 
	protected void setB(boolean b) { B = b; } 
	protected void setS(boolean s) { S = s; } 
	public boolean getA() { return A; } 
	public boolean getB() { return B; } 
	public boolean gets() { return S; } 
	
	public void OuExclusivo () {
	this.setS(this.getA() != this.getB()); //true se os dois forem diferentes, false se os dois forem iguais
	}
	
	public void And () {
	this.setS(this.getA() && this.getB());
	}
	
	//outras portas aqui =P
} 

acho que é isso… se estiver errado me desculpem ;(

tipo, fiz isso entendendo que S seria sua variável de saida, ou seja, a saida da sua função booleana uhuhh
=D

para testar, use isso:


PortaLogica porta = new PortaLogica(true,false,false);
porta.OuExclusivo();
System.out.println(porta.getS());

eu fiz esse mas numsei o que tah dando errado , diz que a declaração do método Saida está errada.alguem pode dar uma forcinha …?

// OuExclusivo.java

public class OuExclusivo extends PortaLogica{

public OuExclusivo(boolean x,boolean y)
{	
	x=getA();
	y=getB();
	
	if (x=y)  
	z=setS(false);
else 
	z=setS(true);

	    public void Saida(){ 
		System.out.print("A = " +x);
		System.out.print("B = " +y);
	                System.out.print("S = " +z);
	    
	     
}  
}
}

Você está cometendo vários erros. Exemplo:

  • esse seu public OuExclusivo é somente o construtor da classe, é como se ele fosse um método qualquer! Vc tá declarando um outro método logo depois dele, antes de fechar chaves… Por isso que o compilador tá chiando

  • pra que o construtor OuExclusivo ter 2 parâmetros de entrada, se vc vai sobreescrevê-los de qualquer maneira?

  • O método setS da sua classe PortaLogica é do tipo void, ou seja, não retorna valor algum… então, vc não pode fazer isso que vc tá fazendo, z=setS(false).

  • Em java, para comparar, use ==, e não =.

  • Já dei minha sugestão, faça métodos para a classe superior, bobagem fazer uma classe para cada operação.

na verdade eu tenho que fazer uma outra classe , eu sei que é menos complicado fazer um método dentro da classe superior…
eu fiz uma mudança do código, mais alguma sujestão ??

// OuExclusivo.java

public class OuExclusivo extends PortaLogica{

public OuExclusivo(boolean x,boolean y,boolean z)
{	

	x=getA();
	y=getB();
	setS(z);
	if (x==y) 
	z=false;

else 
	z=true;

	setS(z);
	    	
}  
public void SaidaValor() {
	     System.out.print("A = " +getA());
		 System.out.print("B = " +getB());
	     System.out.print("S = " +getS());
	   }
	    
}

Deve funcionar, apesar de vc ter complicado um tanto! ehehhe

a unica coisa que continua sem sentido é vc botar os booleans x e y como parâmetros do construtor, sendo que vc vai sobreescrevê-los depois.

podia botar um construtor sem parametros, ehhehe =)

eu sei que tah complicando a situação hehehe mas o professor é que tah exigindo que se faça assim… sabe como é professor … hehehe
é eu dei uma vacilada mesmo , tava definindo parâmetros que seriam sobrescritos depois … Agora tah legal ???

// OuExclusivo.java

public class OuExclusivo extends PortaLogica{

public OuExclusivo()
{	

	boolean x=getA();
	boolean y=getB();
	boolean z;
	
	if (x==y) 
	z=false;

else 
	z=true;

	setS(z);
	    	
}  
public void SaidaValor() {
	     System.out.print("A = " +getA());
		 System.out.print("B = " +getB());
	     System.out.print("S = " +getS());
	   }
	    
}

[quote=“categoria_junior_mirim”] if (x==y)
z=false;

else
z=true;
[/code][/quote]

Nao quero entrar muito no merito da questao, mas se teu professor ve isso ele vai querer te bater :smiley:

Que tal assim:

z = (x!=y);

desculpa a ignorância , hehehe …mas qual a diferença ???

AND

public boolean and(boolean a, boolean b) { return a && b; }

Ou Exclusivo

public boolean xor(boolean a, boolean b) { return ( (a || b) && (!a && !b) ); }

Acho que é isso!