Se você assim como eu ficou se perguntando porquê "Teve copa em 2018" não foi impresso, uma vez que, com "anoCopa" = 2014, a condição do while ainda seria true e por tanto, deveria imprimir mais uma soma de 4 anos... eu vou explicar...
Eu estava vindo aqui fazer esta pergunta mas acabei descobrindo no meio do caminho.
A resposta é:
A ordem das ações dentro do "while" não permite que o ano de 2018 seja impresso, vejamos:
while(anoCopa <= 2016) {
mostra("Teve copa em " + anoCopa);
anoCopa = anoCopa + 4;
}
Como foi escrito, o while primeiro mostra o valor atual do anoCopa e depois acrescenta mais 4 anos... Por tanto em 2014, o "while" imprime "Teve copa em 2014" e em seguida muda o valor de anoCopa para 2018... por tanto, a partir daí o loop não se repete mais, pois a condição "anoCopa <= 2016" passa a retornar false
.
No entanto, vale ressaltar que, se por um acaso você inverter a ordem destas ações, primeiro somando 4 anos e depois imprimindo:
while(anoCopa <= 2016) {
anoCopa = anoCopa + 4;
mostra("Teve copa em " + anoCopa);
}
2 problemas ocorrerão: 1 - o ano de 1930 não será exibido; 2 - o programa exibirá "Teve copa em 2018" o que não faria sentido pois, naquele contexto, a data limite era 2016.
Resumindo, neste caso, a ordem dos fatores SIM, afeta o "produto"!