Duvida exercicio

[code]public static void main(String [] args) {
int x =5;

	 boolean b1 = true;
	 boolean b2 = false;
	
	if((x==4) && !b2)
	System.out.print("1 ");
	System.out.print("2 ");
	if ((b2 = true) && b1);
	 System.out.print("3 ");
	 }[/code]

Alguem poderia me explicar, pq a saida deste exercicio é 2 e 3 e nao imprima o 1?

[code]public static void main(String [] args) {
int x =5;

     boolean b1 = true;  
     boolean b2 = false;  
      
    if((x==4) && !b2)  
    System.out.print("1 ");  
    System.out.print("2 ");  //essa linha sempre será executada, não está atrelada ao if
    if ((b2 = true) && b1);  //esse ";" depois do if o termina, ou seja, para o compilador, não há comandos depois desse if, então ele tmb sempre imprime o "3", mude para "{"
     System.out.print("3 ");  
     }  

} //faltou essa chave[/code]

ok?

if ((b2 = true) && b1);

modifique para

if ((b2 == true) && b1);

[quote=evertonsilvagomesjava] [code]public static void main(String [] args) {
int x =5;

	 boolean b1 = true;
	 boolean b2 = false;
	
	if((x==4) && !b2)
	System.out.print("1 ");
	System.out.print("2 ");
	if ((b2 = true) && b1);
	 System.out.print("3 ");
	 }[/code]

Alguem poderia me explicar, pq a saida deste exercicio é 2 e 3 e nao imprima o 1?[/quote]

[code]public static void main(String [] args) {
int x =5;
boolean b1 = true;
boolean b2 = false;

if((x==4) && !b2) //não executará porque x é diferente de 4 (5) só… isso note que se o operador fosse OU || seria!
System.out.print("1 "); //como você não delimitou com {} só se o if for verdadeiro executa isso

System.out.print("2 "); //sempre será executado, salvo ocorra execeção!

if ((b2 = true) && b1);
System.out.print("3 ");
}[/code]

hum vlw galeeeeeeeeeera

1 curtida

Tem como me ajudar nessa questao aqui tb galera? obrigado

[code]Given:
10. interface Foo {}
11. class Alpha implements Foo { }
12. class Beta extends Alpha {}
13. class Delta extends Beta {
14. public static void main( String[] args) {
15. Beta x = new Beta();
16. // insert code here
17. }
18. }

Which code, inserted at line 16, will cause a
java.lang.ClassCastException?
A. Alpha a = x;
B. Foo f= (Delta)x; // aqui ele ta tentando converter um beta pra Delta pq nao e valido?
C. Foo f= (Alpha)x;
D. Beta b = (Beta)(Alpha)x; // isso aqui e valido? pq?[/code]

Pegue o programa, crie um arquivo .java, e tente compilá-lo. Então vá trocando a tal linha 16 até obter o tal erro ClassCastException.

Desenha o UML da hierarquia de classes e tudo ficará mais claro …

Pense no seguinte:
Foo = Vida
Alpha = Pessoa;
Beta = Homem;
Delta = Mulher;

Teríamos o seguinte:

  1. interface Vida {}
  2. class Pessoa implements Vida { }
  3. class Homem extends Alpha {}
  4. class Mulher extends Beta {

Com isso dizemos que um Homem é uma Pessoa (e tem uma Vida) e que Mulher também é uma Pessoa. Entretanto, Nem toda Pessoa é necessariamente um Homem,
ou seja, não necessariamente toda Vida é um Homem (pode ser uma mulher). É o mesmo caso desse Delta e Beta… Todo Delta é um Alpha e todo Beta é um Alpha, mas não necessariamente um Alpha é um Beta.
O Java não deixa fazer essa conversão por causa dessa ordem hierárquica…

Aqui ele já deixa, porque todo Alpha (Pessoa) implementa Foo (Vida).

Não sei.

Eu tava lendo nao sei se estou certo pelo que entendi um Beta nao é um Delta por isso da o java.lang.ClassCastException, so que isso ta me dando uma duvida tremenda cara, pq estou lendo o livro da kathy e la tem umas conversões de d regressão e nao sei se é valido ou não.

Alguem pode me dizer, se tem como fazer um cast, de regressao, por exemplo:

[code]Dog extends Animal

Animal animal;

Dog dog = (Dog) animal;
[/code]

Em algum caso nessa vida pode acontecer de isso ser valido? Ou outra qualquer conversao de regressao.

Everton,

Isso é perfeitamente possível…

No exemplo que você citou, imagine que na classe Dog você criou o método Latir()… Este método com certeza não existirá na classe Animal, pois nem todos os animais latem, correto??

Então, para ter acesso ao método Latir(), ou você cria uma instância de Dog ou cria uma instância de Animal e faz o cast para Dog…

thunder qual a diferença disso citado a cima pra isso aqui entao:

10. interface Foo {}   
11. class Alpha implements Foo { }   
12. class Beta extends Alpha {}   
13. class Delta extends Beta {   
14. public static void main( String[] args) {   
15. Beta x = new Beta();   
16. // insert code here   
17. }   
18. }   
  
Foo f= (Delta)x; // aqui ele ta tentando converter um beta pra Delta pq nao e valido?   

Everton, essa converssão é possivel, mas gera uma exceção ‘ClassCastException’ em tempo de execução.
Em tempo de compilação o que o compilador pode fazer é checar se as duas classe estão na mesma árvore hierarquica.

t+

A linha 11 está perdida… Imagino que ela deve estar no lugar de // insert code here, correto???

Fiz o teste aqui e funcionou corretamente…

entao quer dizer que ambos os exemplos, funcionam mas dao erro em tempo de execuçao e isso?