Pq a compilação Falha?

11 respostas
Markinhus86
Question 224

Given:

42. public class ClassA {

43. public int getValue() {

44.int value=0;

45. boolean setting = true;

46. String title=?Hello?;

47. if (value || (setting && title == ?Hello?)) { return 1; }

48. if (value == 1 & title.equals(?Hello?)) { return 2; }

49. }

50. }

And:

70. ClassA a = new ClassA();

71. a.getValue();

What is the result?

A. 1

B. 2

C. Compilation fails.

D. The code runs with no output.

E. An exception is thrown at runtime.

Answer: C

11 Respostas

scarton

O problema está aqui:

if (value || (setting && title == ?Hello?)) { return 1; }

Não podemos fazer comparacoes entre valores inteiros (value) e tipos booleanos…

A linha 48 compila normalmente, considerando que o simbolo ? seja aspas, acredito que foi erro de digitacao…

Abracos

M

Além do que o scarton falou acho que o método também pede o return…
Porque, mesmo após conserta o if, se nenhum deles for satisfeito o metodo não ira retornar nada, e isso nao pode acontecer!

ataufo

Tem vários erros de compilação:

  • Interrogação no lugar de aspas.
  • Primeiro if comparando int com boolean
  • Segundo if com & onde deveria ser &&
  • método getValue() não retorna um int fora dos 2 if´s
maquiavelbona

ataufo:

  • Segundo if com & onde deveria ser &&

Isso não é erro. O operador binário “E” é ‘&’. ‘&&’ é um operador binário de curto-circuito, assim como “OU” é ‘|’ e o curto-circuito dele é ‘||’.

Até!

B

maquiavelbona:
ataufo:

  • Segundo if com & onde deveria ser &&

Isso não é erro. O operador binário “E” é ‘&’. ‘&&’ é um operador binário de curto-circuito, assim como “OU” é ‘|’ e o curto-circuito dele é ‘||’.

Até!


Entretanto o operador binário & não deve ser usado para comparar valores que não sejam bits. Isso é tido como erro de programação.

maquiavelbona

Onde viste isso? Se eu precisar que ambas as condições sejam avaliadas isso é considerado um erro de programação?
Se você falar que é feio, podemos discutir longamente, mas falar que é errado usar tem que ter mais argumentos.

Até!

ataufo

Olha realmente não sei ainda a diferença de & e &&. Mas que tipo de valores não seriam bits ?

T

Ada é bem mais verbosa que o Java nesse ponto, mas é mais intuitiva.

// Java
if (x & y) {
   ...
}
// Ada
if x and y then 
   ...
end if;
// Java
if (x && y) {
   ...
}
// Ada
if x and then y then
    ...
end if;
Nykolas_Lima

Olha realmente não sei ainda a diferença de & e &&. Mas que tipo de valores não seriam bits ?

A diferença é que o & verifica as duas condições, por exemplo vc tem:

if(x>0 & x<2)

Será verificado se x é maior que zero, mesmo ele sendo maior ou menor que zero, também será verifcado se x é menor que 2.

Caso a expressão fosse:

if(x>0 && x<2)

Se ao verificar se X é maior que zero o X NÃO fose maior que zer, então ele NEM ia verificar se x é menor que 2.

Essa é a diferença, o & compara os dois de quaquer jeito, já o && só compara o outro se o primeiro for verdadeiro.

Abraço

B

maquiavelbona:
Onde viste isso? Se eu precisar que ambas as condições sejam avaliadas isso é considerado um erro de programação?
Se você falar que é feio, podemos discutir longamente, mas falar que é errado usar tem que ter mais argumentos.

Até!


Me expressei mal. Esses operadores são usados APENAS nos casos em que você quer obter um resultado específico, como por exemplo o que você citou. Se eu quero comparar um inteiro com outro (E, OU, etc) eu devo utilizar os operadores de curto-circuito, e aí sim utilizar operador binário é um erro de programação.

ataufo

Essa é a diferença, o & compara os dois de quaquer jeito, já o && só compara o outro se o primeiro for verdadeiro.

Entendi. Obrigado.

Criado 28 de junho de 2009
Ultima resposta 1 de jul. de 2009
Respostas 11
Participantes 8