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
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
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!
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
[quote=ataufo]…
- Segundo if com & onde deveria ser &&
…[/quote]
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é!
[quote=maquiavelbona][quote=ataufo]…
- Segundo if com & onde deveria ser &&
…[/quote]
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é![/quote]
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.
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é!
Olha realmente não sei ainda a diferença de & e &&. Mas que tipo de valores não seriam bits ?
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;
Olha realmente não sei ainda a diferença de & e &&. Mas que tipo de valores não seriam bits ?[/quote]
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
[quote=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é![/quote]
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.
[quote]Essa é a diferença, o & compara os dois de quaquer jeito, já o && só compara o outro se o primeiro for verdadeiro.
[/quote]
Entendi. Obrigado.