Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?
Mostrando postagens com marcador Estrutura de dados. Mostrar todas as postagens
Mostrando postagens com marcador Estrutura de dados. Mostrar todas as postagens

Tutorial de Java - Array e ArrayList

Se você notar bem em nossos tutoriais passados de Java, sempre criamos algumas variáveis, geralmente não muitas. Raramente usamos mais de 10 variáveis.
Isso é normal, principalmente em tutoriais mais básicos, já que estamos no início de nosso curso.

Porém, quando você se tornar profissional irá trabalhar em grandes empresas, com dezenas ou centenas de funcionários. Talvez tenha que fazer um sistema em Java para uma escola, com milhares de alunos, ou criar um banco de dados com milhares de produtos de um supermercado.

E aí haja criatividade para criar milhares de variáveis, haja tempo para fazer isso, e o principal: haja paciência e calma para não se perder no meio de tantas declarações, correto?
Errado.

A programação serve para facilitar nossas vidas. Criar centenas ou milhares de variáveis, uma por uma, é algo totalmente absurdo e desnecessário.

Nesta seção de nosso curso iremos aprender a manipular diversas variáveis, dezenas, centenas, milhares, milhões ou quantas mais você desejar, de uma maneira bem simples e lógica.
Você verá como é simples e extremamente útil dominar a programação com Arrays e ArrayLists, pois estas classes nos permitirão manipular uma quantidade gigantes de dados, nos permite achar dados, organizar, criar filas, fazer cálculos e outras particularidades que não são possíveis de se fazer 'na mão'.

Podemos dizer que há dois propósitos básicos nos computadores: fazer cálculos e trabalhar com quantidades de informações que um ser humano jamais poderia trabalhar. E é isso que iremos aprender nestes tutoriais.

Tutorial de Java - Array e ArrayList


00. Introdução ao estudo de estrutura de dados em Java: Array, ArrayList, Listas, Filas e Pilhas
01. Arrays (ou vetores): como declarar, usar e acessar seus elementos
      Vídeo-aula: Arrays
02. Foreach: O laço for para Arrays
03. Array multidimensional ou Matriz: um Array de arrays
      Vídeo-aula: Matrizes ou Arrays Multidimensionais
04. Arrays em métodos: passagem por valor e passagem por referência
05. Classe Arrays (Arrays Class): aprenda a manusear (copiar, ordenar, buscar e manipular) Arrays
06. ArrayList: para que serve e como usar os principais métodos da ArrayList em Java
      Vídeo-aula: Como usar ArrayList
Apostila Caelum resolvida: Capítulo 5 - Um pouco de Arrays

Jogo usando if else, métodos, arrays, arrays multidimensionais e laços.
Jogo: Batalha Naval em Java [modo texto - humano x computador]


Como ser um excelente programador


Antes, gostaríamos de sugerir o nosso texto 'Como ser um excelente programador', nele a gente vai te orientar sobre o que estudar, como estudar, o que é importante, quais linguagens é bom saber, qual a melhor, como entrar no mercado do trabalho, como se portar numa entrevista de emprego e a característica mais importante que um programador deve ter.

Acesse nossa apostila para ler:




Como usar ArrayList em Java: principais métodos

Até o momento, nessa seção de Estrutura de Dados de nosso curso de Java, vimos o quão útil são os arrays e as operações que podemos fazer com esses arrays, também conhecidos por vetores.
Porém, há um grande problema neles: são estáticos. Ou seja, tem tamanho definido, não podemos adicionar nem excluir nada neles, o que é bastante incômodo e faz com que arrays em Java sejam limitados.

E por que arrays não são muito úteis?
Porque na vida real as coisas não são assim estáticas, elas mudam. O número de funcionários de um empresa tendem a crescer, em uma faculdade alunos se formam e outros se matriculam, em um jogo de RPG vamos colecionando ítens no decorrer do jogo, ao passo que vamos usando outros.

Agora, nesse tutorial do curso Java Progressivo, vamos aprender como usar os ArrayList, que são arrays mais 'flexíveis', ou dinâmicos, já que podemos adicionar ou retirar elementos, além de fazer outras coisas que não são possíveis com os Arrays.


Classe Arrays (Arrays Class): aprenda a manusear (copiar, ordenar, buscar e manipular) Arrays

Uma das grandes vantagens de se programar em Java é que ele nos fornece uma quantidade enorme de APIs. Ou seja, o Java já vem com diversas classes e métodos prontos para serem usados.

