bsl.lacerda 22 de dez. de 2008
Meu palpite é que não seja nada mais do que a declaração da variável boolean b sem referenciar nem atribuir nenhum valor. (Não nesta linha).
Meu palpite é esse…
Marcelo_FS 22 de dez. de 2008
public class ShortCkt {
public static void main ( String args [] ) {
int i = 0 ;
boolean t = true ;
boolean f = false , b ; // f=false; b= default->false
b = ( t && (( i ++ ) == 0 )); // b=true
b = ( f && (( i += 2 ) > 0 )); // b=false
System . out . println ( i ); // imprime 3
}
}
a 1. 0
b 2. 1
c 3. 2
d 4. 3
Isso é o mesmo que iniciar
No caso, você está iniciando as variáveis com os valores default (false pra boolean e 0 pra int). Iniciar um booleano como false é só açúcar.
bsl.lacerda 22 de dez. de 2008
Olá cintiarsbr!
Eu acho que somente as variável boolean t e boolean f foram inicializada.
b não é inicializada nesta linha. b só é inicializado em b = t (true).
Quer ver só, tenta imprimir o valor de b após a linha boolean f = false, b;
Dá xabu…
Marcelo_FS 22 de dez. de 2008
Putz, você tem razão Bruno: a regra da inicialização com valores default só vale para atributos!!
Se fosse assim:
public class ShortCkt {
static boolean t = true ;
static boolean f = false , b ; // b= default->false
public static void main ( String args [] ) {
int i = 0 ;
b = ( t && (( i ++ ) == 0 )); // b=true
b = ( f && (( i += 2 ) > 0 )); // b=false
System . out . println ( i ); // imprime 3
}
}
A regra valeria… do jeito que está, qualquer uso de ‘b’ antes da primeira comparação acusa “The local variable b may not have been initialized”… Sempre me engano com essa :?
Jeferson_Manetti 22 de dez. de 2008
iaew galera...
na minha opinião e assim:
public class ShortCkt {
static boolean t = true ;
static boolean f = false , b ; // b= default->false
public static void main ( String args [] ) {
int i = 0 ;
b = ( t && (( i ++ ) == 0 )); // b=true
b = ( f && (( i += 2 ) > 0 )); // b=false
System . out . println ( i ); // imprime 1
}
}
pq imprimi 1 e não 3...
pq na segunda comparação vc esta com parando com
&& e não com
& ...
portanto em:
ele não executaria a segunda parte pq
f é
false ...
se fosse só com o & daí daria 3 ^^
essa e minha humilde opinição ^^
a respeito da inicialização:
static boolean f = false, b;
e mesma coisa q:
static boolean f = false;
static boolean b; // default => false
e isso aew galera fui...
gabrielmassote 22 de dez. de 2008
pra mim é 1 tbem e concordo com a explicação anterior.
Marcelo_FS 23 de dez. de 2008
Ops, passar a madrugada acordado e depois tentar responder tópico de certificação sem testar os códigos não dá certo
thingol 23 de dez. de 2008
cintiarsbr:
Oi pessoal
Estava fazendo umas questões de certificação, e apareceu a seguinte questão:
public class ShortCkt {
public static void main ( String args [] ) {
int i = 0 ;
boolean t = true ;
boolean f = false , b ;
b = ( t && (( i ++ ) == 0 ));
b = ( f && (( i += 2 ) > 0 ));
System . out . println ( i );
}
}
O código acima é equivalente ao seguinte código:
public class ShortCkt {
public static void main ( String args [] ) {
int i = 0 ;
boolean t = true ;
boolean f = false ;
boolean b ;
b = ( t && (( i ++ ) == 0 ));
b = ( f && (( i += 2 ) > 0 ));
System . out . println ( i );
}
}
Você pode fazer várias declarações de variáveis do mesmo tipo em uma mesma linha, mas isso (como você acabou de descobrir) é bastante confuso. OK?
cintiarsbr 23 de dez. de 2008
Ok, agora consegui entender!!! Valeu pessoal!!
Segue o link do test com as respostas, muitos já devem ter feito:
http://www.javaprepare.com/quests/operat_q.html