Controle de Fluxo

7 respostas
J

boa tarde, queria estou tentando entender o seguinte.

tenho o seguinte codigo:

1. boolean b = false;  
   2. if (b = true) { System.out.println("b é verdadeiro") }  
   3. else { System.out.println("b é false") }

o quer seria mais correto afirmar;
a) Erro de compilação !
b) Uma exceção será lançada
c) b é false
d) b é verdadeiro
e) nenhum resultado

assim de cara eu ja sei que não compila por que esta faltando o " ; " no final das linhas de System.out.println. mais é que aqui no site do JavaFree no tutorial que eu vi isso o kra ta falando que ele lança uma axceção, e também lança…

Exception in thread “main” java.lang.Error: Unresolved compilation problems:
Syntax error, insert “;” to complete BlockStatements
Syntax error, insert “;” to complete BlockStatements

at ControleDeFluxo.Boolean.main(Boolean.java:6)

ai esta a duvida, por que não falar logo que não compila.

7 Respostas

dwduncan

Olha, concordo com vc. Se após colocados os “;” no final das linhas onde estão faltando, considerando que não há erros na parte do código que vc não mostrou, não há porque não compilar. Se corrigida essa falha, no meu modo de ver, B é verdadeiro.

J

pois é, ai também entra outra duvida mesmo declarando o boolean b = false; por que ele entra no primeiro if e imprimi “b é verdadeiro”.

???

nbluis

Bom outro problema básico aí, é que ao invés de testar o valor de b voce está atribuindo true para b devido ao simples “=”.

Com os “;” mesmo assim a lógica certamente estaria errada, pois sairia "b é verdadeiro "

J

desculpa ai galera, essas são as pequenas pegadinhas da prova da certificação, não tenho notado isso…

T
if (b = true) ...

É que “=” atribui e “==” compara. Isso não está errado, mas é equivalente a:

b = true;
if (b) ...

Em programas meus, sempre evito pôr “b == true” ou “b == false” porque a probabilidade de isso, por engano, virar “b = true” ou “b = false” é muito grande, já que o compilador não avisa que você acidentalmente usou a atribuição, não a comparação.

J

blz… ai vai outra duvida

por que se eu trocar isso por um numero tipo int. ele não deixa atribuir valor
só boolean?

dwduncan

Porque dentro da estrutura if vc só pode ter expressões ou valores que resultem um um tipo booleano. Java, ao contrário de C/C++ não faz conversão de números para booleano.

Criado 4 de junho de 2007
Ultima resposta 4 de jun. de 2007
Respostas 7
Participantes 4