Nesse tutorial de nosso curso de Java iremos aprender a usar a Classe Arrays bem como seus principais métodos, que ordenam, comparam, buscam, colocam elementos nos Arrays/vetores dentre outras séries de utilidades.

Jogo: Batalha Naval em Java

Curso Java Progressivo - Como fazer o jogo Batalha Naval em Java

  • Java Progressivo em PDF(download da Apostila)
Agora que aprendemos como passar arrays (de qualquer dimensão) para métodos, já podemos fazer algo mais útil. Vamos fazer o famoso batalha naval, no modo texto.

Usaremos tudo que aprendemos até o momento em nosso curso de Java: if else, laço do while, laço for, métodos, números aleatórios, arrays, arrays multidimensionais e muita criatividade.

Arrays em métodos: passagem por valor e passagem por referência

Vimos em nosso curso de Java uma seção só para métodos, e estamos em outra seção da apostila só para arrays.
São duas coisas importantes, e a interação entre elas também é importante.
Porém, há alguns detalhes que precisam ser esclarecidos e comentados, que veremos agora neste artigo.

Array Multidimensional ou Matriz: Array de arrays

Já vimos no capítulo passado de nossa apostila que um array é um conjunto de variáveis do mesmo tipo.

Porém, poderíamos também declarar um conjunto de arrays. Nesse caso, teríamos um array multidimensional ou vetor multidimensional, também conhecido por matrizes.


Matrizes ou Vetores multidimensionais: Conjunto de vetores ou arrays em Java

Imagine a situação que vinhamos usando como em exemplo em nossa apostila online Java Progressivo, o exemplo dos dados dos alunos de uma escola.
Ora, um aluno faz várias provas todos os anos.

Vamos supor que ele faz 10 provas por ano. Como você já é um sábio programador Java, não vai declarar 10 floats para armazenar as 10 notas. Vai declarar um array de 10 elementos floats.

Porém, existem várias matérias no colégio: Matemáticas, Física, Química, Biologia etc.
Vamos supor que existam 10.
E aí, vai declarar 10 vetores/arrays ?
Claro que não, isso seria muito cansativo.
Declare um array de arrays.

Arrays de uma ou mais dimensões em Java

Nos exemplos passados, declaramos apenas um bloco de variáveis. Dizemos que esse vetor é unidimensional, pois é somente um bloco.
Veja tal array/vetor apenas como uma linha, assim terá a noção de dimensão.
Por exemplo, vamos declarar um array unidimensional com 5 notas de Matemática:
int[] notas = {8.0 , 7.5, 8.5 , 9.0 , 8.0};

Essa nota pode ser representada por uma matriz 1x5, ou seja, uma linha e 5 colunas:
8.0 7.5 8.5 9.0 8.0


Agora vamos representar as notas em Física, abaixo das de Matemática. Teremos uma matriz 2x5, ou seja, uma matriz de duas linhas e 5 colunas:
8.0 7.5 8.5 9.0 8.0
8.9 9.0 8.6 8.4 8.0


Agora vamos representar as notas de Química, abaixo das notas de Física.
Teremos uma matriz 3x5, ou seja, uma matriz de três linhas e 5 colunas:
8.0 7.5 8.5 9.0 8.0
8.9 9.0 8.6 8.4 8.0
6.8 7.1 7.0 7.6 6.5


Matrizes: declarando vetores/arrays multidimensionais em Java


A sintaxe é exatamente a mesma do array normal, a diferença está no número de colchetes '[]' que irmos usar.
No caso, usamos um par para cada dimensão.

Por exemplo, para declarar a matriz 2x5 do exemplo anterior:
float[][] notas = new float[2][5];

Ou
float[][] notas = { {8.0, 7.5, 8.5, 9.0, 8.0 }, {8.9, 9.0, 8.6, 8.4, 8.0 } };


Para declarar a matriz 3x5 do exemplo anterior:
float[][] notas = new float[3][5];

Ou
float[][] notas = { {8.0, 7.5, 8.5, 9.0, 8.0 }, {8.9, 9.0, 8.6, 8.4, 8.0 }, {6.8, 7.1, 7.0, 7.6, 6.5 } };

Note que notas[0] se refere ao array de notas de Matemática.
Note que notas[1] se refere ao array de notas de Física.
Note que notas[2] se refere ao array de notas de Química.

