Dúvida na seguinte atribuição: boolean f = false, b;

9 respostas
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);		

}

}
a  1. 0
   b  2. 1
   c  3. 2
   d  4. 3

O que seria essa atribuição:boolean f = false, b;
Eu estou definindo b nessa linha e atribuindo false a ele? Alguém sabe onde tem mais sobre isso, e o nome dessa atribuição, pois não consegui encontrar nada sobre isso, sem alguém tiver alguma explicação e exemplos sobre ela.

Obrigada :smiley: :frowning:

9 Respostas

bsl.lacerda

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
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

boolean b,f;
int i,j;

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

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

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”… :slight_smile: Sempre me engano com essa :?

Jeferson_Manetti

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:
b = (f && ((i+=2) > 0));
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

pra mim é 1 tbem e concordo com a explicação anterior.

Marcelo_FS

Ops, passar a madrugada acordado e depois tentar responder tópico de certificação sem testar os códigos não dá certo :frowning:

T

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

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

Criado 22 de dezembro de 2008
Ultima resposta 23 de dez. de 2008
Respostas 9
Participantes 6