Mudanças entre as edições de "Pensamento Computacional - Arrays Unidimensionais no Java"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 17: Linha 17:
 
==Exemplo 1==
 
==Exemplo 1==
  
Suponha que em uma determinada turma de 15 alunos queremos armazenar os valores das notas finais (valores inteiros de 0 a 10).  
+
Suponha que em uma determinada turma de 5 alunos queremos armazenar os valores das notas finais (valores inteiros de 0 a 10).  
  
Neste caso o tamanho do array será 15. As indexações possíveis do array serão de 0 a 14 portanto. O tipo de cada elemento é inteiro, devido as notas inteiras.
+
Neste caso o tamanho do array será 5. As indexações possíveis do array serão de 0 a 14 portanto. O tipo de cada elemento é inteiro, devido as notas inteiras.
  
 
Uma possível solução para isso seria:
 
Uma possível solução para isso seria:

Edição das 08h58min de 24 de novembro de 2023

Conceito de Array

Um array unidimensional ou vetor pode ser visto como uma variável (uma caixa) dividida em partes menores (CAIXAS menores) acessadas por um índice (posição). Podemos dizer que cada elemento do vetor pode ser acessado através da indexação do vetor. Os elementos do vetor possuem um tipo único.


PRG1-vetor armario.png


Uma boa analogia é comparar o vetor com uma tabela de tamanho fixo onde em cada linha pode ser armazenado um elemento.


PRG1-tabela vetor.png

Observe que com o mecanismo de criação de vetor será possível armazenar dados de uma forma organizada e de forma que se possa operar em diversos momentos do processamento.

Exemplo 1

Suponha que em uma determinada turma de 5 alunos queremos armazenar os valores das notas finais (valores inteiros de 0 a 10).

Neste caso o tamanho do array será 5. As indexações possíveis do array serão de 0 a 14 portanto. O tipo de cada elemento é inteiro, devido as notas inteiras.

Uma possível solução para isso seria:

import java.util.Scanner;

public class TabelaNotas {
    public static void main(String[] args) {
        int[]  TabelaNotas = new int[5];
        Scanner teclado = new Scanner(System.in);

        for (int i = 0; i < 5; i++) {
            System.out.println("Entre com a nota do aluno " + i);
            TabelaNotas[i] = teclado.nextInt();
        }
        System.out.println("Dados armazenados!!!");
        /* imprimindo os dados lidos... */
        for (int i = 0; i < 5; i++) {
            System.out.println("Nota da posição " + i + " é " + TabelaNotas[i]);
        }
        teclado.close();
    }
}

DISCUSSÃO:

Inicialmente a instrução:

int[]  TabelaNotas = new int[5];

Declara a referência para o vetor TabelaNotas e cria um vetor de tamanho 5 associado a esta referÊncia. De agora em diante, podemos trabalhar este vetor (lendo e escrevendo sobre cada elemento dele).

Observe que as 5 notas serão "lidas" para o vetor de inteiros TabelaNotas. Preste atenção a forma como é indexado o vetor:

            TabelaNotas[i] = teclado.nextInt();

Verifique o uso de colchetes com o índice do elemento que está sendo acessado. Na realidade, o índice pode ser qualquer expressão inteira que resulte em 0 a 4. Um ponto importante a ser observado é que este limite da indexação deve ser respeitado. Vamos a um exemplo que teremos problemas por acesso indevido:

import java.util.Scanner;

public class TabelaNotas {
    public static void main(String[] args) {
        int[]  TabelaNotas = new int[5];
        Scanner teclado = new Scanner(System.in);

        for (int i = 0; i < 5; i++) {
            System.out.println("Entre com a nota do aluno " + i);
            TabelaNotas[i+5] = teclado.nextInt();
        }
        System.out.println("Dados armazenados!!!");
        /* imprimindo os dados lidos... */
        for (int i = 0; i < 5; i++) {
            System.out.println("Nota da posição " + i + " é " + TabelaNotas[i]);
        }
        teclado.close();
    }
}

DISCUSSÃO : Ao tentar executar este código teremos um erro logo de início:

Entre com a nota do aluno 0
9
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
       at TabelaNotas.main(TabelaNotas.java:11)

A instrução:

           TabelaNotas[i+5] = teclado.nextInt();

logo no primeiro laço do loop, quando i estiver em 0, tentará escrever na posição 5 do vetor o que não é permitido pois o vetor não possui eta posição.

Exemplo 2

Vamos a um problema um pouco mais complexo: Implementar um programa Java para ler 5 notas inteirass para um vetor e imprimir a quantidade (o número) de números acima da média.

OBS: Definir um contador, iniciado em zero. Ler os 5 números para um vetor e calcular a media. Fazer um segundo loop sobre o vetor testando cada item para verificar se é maior que a média. Incrementar o contador a cada item acima da média.

Este problema exige que os dados sejam armazenados previamente, de forma que a média calculada possa posteriormente ser usada para a computação da quantidade de números que estão acima da média.

DADOS DE ENTRADA: 10 números a serem fornecidos.
DADOS DE SAÍDA: Quantidade de números acima da média.
import java.util.Scanner;

public class NumerosAcimaMedia {
    public static void main(String[] args) {
        int[]  TabelaNotas = new int[5];
        Scanner teclado = new Scanner(System.in);
        double media;
        int somaAc, contAcima;

        for (int i = 0; i < 5; i++) {
            System.out.println("Entre com a nota do aluno " + i);
            TabelaNotas[i] = teclado.nextInt();
        }     
        /* os números já estão no vetor... Vamos calcular a média deles... */
        somaAc = 0;
        for (int i = 0; i < 5; i++) {
            somaAc += TabelaNotas[i];
        }          
        media = (double) somaAc / 5; 
        System.out.println("Media calculada é " + media); 
        /* agora vamos olhar para cada elemento do vetor e contar as ocorrências acima da média */  
        contAcima = 0;
        for (int i = 0; i < 5; i++) {
            if ( TabelaNotas[i] > media )
                contAcima++;
        }    
        System.out.println("Notas acima da média: " + contAcima);         
    }
}