Explicação por favor
Considerando a definição e utilização de estruturas de dados em JAVA, analise o programa abaixo, desenvolvido no ambiente NetBeans 7.2.1:
Dentre as opções abaixo, qual apresenta o valor que será impresso por esse programa ao final de sua execução?
O gabarito é 00011
Soluções para a tarefa
Explicarei linha a linha, no entanto, tenha paciência e atenção ao ler.
A primeira linha descreve a qual pacote a sua classe pertence. O pacote se chama cap10, que é um diretório no sistema de arquivos que conterá a sua classe chamada CAP10.
A classe possui um método estático, sem retorno e que recebe uma lista de Strings como argumento.
- Estático: significa que esse método pertence à classe e não aos objetos. Isso fica mais claro quando se estuda orientação a objetos com Java, então se ainda não viu isso, não se preocupe.
- Sem retorno: um método, assim como uma função na matemática, pode realizar uma operação e retornar um resultado. Nesse caso, o método não retorna resultados, por isso seu retorno é void (vazio).
- Lista de argumentos: por linha de comando é possível chamar a aplicação passando alguns argumentos, que são armazenados nessa variável chamada args[] e podem ser manipuladao pelo método.
Esse método main é especial. Ele é o primeiro método que é chamado quando sua aplicação é executada, independentemente de quantos ela tenha e em qual ordem eles apareçam.
Dentro desse método ocorre três grandes ações. A primeira é:
- a declaração de uma variável matriz 2x2, do tipo inteira;
- a declaração de uma variável t que é inicializada com 0.
A segunda ação é uma operação que envolve percorrer todas as posições da matriz, efetuar um cálculo, armazená-lo na posição [ i ][ j ] da matriz e acumular o valor para a variável t.
A terceira ação é a exibição do resultado contido em t.
Para entender o que se passa na segunda ação é interessante ter conhecimento de teste de mesa, que é uma simulação da execução de um programa, com uma massa de dados X e olhar o resultado Y segundo o processamento feito.
for (int i = 0; i < matriz.length; i++) // esse trecho significa que estamos declarando uma variável chamada i, do tipo inteira, e inicializando-a com 0. Em seguida, no teste lógico, estamos informando que o laço de repetição continuará seu ciclo enquanto essa variável i for menor que a quantidade de linhas da matriz. Por fim, informamos ao computador que a cada iteração (ou seja, a cada ciclo) a variável i será incrementada de um. i++ é equivalente a i = i + 1.
for (int j = 0; j < matriz[i].length; j++) // esse trecho, dentro do laço de repetição que percorre as linhas da matriz, significa que estamos declarando uma variável chamada j, do tipo inteira, e inicializando-a com 0. Em seguida, no teste lógico, estamos informando que o laço de repetição continuará seu ciclo enquanto essa variável j for menor que a quantidade de colunas da linha especificada em matriz[i] (que é um vetor, ou matriz 1x2). Por fim, informamos ao computador que a cada iteração (ou seja, a cada ciclo) a variável j será incrementada de um. j++ é equivalente a j = j + 1.
t += matriz[i][j] = i * j;
Esse código pode ser reescrito em:
matriz[i][j] = i * j;
t = t + matriz[i][j];
O uso do operador de atribuição += significa que uma variável receberá o seu próprio valor somado de alguma outra coisa. Portanto x += y é igual a x = x + y. Note, também, que os valores da matriz são exibidos através do método print da classe System. Isso influencia na saída. Olhe o anexo que contém o teste de mesa para entender melhor a saída.
Obs.: note que dentro do laço é impresso o valor da matriz na posição [ i ][ j ] e no fim é impresso o valor de t.