questão javacertificate

10 respostas
D

Salve galera,

public class Calc2 {

2.	    public static void main(String[] args) {

3.	        int a = 4, b = 5, c = 6;

4.	        a = a % 2 + 1;

5.	        c += b * a;

6.	        b += b++ - a;

7.	        System.out.println("a: " + a + " b: " + b + " c: " + c);

8.	    }

9.	}

a: 1 b: 7 c: 11

a: 0 b: 9 c: 11

a: 3 b: 9 c: 13

a: 2 b: 7 c: 13

É moleza, mas rolou uma dúvida existencial.
depois de alguém dar a resposta explico o x da questão.
[ ]
dirceu

10 Respostas

Ironlynx

a=0,b=9 e c=11

R

Resposta a=a%2+1 a=0+1 a =1 c=c+b*a c=6+5*1 c =11 b=b+b++ -a-- b=5+5-1 c=9 Lembre-se que b++ e a-- são pós-incrementados/decrementados.O valor inicial é usado e depois incrementado.

D

beleza.

A crise existencial é essa:

6 b += b++ - a–;

pode ser escrita:

b = b + (b++ - a–); então, 5 - 1 vem primeiro e é somado ao b fora dos parênteses. Por quê este último b ainda mantém o valor 5, mesmo após ter sido incrementado em 1 na operação anterior, diferentemente do a que imprime o 0 após decremento?[/i]

A

Eu também não entendi direito como funciona esta linha!!! :frowning:
Para b ficar igual a 9 no final, parece que o pós-incremento não é executado !?!? :?
Alguém poderia dar uma luz :idea: para a gente ?

D

Oi ana,

O pós-incremento é executado, porém seu novo valor não foi utilizado. Para dar “9” o resultado de b - a (4) é adicionado ao valor original de b (5).

Parece que o valor de b segue a seguinte sequencia:

.     inicializa com 5;

.     ganha 1 no pós-incremento;

.     porém é sobrescrito pelo total de:

.          total de (b - a) sem in(de)crementos
.                     +=
.          o valor original 5
.        _________________
.                      9

Parece ser uma questão de precedência entre os operadores de incremento e de atribuição, onde o incremento veio primeiro deixando b=6 e depois a atribuição rolou com a adição do 4 como resultado de b - a.
Essa é realmente a minha dúvida. Se b estava valendo 6 com o incremento, ao receber o 4 da atribuição era para dar 10.

dirceu

R
A regra é essa:se pre-incrementa (++a) ,incrementa a por 1,depois usa o valor de a na expressão.Se pre-decrementa (--a),decrementa a por 1,depois usa o valor de a na expressão.Agora se pós-incrementa (a++), usa-se o valor atual(sem incrmentar) de a na expressão e se pós-decrementa(b--) usa-se o valor atual de b na expressão. Rode esse programa e veja como funciona.
public class DeIncrementa {
   public static void main (String args[]) 
     int a=5;
     int b=5;
     for(int i=0;i<1;i++) {//mude o valor de i para 2,3,etc
     a=a + a++;  //a+=a++
     b=b + ++b;  //b+=++b
     }
     System.out.println(a+ "  pos-incremento");
     System.out.println(b+ "  pre-incremento");
     }
     }
S

eu ainda nao to entendendo… pra mim, o valor de b deveria ser 10.

porque na linha 6 tem o b++
ker dizer, depois de fazer a operaçao toda, b fica com 9
mas teve esse b++, ai pra mim, ficava 10

pq nao fica?

S

Li a resposta do DirceuBF. Ta claro pra mim, mas ainda ta estranho ehhehe

rodrigousp

Isto é uma questão de fé…

class Qualquercoisa {

public static void main (String[] args) {

int b = 5;

b = b++;

System.out.println("b: " + b);

}

}

b = 5

Quer dizer, pós-operação depois de “=” não vale de nada. Cruel.

dsuruagy

Corrijam-me se eu estiver enganado:

No exemplo anterior, do rodrigousp, temos b = b++. o b++ eh executado sim, mas apenas depois da linha toda ser executada. Acontece que a linha toda sendo executada significa que b recebe o resultado da expressao, sem o incremento, ou seja, o operador = eh o ultimo a ser executado, sobrescrevendo o valor incrementado.

Dah pra pirar!!!

Vejam esta questao que fiz (errei) hoje pela manha:

[url]http://www.examulator.com/jezam/question.jsp[/url]
Criado 21 de setembro de 2003
Ultima resposta 13 de out. de 2003
Respostas 10
Participantes 7