Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Exercicio 4 Arrays - estrutura for

Olá, surgiu aqui a seguinte duvida quanto a seguinte estrutura "for" proposta no exercício 4:

void mostraEmpregados() {
            for (int i = 0; i < this.livre; i++) {
                System.out.println("Funcionário na posição: " + i);
                System.out.println("R$" + this.empregados[i].salario);
            }
        }

Para mostrar todo o conteúdo do array a condicional do "for" não deveria ser um "<=" ao invés de apenas "<"?

6 respostas

Olá José,

Lembre-se que o for começa com i=0 então estamos rodando o loop (valor de this.livre) vezes.

se eu tenho um loop que é

for(int i=0; i<10; i++)

ele irá executar 10 vezes. Com valores de i de 0 a 9.

Faz mais sentido agora?

José boa tarde, lembra que quando usamos um array ou uma lista a primeira posição sempre começa do 0? Imagina que você tem uma array de 5 posições correto? 0 1 2 3 4 . 5 elementos! Agora você imagina um for para percorrer o seu vetor?

for(int i = 0; i < = tamanhoArray; i++ {
}

Aqui no for ira percorrer até a 5 posição que seria 0 1 2 3 4 5Repara que ira ter 6 elemento! Faz isso para não estourar o seu array.

Entendo, porem a duvida é a seguinte... ex. minha posição "this.livre" é 5 logo se a condição for "<" ele percorre até o 4 ex.: 0, 1, 2, 3 e 4 que é < que 5, correto? e a ultima posição cinco como fica? no caso meu array com 6 elementos.

Correto José,

Mas assim como o Alisson comentou, o objetivo é que ao fazer um for loop assim, o valor de this.livre seja igual ao tamanho do seu array.

Se não for, alguns elementos não serão percorridos e você terá de checar porque ele não tem o mesmo valor do tamanho do seu array.

Isso mesmo Lucas '----'

solução!

José, apenas complementando o que o Lucas e o Alisson já disseram:

Imagine que você tem 3 funcionários: Maria, Davi e Samara. Imagine que você colocou cada um deles em uma posição do array. Lembre-se que a alocação do array vai de 0 (zero) até N-1 (número de posições - [menos] 1). Seu array ficaria assim:

Empregados[0] = Maria Empregados[1] = Davi Empregados[2] = Samara

Por isso que, quando você varre o array até N-1, ele vai de 0 até 3-1 (2), que é, de fato, o último elemento do array.

Ao que parece, sua dúvida reside na sequência de execução das 3 instruções do laço for:

O laço for possui 3 instruções. Pegando seu exemplo: for (int i = 0; i < this.livre; i++).

int i = 0; (primeira)

i < this.livre; (segunda)

i++ (terceira)

Quando inicia o laço for, ele executa, nessa ordem:

1) primeira instrução (int i = 0) (apenas uma única vez!)

2) segunda instrução (i < this.livre) (uma vez)

3) terceira instrução (i++) (uma vez)

4) a partir da terceira instrução, ele executa a segunda e terceira instruções alternadamente até que a segunda instrução seja false. Ou seja, ele incrementa i, testa se i é menor que this.livre, incrementa i, testa se i é menor que this.livre, incrementa i, testa se i é menor que this.livre, até que i não seja não seja menor que this.livre, isso significa que a instrução retorna false. Nesse momento, ele interrompe o laço.

Assim, no seu último exemplo, quando no laço for incrementa i e ele fica valendo 5, o laço testa se i (5) é menor que this.livre (5). Como 5 não é menor que 5, ele sai do laço.

Espero ter ajudado.

Abraço.