Múltiplos de 3 em laço for

Exercício listar múltiplos de 3 entre 1 e 100. Alguém me explica porque o código não funciona?

for(int num = 1; num <= 100 && num % 3 == 0; num++) {
	System.out.println(num);
}

Já consegui solucionar, mas tive jogar um if para dar certo.

for(int num = 1; num <= 100; num++) {
	if(num % 3 == 0) {
		System.out.println(num);
	}
}
1 curtida

O teste aplicado dentro do for é a regra de iteração do laço, como o contador do laço é iniciado com valor 1 e 1 não é múltiplo de 3, a condição não é atendida e o laço não faz nenhuma iteração!

Porém quando o teste é feito internamente, a regra do laço fica sendo percorrer os valores de 1 à 100, por isso funciona!

Para manter tudo no laço você poderia fazer da seguinte forma:

for (int num = 3; num <= 100 && num % 3 == 0; num += 3) {
    System.out.println(num);
}
1 curtida

o seu primeiro for não da certo por causa da regra do seu for, a primeira parte é criação e atribuição de valores das variáveis, a segunda é o teste logico para parar o for(aqui onde está o problema), a terceira a iteração.
para o número ficar no for ele obrigatoriamente no seu tem que ser menor ou igual a 100 e ser múltiplo de 3, diferente disso ele vai encerrar o for.
o seu for pra dar certo seria.

for(int num = 3; num <= 100; num+=3) {
System.out.println(num);
}

nesse caso que coloquei ele percorre a lista de 3 em 3 e imprime os valores do número 3,6,9, etc.