Por exemplo: qual foi a quarta nota de Física do aluno?
Ora, o vetor de Física é notas[1], e a quarta nota é o elemento [3] desse array.
Então a quarta nota de Física do aluno está armazenada em: nota[1][3], que é 8.4



Exemplos de códigos:

Como de costume, em nossa apostila do curso Java Progressivo, vamos apresentar dois exemplos de como usar os arrays dimensionais, ou matrizes, em Java.

Exemplo 1: Crie um aplicativo em Java que peça ao usuário para preencher uma matriz 3x3 com valores inteiros e depois exiba essa matriz.

A grande novidade, e importância, nesse tipo de aplicativo são os laços for aninhados, ou seja, um dentro do outro.
Primeiro criamos um laço que vai percorrer todas as linhas da matriz. Podemos, e devemos, ver cada linha como um vetor de 3 elementos.
Dentro de cada linha, temos que percorrer cada elemento do array e fornecer seu valor. Fazemos isso através de outro laço for, que ficará responsável pelas 'colunas', formando nossos laços aninhados.

Para imprimir, o esquema é exatamente o mesmo. Imprimimos linha por linha, e em cada linha, imprimimos coluna por coluna.


import java.util.Scanner;

public class matrizTeste {
    
    public static void main(String[] args){
            int[][] matriz = new int[3][3];
            
            Scanner entrada = new Scanner(System.in);
            System.out.println("Matriz M[3][3]\n");
            
            for(int linha=0 ; linha < 3 ; linha++){
                for(int coluna = 0; coluna < 3 ; coluna ++){
                    System.out.printf("Insira o elemento M[%d][%d]: ",linha+1,coluna+1);
                    matriz[linha][coluna]=entrada.nextInt();
                }
            }
            
            System.out.println("\nA Matriz ficou: \n");
            for(int linha=0 ; linha < 3 ; linha++){
                for(int coluna = 0; coluna < 3 ; coluna ++){
                    System.out.printf("\t %d \t",matriz[linha][coluna]);
                }
                System.out.println();
            }
           
        }


}


Exemplo 2: Crie um aplicativo em Java que peça ao usuário para preencher uma matriz 3x2 com valores inteiros e depois exiba essa matriz.

No exemplo passado, o número de linhas era igual ao número de colunas, da matriz. Vamos usar um exemplo diferente, para você fixar seu conhecimento em arrays multidimensionais.

Como dito no começo, uma matriz, array multidimensional ou vetor multidimensional nada mais é que um conjunto de arrays ou conjunto de vetores, array de arrays.

Quando fazemos: int[5] para declarar um array de inteiros, estamos declarando 5 variáveis do tipo inteiro.
Quando fazemos: int[10][5], estamos declarando 10 arrays, e em cada array desses existem 5 inteiros. Ou seja, 10 arrays do tipo do exemplo passado. Logo, o tamanho desse array – length – é 10.
Você pode obter isso com o comando: array.length

Assim, uma matriz 3x2 tem tamanho 3.
Uma 4x3 tem tamanho 4, uma 10x123123 tem tamanho 10 etc.
Ou seja, o length de arrays multidimensionais é o número de linhas.

Vamos usar esse fato nos laços:
import java.util.Scanner;

public class matrizTeste2 {
    
    public static void main(String[] args){
        int[][] matriz = new int[3][2];
        
        Scanner entrada = new Scanner(System.in);
        System.out.println("Matriz M[3][2]\n");
        
        for(int linha=0 ; linha < 3 ; linha++){
            for(int coluna = 0; coluna < 2 ; coluna ++){
                System.out.printf("Insira o elemento M[%d][%d]: ",linha+1,coluna+1);
                matriz[linha][coluna]=entrada.nextInt();
            }
        }
        
        System.out.println("\nA Matriz ficou: \n");
        for(int linha=0 ; linha < 3 ; linha++){
            for(int coluna = 0; coluna < 2 ; coluna ++){
                System.out.printf("\t %d \t",matriz[linha][coluna]);
            }
            System.out.println();
        }
       
    }

}

O laço for para Arrays: o laço For each

Em toda sua vida de programador Java, será comum você usar o laço for para percorrer todos os elementos de um Array.

Se isso é tão utilizado e importante, poderia ter um atalho ou meio mais fácil de fazer isso, não?
É, e tem.
Sem contar que, com Arrays e o laço for convencional, é bem fácil de se enrolar e cometer erros.

