6.3. Ciclos for encaixados

Tal como encaixámos ifs dentro de ifs, também podemos encaixar, ou aninhar, ciclos for. No pedaço de código seguinte, quantas vezes é escrita a palavra Blah no ecrã?

Relembre o fluxograma do ciclo for ao interpretar o código acima.

O que constatamos aqui? Que o corpo do ciclo externo (formado por uma única instrução, que é o ciclo for interno) é executado 3 vezes. Por sua vez, o corpo deste ciclo interno (a instrução System.out.print("Blah")) é executado 2 vezes.

Então, a instrução System.out.print("Blah") é executada 3 x 2 vezes, ou seja, a palavra "Blah" é escrita seis vezes.

Experimente executar o programa seguinte, contendo os ciclos encaixados:

Como provocar uma mudança de linha de cada vez que se escrevem dois Blahs, ou seja, de cada vez que o ciclo interno termina?

Basta adicionar a instrução System.out.println() logo após o ciclo interno. Desta forma o corpo do ciclo externo fica com duas instruções: o ciclo interno e a mudança de linha.

Execute a nova versão do programa com atenção às diferenças:

6.3.1. Exemplos

Vamos supor que queremos imprimir uma tabela da multiplicação para as tabuadas dos naturais de limInf a limSup, com m valores cada. Se limInf for 1, limSup for 9 e m for 10 queremos o seguinte:

Vamos dividir a tarefa da seguinte forma:

  1. Como imprimir uma linha com a tabuada de um natural n, com m valores?
  2. Como fazer isso para valores de n num dado intervalo [ limInf , limSup]?

O método seguinte resolve a sub-tarefa 1:

A última instrução é para provocar a mudança de linha.

Para resolver a sub-tarefa 2, invocamos o método anterior para valores de n no intervalo [ limInf , limSup]. O seguinte método realiza essa tarefa:

O seguinte programa escreve no ecrã as tabuadas dos naturais de 1 a 9, cada uma com 10 valores:

Experimente executá-lo "ao vivo":

 

Repare que, embora divididos por dois métodos, o que temos aqui é um ciclo encaixado noutro – para cada valor de linha no ciclo do método imprimeTabuadas, é executado o ciclo definido no método imprimeMultiplos.

O seguinte programa é equivalente ao anterior:

 

 


 

Anterior: 6.2. A instrução for

Seguinte: 6.4. Ainda a abstração procedimental