Olá, estudante, tudo bem?
Vamos aprimorar um pouco mais seu conhecimento? Você já compreende e sabe usar os operadores e comandos de entrada e saída de dados e, agora, o objetivo desta lição é lhe apresentar o conceito de vetores e matrizes.
Quando pensamos em um vetor, precisamos ter em mente que ele é uma estrutura de dados fundamental para a programação, que permite armazenar um conjunto de valores do mesmo tipo em uma única variável. Eles são frequentemente referidos como arrays em muitas linguagens de programação — incluindo Java. Cada elemento em um vetor é identificado por um índice, que começa com zero para o primeiro elemento.
Já uma matriz é uma extensão natural de um vetor, em que os elementos são organizados em linhas e colunas. Em outras palavras, é uma estrutura bidimensional que armazena valores em uma grade. Em linguagens, como Java, as matrizes são representadas como arrays de arrays.
Agora que você já sabe qual o propósito da lição de hoje, espero que você esteja pronto para adentrar nesse mundo de posições que é o mundo dos vetores e das matrizes. Tenha certeza de que grande parte do seu dia no trabalho como Técnico em Desenvolvimento de Sistemas será trabalhando com essas estruturas. Pronto? Vamos lá!
Imagine que você está desenvolvendo um sistema de gerenciamento escolar para uma escola com centenas de alunos, e uma das principais tarefas é armazenar e gerenciar as notas dos alunos em diferentes disciplinas. O problema é: como armazenar eficientemente as notas de cada aluno em várias disciplinas e realizar cálculos, como médias e classificações finais, de forma organizada e acessível?
A solução para esse problema é utilizar vetores para alunos. A ideia consiste em utilizar um vetor para armazenar informações individuais de cada aluno. Cada elemento do vetor pode ser uma estrutura de dados que contém o nome, número de identificação e outras informações do aluno. Já em relação à solução para armazenar as notas dos alunos em diferentes disciplinas, você pode utilizar a matriz. Cada linha da matriz representa um aluno e cada coluna representa uma disciplina.
Com essa estrutura, você poderia organizar as informações dos alunos e suas notas de maneira sistemática e eficiente. Além disso, também, é fácil adicionar ou remover alunos e disciplinas, pois os vetores e as matrizes são dimensionados dinamicamente e, ainda, pode-se usar essas estruturas para gerar relatórios, como boletins, classificações finais, gráficos de desempenho etc.
O uso de vetores e matrizes resolve eficazmente o problema de gerenciar dados complexos e estruturados — como notas de alunos em várias disciplinas. Isso torna a programação mais eficiente, organizada e escalável, facilitando o desenvolvimento de sistemas de gerenciamento escolar e muitas outras aplicações.
O case fictício da lição de hoje é sobre um sistema de gerenciamento de estoque para uma grande rede de supermercados. A Rede possui várias filiais e precisa controlar seus produtos em cada loja de forma eficiente. O desafio é manter registros detalhados de todos os produtos, suas quantidades em estoque em cada filial e os preços unitários. Agora, como manter registros precisos e acessíveis de todos os produtos de cada filial dessa rede, permitindo a atualização de estoques, consultas de preços e geração de relatórios de forma eficiente?
Sim, você pensou certo! Esse problema pode ser resolvido por meio de vetores e matrizes! Usando vetores para as filiais, a equipe de desenvolvimento usou um vetor para representar cada filial da rede de supermercados. Cada elemento do vetor contém informações sobre uma filial, como nome, endereço e código. Já para a questão dos produtos, foram usadas as matrizes — no caso, uma matriz bidimensional. Cada linha da matriz representa um produto e cada coluna representa uma filial. Dessa forma, pode-se manter registros de estoque atualizados para todos os produtos em todas as filiais.
Portanto, vemos que o uso de vetores e matrizes simplifica o gerenciamento complexo de estoque em várias filiais, tornando o sistema eficiente, escalável e capaz de fornecer informações atualizadas sobre os produtos em todas as lojas da rede. Isso é essencial para garantir um controle adequado do estoque e uma operação suave dos supermercados. Agora, imagine só a infinidade de situações que podemos aplicar esse conhecimento! Não é à toa que disse a você que grande parte do seu trabalho como Técnico em Desenvolvimento de Sistemas será trabalhando com essas estruturas!
Os vetores, também conhecidos como arrays, são estruturas de dados fundamentais na programação que permitem armazenar um conjunto de valores do mesmo tipo em uma única variável. Eles são uma coleção ordenada de elementos,em que cada elemento é identificado por um índice único. Você pode, também, conhecer a definição de vetor dada por Pereira (2010), que diz que um vetor é um tipo de variável capaz de armazenar uma coleção de dados do mesmo tipo. Veja, a seguir, as características essenciais de vetores:
Tipo de dado homogêneo: todos os elementos do vetor devem ser do mesmo tipo de dado. Por exemplo, um vetor de inteiros só pode conter números inteiros.
Índices: os elementos em um vetor são acessados por meio de índices, que, geralmente, começam em zero para o primeiro elemento.
Tamanho fixo: em muitas linguagens de programação, o tamanho de um vetor é fixo quando ele é declarado. Isso significa que você precisa especificar o tamanho do vetor antes de usá-lo, e ele não pode ser alterado posteriormente.
Matrizes são uma extensão natural de vetores, em que os elementos são organizados em uma grade bidimensional de linhas e colunas. Assim como nos vetores, os elementos em matrizes são acessados usando índices, no entanto, em matrizes, você precisa fornecer dois índices: um para a linha e outro para a coluna. Pereira (2010) define uma matriz como um vetor cujos itens, também, são vetores e que uma matriz pode ter qualquer número de dimensões, mas que as matrizes bidimensionais são as mais usadas. Acompanhe algumas características das matrizes:
Bidimensional: as matrizes têm duas dimensões, representadas por linhas e colunas. Cada elemento em uma matriz é identificado por um par de índices: um para linha e outro para a coluna.
Elementos do mesmo tipo: assim como em vetores, todos os elementos em uma matriz devem ser do mesmo tipo de dado.
Tamanho fixo: o tamanho de uma matriz é especificado quando ela é declarada e não pode ser alterada depois.
Para declarar e inicializar um vetor em Java, você precisa especificar o tipo de dado, seguido pelo nome do vetor e os valores iniciais dentro de chaves ({}). Veja o exemplo a seguir:
int[] vetorDeInteiros = {1, 2, 3, 4, 5}
Você também pode declarar um vetor sem inicializá-lo imediatamente e, posteriormente, atribuir valores aos seus elementos. Por exemplo:
int[] meuVetor;
meuVetor = new int[5];
meuVetor[0] = 10;
meuVetor[1] = 20;
Já para declarar e inicializar uma matriz em Java, você especifica o tipo de dado, seguido pelo nome da matriz, o número de linhas e colunas entre colchetes e os valores iniciais dentro de chaves ({}). Veja o exemplo a seguir:
int[][] matrizDeInteiros = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Nesse exemplo, matrizDeInteiros é uma matriz bidimensional que contém os valores de um a nove, organizados em três linhas e três colunas. Assim como feito com vetores, você, também, pode declarar uma matriz sem inicializá-la imediatamente e, posteriormente, atribuir valores aos seus elementos. Lembre-se de que, em Java, todos os elementos de um vetor ou matriz devem ser do mesmo tipo de dados. Certifique-se de escolher o tipo de dados apropriado ao declarar suas estruturas de dados.
Para acessar elementos em um vetor, você usa um único índice. Os índices, como já foi dito, começam em zero para o primeiro elemento e vão até o tamanho do vetor menos 1. Por exemplo:
int[] vetor = {10, 20, 30}
int primeiroElemento = vetor[0];
int terceiroElemento = vetor[2];
Em matrizes bidimensionais, você precisa especificar dois índices: um para a linha e outro para a coluna. Os índices, também, começam em zero. Por exemplo:
int elementoNaLinha2Coluna3 = matriz[1][2];
Certifique-se de que os índices estejam dentro dos limites da matriz, caso contrário, você receberá um erro.
Em vetores (ou arrays) em Java, você não pode adicionar ou remover elementos de maneira dinâmica, a menos que você crie um novo vetor com o tamanho apropriado e copie os elementos existentes para o novo vetor. Veja, a seguir, exemplos que envolvem essas operações básicas:
Adição de Elementos em Vetores: suponha que você deseje adicionar um elemento a um vetor existente. Primeiro, você cria um novo vetor com um tamanho maior do que o vetor original e, em seguida, copia os elementos existentes e adiciona o novo elemento.
Remoção de Elementos em Vetores: para remover um elemento de um vetor, você faz o oposto. Crie um novo vetor com um tamanho menor, copie os elementos existentes, excluindo o elemento que deseja remover, e atribua o novo vetor ao vetor original.
Para atualizar um elemento em uma matriz, você simplesmente acessa o elemento desejado utilizando os índices apropriados e atribui um novo valor a ele. Da mesma forma, a consulta de elementos em vetores e matrizes é feita simplesmente acessando os elementos usando os índices apropriados. Essa operação de consulta é simples, ou seja, é uma operação direta e não requer nenhuma modificação nos dados. Basta fornecer os índices corretos para obter o valor desejado.
A iteração e os loops são conceitos fundamentais na programação, permitindo que blocos de código sejam executados repetidamente com base em determinadas condições. A iteração refere-se ao processo de repetição de uma sequência de instruções ou código, sendo assim, é uma maneira eficiente de realizar tarefas repetitivas sem a necessidade de duplicar o código. Já os loops são estruturas de controle que permitem a execução repetida de um bloco de código, enquanto uma condição específica for verdadeira, e sua função é ajudar a automatizar tarefas repetitivas. Você pode usar loops, como o for e o foreach (ou for-each), para percorrer vetores e matrizes em Java.
O loop for é útil quando você precisa de mais controle sobre o índice de iteração ou quando deseja percorrer o vetor ou matriz em ordem específica. Veja a Figura 1:
No exemplo anterior, o loop for é usado para percorrer um vetor de inteiros. O índice i é usado para acessar cada elemento do vetor. Você, também, pode usar um loop for para percorrer matrizes bidimensionais:
O loop foreach, também conhecido como loop for-each, é uma forma mais simples e conveniente de percorrer vetores e matrizes, especialmente quando você não precisa do índice de iteração. Veja como usá-lo:
No exemplo anterior, o loop foreach percorre automaticamente todos os elementos do vetor. O loop foreach torna o código mais legível e elimina a necessidade de controlar manualmente os índices de iteração.
ArrayList é uma classe em Java que oferece uma alternativa dinâmica e flexível aos vetores (arrays) tradicionais. Enquanto os vetores têm um tamanho fixo, que deve ser declarado no momento da criação, a ArrayList permite que você trabalhe com coleções de elementos de tamanho variável, que podem crescer ou encolher conforme necessário. É válido destacar as seguintes características de ArrayList:
Tamanho Dinâmico: ao contrário dos vetores, em que o tamanho é fixo, ArrayList pode aumentar ou diminuir de tamanho automaticamente, à medida que você adiciona ou remove elementos.
Métodos de Adição e Remoção: ArrayList fornece métodos convenientes para adicionar elementos (add()) e remover elementos (remove()) da coleção.
Acesso a Elementos: você pode acessar elementos em um ArrayList usando índices, assim como faria com um vetor. Por exemplo, get(índice) é usado para acessar o elemento em determinada posição.
Iteração Simples: ArrayList é, facilmente, iterado usando um loop foreach ou for, permitindo que você percorra todos os elementos da coleção.
Redimensionamento Automático: quando o ArrayList fica cheio, ele, automaticamente, redimensiona para acomodar mais elementos, geralmente, dobrando o tamanho atual. Isso minimiza a sobrecarga de redimensionamento manual.
Veja um exemplo de ArrayList em Java:
É importante mencionar que a ArrayList é uma escolha comum em Java quando você precisa lidar com coleções de elementos que podem crescer ou encolher dinamicamente ao longo do tempo, proporcionando maior flexibilidade do que os vetores comuns. Portanto, ao considerar estruturas de dados em Java, especialmente quando lidamos com situações em que o tamanho da coleção pode mudar dinamicamente, o ArrayList surge como opção valiosa, complementando o uso eficaz de loops e iterações.
O conhecimento em vetores e matrizes é essencial para profissionais técnicos em desenvolvimento de sistemas. Essas estruturas oferecem maneiras eficientes de organizar e manipular dados, permitindo a execução de operações repetitivas e resolução de problemas complexos. Essas habilidades são aplicáveis em diversas linguagens de programação e ambientes de desenvolvimento. No geral, o entendimento sobre vetores e matrizes é fundamental para o sucesso em projetos de software!
Agora que você já compreendeu a importância dos assuntos abordados nesta lição, chegou a hora de colocar a mão na massa. No Saiba Aplicar de hoje, você implementará o código da rede de supermercados do case visto hoje. Para isso, você usará vetores e matrizes. Usando a sua IDE ou o site OnlineGDB (https://www.onlinegdb.com/) implemente o código da Figura 5 a seguir:
Nesse exemplo, a classe GerenciadorEstoque contém vetores e matrizes para manter o controle de produtos e estoques em várias filiais. A classe interna Produto é usada para representar informações sobre cada produto.
Lembre-se de que esse é um exemplo simplificado e pode ser estendido para incluir mais funcionalidades e robustez, como validação de entrada, tratamento de exceções e outros recursos avançados de gerenciamento de estoque.
Você tem, agora, mais especificamente, na linha 40 desse código, um public void static main(String[] args) {} vazio que você pode implementar para utilizar toda a classe ou, até mesmo, podemos utilizar juntos na nossa aula sobre esta lição. Que tal, hein?
PEREIRA, S. L. Algoritmos e lógica de programação em C: uma abordagem didática. 1. São Paulo: Érica, 2010.