Aprenda uma maneira especial de usar o laço for e pare de ter problemas: é laço foreach

Fazendo o for percorrer todo o Array/Vetor

A utilização é bem simples e direta. Vamos usar essa variante do for que percorre sempre, do começo ao fim, todos os elementos de um Array.
É bem útil, também, em termos de precaução e organização, pois alguns programadores não gostam de usar o índice 0, usam direto o índice 1 do array, ou as vezes nos confundimos e passamos (durante as iterações) do limite do array. Isso pode ser facilmente evitado usando o laço for modificado para percorrer os elementos de um array.

A sintaxe do for each é a seguinte:
for ( tipo variavel_do_tipo_do_seuArray : seuArray){
//seu código
}

Se o 'seuArray' for de inteiro, ficaria:
for (int count : seuArray){
...
}

Como podemos interpretar esse laço foreach?
Muito simples, o inteiro 'count' vai receber, a cada iteração, todos os valores de 'seuArray'.
Ou seja, ele vai percorrer todo o seu Array e receber seus valores, na ordem (do começo para o fim), um por vez. E com esses valores você vai fazer o que desejar.

Por exemplo, suponha que as notas de cada aluno de uma escola é armazenada em um Array.
Como para calcular a média você precisará sempre percorrer todo o Array/Vetor, pode, e deve-se, usar esse laço for especial. Pois ele foi feito para isso, para facilitar nossa vida.

Programadores não devem perder tempo. Devem fazer as coisas sempre da maneira mais simples e prática possível. Não tente fazer arte ou gambiarra.
Se o próprio Java lhe fornece as opções e ferramentas, use-as.

É uma arma 'especial' que não se vê por aí, em qualquer linguagem de programação.
Se você já programa ou programou em outra linguagem deve estar percebendo como Java é cheio dessas ferramentas e pormenores.
Se estudar tudo direitinho, irá se tornar um eficiente programador, pois o Java realmente foi feito para facilitar a vida de desenvolvedores, é realmente uma linguagem voltada para o trabalho.

Exemplo de uso do foreach em Java:

Crie um aplicativo em Java que peça 5 números ao usuário.
Depois, mostre o resultado da soma desses números;

Passo 1:
Vamos declarar o vetor de inteiro e o inteiro 'soma' para receber a soma dos resultados que o usuário fornecer.

Usamos um laço for, convencional, para percorrer o array.
Note que usamos 'numero.length', que é uma boa prática.

Passo 2:
Agora temos que percorrer o array inteiro, e já que temos que fazer isso, vamos fazer usando o laço for modificado que percorre um array inteiro recebendo seus valores.
Como o inteiro 'cont' vai receber os dados de todos os elementos do array 'numero', vamos somar o valor de 'cont' a cada iteração na variável 'soma'.

O código Java de nossa aplicação ficará:


import java.util.Scanner;

public class forParaArray {
    
    public static void main(String[] args){
            int[] numero = new int[5];
            int soma=0;
            Scanner entrada = new Scanner(System.in);
            
            for(int cont=0 ; cont< numero.length ; cont++){
                System.out.print("Entre com o número "+(cont+1)+": ");
                numero[cont]=entrada.nextInt();
            }
            
            //exibindo e somando
            for(int cont : numero){
                soma += cont;
            }
            
            System.out.println("A soma dos números que você digitou é "+soma);
        }
}



Arrays: como declarar, usar e acessar os elementos de um array

Nesse artigo introdutório de Arrays de nossa apostila Java Progressivo, você irá aprender como declarar e usar os Arrays, ou vetores, em Java.

Aprenderá, também, a importante notação dos colchetes, [], que vamos usar para tratar dos membros de um Array, bem como acessar os elementos através desses colchetes.


Introdução aos tipos de Estrutura de Dados em Java

Até o momento, em nossa apostila online Java Progressivo, vinhamos declarando os tipos um por um, notou?
Talvez não, pois é algo normal para você.

Imagine a seguinte situação: você foi contratado para criar um aplicativo Java para um colégio, de mais de 2mil alunos.
Entre outras coisas, vai ter que criar tipos - float, provavelmente - , para armazenar as notas dos alunos, inteiros para armazenar as faltas, strings para os nomes etc.

E aí, vai declarar milhares de variáveis? Uma por uma?
Não! Aprenda estrutura de dados.



Estrutura de dados em Java

Uma das grandes utilidades dos programas, em Java por exemplo, é poder tratar grandes quantidades de informações.

Já imaginou quantos floats, inteiros e strings são declarados nos softwares do governo brasileiro?
Milhões? Claro que não. Milhões é só o número de habitantes.
Cada habitante tem seu nome, cpf, RG, endereço, impostos, ficha criminal, de saúde, de emprego etc etc.

Já pensou como manipular tudo isso?
Até o momento, no curso Java Progressivo, estávamos declarando variável por variável. Obviamente que em uma aplicação como a do governo isso é humanamente impossível.

Aliás, nem precisa ser de um governo. Os dados de uma empresa de médio porte já são grandes o suficiente para não ser possível a criação de cada variável 'manualmente'.

Para isso, usamos meios especiais, as estrutura de dados, como os arrays (também conhecidos como vetores), arraylists, listas, filas e pilhas.

Estrutura de dados em Java: Array e ArrayList

Nesta seção de estrutura de dados, vamos dar uma introdução as tão importantes ferramentas para se trabalhar com muitos dados e informações.

Saiba sobre os tipos de estrutura de dados em Java: Array, ArrayList, Listas, Filas e Pilhas.De uma maneira simples, podemos definir os Array - ou vetor- e ArrayList como um conjunto de variáveis do mesmo tipo.
Em vez de declarar um tijolo por vez, vamos usar Arrays para declarar uma parede, com vários blocos de tijolos iguais, uma única vez.
Por exemplo, em vez de declararmos vários inteiros, um por um, até termos declarado 50 variáveis inteiras, vamos usar Array para declarar um bloco de 50 variáveis, todas do mesmo tipo e enumeradas de forma seqüencial.

Array é simplesmente isso. Um bloco de variáveis do mesmo tipo enumeradas em seqüência.
ArrayList são Arrays mais potentes, ou seja, são Arrays mas com utilidades (e complexidade) a mais.
Não entraremos mais em detalhes sobre Array e ArrayList pois esta seção é dedicada ao seu estudo.

Vamos falar um pouco sobre as outras estruturas de dados, que serão tratadas ao longo do curso, em outras seções do site:


Estrutura de dados em Java: Lista

Saiba sobre os tipos de estrutura de dados em Java: Array, ArrayList, Listas, Filas e Pilhas.Imagine uma lista, uma lista qualquer. A lista telefônica, por exemplo.
Ela é um registro (e que registro) de dados.
Como funciona? Como você usa?

Não há meio certo para se usar. Você pode usar o começo da lista, o meio ou fim, ir e voltar.
É simplesmente uma lista, uma exposição de informação ao seu dispor.
Assim será em Java.




Estrutura de dados em Java: Fila

Saiba sobre os tipos de estrutura de dados em Java: Array, ArrayList, Listas, Filas e Pilhas.Imagine uma fila de banco.
Como ela funciona? (Na verdade, como ela deveria funcionar)
De qualquer jeito, como uma 'lista'?

Claro que não. Na fila, quem estiver na frente é atendido primeiro.
Assim será na programação Java para estrutura de dados.

Quando seus dados estiverem sob essa estrutura, as informações que estão na cabeça da fila serão tratadas primeiro, assim como as pessoas que estão na cabeça de uma fila de banco seriam atendidas primeiro.



Saiba sobre os tipos de estrutura de dados em Java: Array, ArrayList, Listas, Filas e Pilhas.Estrutura de dados em Java: Pilha

Agora imagine uma pilha de pratos.
Você comeu uma lasanha, e guardou o prato.
Depois uma macarronada, e guardou o prato.
Por fim, você comeu uma salada e guardou o prato.

Agora você tem uma fila de pratos, que vai levar para a pia para lavar.
Qual prato vai lavar primeiro? O primeiro, o da lasanha?
Não! O último, o da salada, que está no topo da pilha.

Assim será em seus aplicativos em Java: nas informações sob estrutura de pilha, as últimas informações (último prato) que chegaram - ou seja, as mais recentes-, serão os primeiros a serem tratadas (primeiros a serem lavados).
Ou seja, é o oposto das filas.
Aqui, os últimos que chegaram serão atendidos. Nas filas, os primeiros que chegaram é que são atendidos.


Com isso, você já tem uma noção sobre estrutura de dados em Java e que há várias maneiras de se ver e de se tratar informações.

Contribuir com o Java Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo