O que são vetores e como são utilizados no Java?

Vetores são estruturas de dados que armazenam usualmente uma quantidade fixa de dados de um certo tipo; por esta razão, também são conhecidos como estruturas homogêneas de dados.

Internamente, um vetor armazena diversos valores, cada um associado a um número que se refere à posição de armazenamento, e é conhecido como índice. Os vetores são estruturas indexadas, em que cada valor que pode ser armazenado em uma certa posição (índice) é chamado de elemento do vetor.

Cada elemento do vetor pode ser utilizado individualmente de forma direta, ou seja, pode ser lido ou escrito diretamente, sem nenhuma regra ou ordem preestabelecida, fazendo dos vetores estruturas de dados de acesso aleatório.O número de posições de um vetor corresponde ao tamanho que ele tem; assim, um vetor de tamanho 10 tem esse número de elementos, isto é, pode armazenar até dez elementos distintos. Os diferentes elementos de um vetor são distinguidos unicamente pela posição que ocupam no vetor. Cada posição de um vetor é unicamente identificada por um valor inteiro positivo, linear e sequencialmente numerado.

a[i], corresponde ao i-ésimo elemento do vetor a, sendo que o valor da variável i deve pertencer ao intervalo dos índices do vetor: ((i >= 0) && (i < a.length)).

O Java como as linguagens C e C++ são linguagens com vetores zero-based, isto é, as posições do vetor iniciam a numeração a partir do valor 0, portanto, um vetor de tamanho 10 teria índices iniciados em 0 prosseguindo até o 9.

Entenda como funciona o JAVA neste vídeo

Declarando Variáveis do Tipo Vetor

Na declaração de vetores deverão ser fornecidas três informações: 1) o nome do vetor, 2) o número de posições do vetor (seu tamanho), e 3) o tipo de dado que será armazenado no vetor. A declaração de um vetor para "inteiros", de nome "vetor", em Java:

int vetor[]; // declaração do vetor

Podemos notar que as declarações de vetores são semelhantes às declarações de variáveis, os elementos sintáticos que diferenciam as variáveis do tipo vetor das outras variáveis são os colchetes. Embora declarado, o vetor não está pronto para uso, sendo necessário reservar espaço para seus elementos (uma operação de alocação de memória).

vetor = new int[10]; // alocação de espaço para vetor

Na alocação de espaço, não repetimos os colchetes e utilizamos o operador new (uma palavra reservada da linguagem) para reservar espaço para 10 (dez) elementos do tipo int.

As duas declarações podem ser combinadas em um única, mais compacta:

int vetor[] = new int[10]; // declaração combinada

Exemplos de Declarações de Variáveis do Tipo Vetor

Na linguagem Java um vetor é uma "classe, portanto, deve-se utilizar o método new , que ativa o método construtor correspondente, para criar instâncias, ou exemplares, da classe vetor do tipo selecionado (int, double, float, char, String, entre outros), por exemplo:

a) declarando um vetor para armazenar 10 números inteiros

int nro = new int[10];

b) declarando um vetor para armazenar 10 valores do tipo real (ou monetários)

double salario = new double[10];

c) declarando um vetor para armazenar o nome dos 12 meses do ano

String mes = new String[12];

Em síntese

int n = 10; // tamanho do vetor
int v[] = new int[n]; // declaração e alocação de espaço para o vetor "v"
int i; // índice ou posição

// processando os "n" elementos do vetor "v"
for (i=0; i<n; i++) {
  v[i] = i; // na i-ésima posição do vetor "v" armazena o valor da variável "i"
}

Representação interna:

v[0]v[1]v[2]v[3]v[4]v[5]v[6]v[7]v[8]v[9]
0123456789

Aplicação Java exemplificando a utilização do tipo de dados vetor:

import java.util.Scanner;

public class Exemplo1 {

  public static void main(String[] args) {
    Scanner ler = new Scanner(System.in);

    int n = 10; // tamanho do vetor
    int v[] = new int[n]; // declaração do vetor "v"
    int i; // índice ou posição

// Entrada de Dados
    for (i=0; i<n; i++) {
      System.out.printf("Informe %2do. valor de %d: ", (i+1), n);
      v[i] = ler.nextInt();
    }

// Processamento: somar todos os valores, definir o maior e o menor valor
    int soma = 0;
    int menor = v[0]; // v[0] = 1o. valor armazenador no vetor "v"
    int maior = v[0];
    for (i=0; i<n; i++) {
      soma = soma + v[i];

      if (v[i] < menor)
         menor = v[i];

      if (v[i] > maior)
         maior = v[i];
    }

// Saída (resultados)
    System.out.printf("\n");
    for (i=0; i<n; i++) {
      if (v[i] == menor)
        System.out.printf("v[%d] = %2d <--- menor valor\n", i, v[i]);
      else if (v[i] == maior)
              System.out.printf("v[%d] = %2d <--- maior valor\n", i, v[i]);
           else System.out.printf("v[%d] = %2d\n", i, v[i]);
    }

    System.out.printf("\nSoma = %d\n", soma);
  }

}

Executando a aplicação tem-se os seguintes resultados:

Vetores em Java

A classe Math contém diversos métodos estáticos (não exige uma instância da classe para utilização) destinados a operações numéricas, citando:

  • static double random(): retorna um valor, do tipo double, "aleatório" no intervalo de 0.0 até 1.0;
  • static long round(double): retorna um número do tipo long mais próximo (ou arredondado) do valor do tipo double do argumento.

A utilização combinada dos métodos "random" e "round" possibilita a geração de números aleatórios, como por exemplo:

a[i] = (int)Math.round(Math.random() * 10); 
// gera um número inteiro aleatório no intervalo de 0 até 10

Entendendo a atribuição:

  • Math.random() retorna um número aleatório, do tipo double, no intervalo de 0.0 até 1.0;
  • Math.random() * 10 tem como resultado um número no intervalo de 0.0 até 10.0;
  • Math.round(Math.random() * 10) retorna um número do tipo long mais próximo (ou arredondado) do resultado;
  • (int) faz a conversão (ou coerção, em inglês "cast") do tipo long para o tipo int.
A aplicação Java a seguir implementa o método de ordenação por seleção ou Selection Sort:
Selection Sort em Java

Inicialização de vetores

Java permite a inicialização de vetores no momento da declaração, por exemplo:

String nome[] = {"Juca Bala", "Maria da Silva", "Marcos Paqueta"};

Isso significa que nome[0] terá o valor Juca Bala, nome[1] terá o valor Maria da Silva, nome[2] terá o valor Marcos Paqueta. Nota-se que não é necessário indicar o tamanho do vetor e também fazer a alocação de espaço através do operador new. O tamanho do vetor será conhecido através do campo length como mostra a aplicação a seguir:

Exemplo de uso do campo length

A inicialização de vetores na declaração também permite indexar valores predefinidos como no caso das informações relacionadas aos meses do ano. Veja um exemplo na próxima aplicação Java:

Indexando valores predefinidos

Estrutura for aprimorada

Utilizada para percorrer os elementos de um vetor sem utilizar um contador:

for (parâmetro: nomeDoVetor) {
   instrução;
}

Onde "parâmetro" tem duas partes: a) um tipo (deve corresponder ao tipo dos elementos no vetor), e b) um identificador, por exemplo: int nro.

O identificador representa os valores sucessivos do vetor nas sucessivas iterações da instrução for. Veja um exemplo na próxima aplicação Java:

Uso da estrutura for aprimorada

Parte II

cup

Veja abaixo a segunda parte do artigo - Agora as partes I a III foram compiladas em um único artigo. Bons estudos :)

Vetores em Java – Parte 2

<

Na primeira parte do artigo sobre Vetores em Java foram apresentadas as características básicas do tipo de dados vetor, como declarar e exemplos de variáveis do tipo vetor e uma aplicação Java exemplificando a utilização de vetores. Nesta segunda parte do artigo serão abordados: números aleatórios, inicialização de vetores com valores predefinidos e a estrutura "for" aprimorada.

A classe Math contém diversos métodos estáticos (não exige uma instância da classe para utilização) destinados a operações numéricas, citando:

  1. static double random(): retorna um valor, do tipo double, "aleatório" no intervalo de 0.0 até 1.0;
  2. static long round(double): retorna um número do tipo long mais próximo (ou arredondado) do valor do tipo double do argumento.

A utilização combinada dos métodos "random" e "round" possibilita a geração de números aleatórios, como por exemplo:

a[i] = (int)Math.round(Math.random() * 10); // gera um número inteiro aleatório no intervalo de 0 até 10

Entendendo a atribuição:

  • Math.random() retorna um número aleatório, do tipo double, no intervalo de 0.0 até 1.0;
  • Math.random() * 10 tem como resultado um número no intervalo de 0.0 até 10.0;
  • Math.round(Math.random() * 10) retorna um número do tipo long mais próximo (ou arredondado) do resultado;
  • (int) faz a conversão (ou coerção, em inglês "cast") do tipo long para o tipo int.
  • A aplicação Java a seguir implementa o método de ordenação por seleção ou Selection Sort:

    Figura 1

    Inicialização de vetores

    Java permite a inicialização de vetores no momento da declaração, por exemplo:

    String nome[] = {"Juca Bala", "Maria da Silva", "Marcos Paqueta"};

    Isso significa que nome[0] terá o valor Juca Bala, nome[1] terá o valor Maria da Silva, nome[2] terá o valor Marcos Paqueta. Nota-se que não é necessário indicar o tamanho do vetor e também fazer a alocação de espaço através do operador new. O tamanho do vetor será conhecido através do campo length como mostra a aplicação a seguir:

    Figura 2

    A inicialização de vetores na declaração também permite indexar valores predefinidos como no caso das informações relacionadas aos meses do ano. Veja um exemplo na próxima aplicação Java:

    Figura 3

    Estrutura for aprimorada

    Utilizada para percorrer os elementos de um vetor sem utilizar um contador:

    for (parâmetro: nomeDoVetor) {
       instrução;
    }

    Onde "parâmetro" tem duas partes: a) um tipo (deve corresponder ao tipo dos elementos no vetor), e b) um identificador, por exemplo: int nro.

    O identificador representa os valores sucessivos do vetor nas sucessivas iterações da instrução for. Veja um exemplo na próxima aplicação Java:

    Figura 4

    Com este artigo concluímos nossa abordagem sobre vetores unidimensionais em Java.

    Parte III

    cup

    Veja abaixo a segunda parte do artigo - Agora as partes I a III foram compiladas em um único artigo. Bons estudos :)

    Vetores em Java – Parte 3

    Nos dois primeiros artigos sobre Vetores em Java foram abordados os vetores unidimensionais. Neste terceiro e último artigo serão abordados os vetores bidimensionais ou matrizes.

    Vetores bidimensionais (ou matrizes)

    A linguagem Java não fornece vetores multidimensionais, mas como um vetor pode ser declarado e ter qualquer tipo de base, é possível criar vetores de vetores (de vetores etc.), alcançando assim o mesmo efeito.

    A declaração de um vetor bidimensional para inteiros, de nome "m" em Java:

    int m[][] = new int[2][4]; // matriz com 2 linhas X 4 colunas
    Representação interna:
    m[0][0] m[0][1] m[0][2] m[0][3]
    m[1][0] m[1][1] m[1][2] m[1][3]

    Fazendo referência a um elemento do vetor bidimensional:

    m[0][2] = 0; // elemento da primeira linha, terceira coluna
    // ou ainda, terceiro elemento do primeiro vetor
    m[i][j] // elemento da i-ésima linha, j-ésima coluna

    Declarando vetores bidimensionais:

    1) Com expressões de criação de vetores:

    int m[][] = new int[3][3]; // matriz quadrada: 3 linhas X 3 colunas

    2) Declarando e inicializando:

    int m[][] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

    equivale as seguintes atribuições:

    // 1ª linha:
     m[0][0] = 1;
     m[0][1] = 2;
     m[0][2] = 3;
     
     // 2ª linha:
     m[1][0] = 4;
     m[1][1] = 5;
     m[1][2] = 6;
     
     // 3ª linha:
     m[2][0] = 7;
     m[2][1] = 8;
     m[2][2] = 9;

    3) Com linhas de diferentes tamanhos:

    int m[][] = new int[2][];  // cria 2 linhas
     
     m[0] = new int[5];  // cria 5 colunas para a linha 0
     m[1] = new int[3];  // cria 3 colunas para a linha 1

    4) Declarando e inicializando linhas de diferentes tamanhos:

    int m[][] = { {1, 2}, {4, 5, 6, 7, 8}, {9, 10, 11} };

    equivale as seguintes atribuições:

    // 1ª linha com duas colunas:
     m[0][0] = 1;
     m[0][1] = 2;
     
     // 2ª linha com 5 colunas:
     m[1][0] = 4;
     m[1][1] = 5;
     m[1][2] = 6;
     m[1][3] = 7;
     m[1][4] = 8;
     
     // 3ª linha com 3 colunas:
     m[2][0] = 9;
     m[2][1] = 10;
     m[2][2] = 11; 

    Para conhecer os tamanhos dos vetores deve-se utilizar o campo length:

    a) m.length determina o número de linhas

    b) m[i].length determina o número de colunas da i-ésima linha

    Percorrendo vetores bidimensionais com linhas de diferentes tamanhos:

    int m1[][] = { {1, 2, 3, 4}, {5, 6} };
     int m2[][] = { {1, 2}, {3}, {4, 5, 6} };
         m.length
     m[i].length determina o número de linhas
     determina o número de colunas da i-ésima linha   
     int i, j;
     for (i=0; i<m.length; i++) {
        System.out.printf("%da. linha: ", (i+1));
        for (j=0; j<m[i].length; j++) {
           System.out.printf("%d ", m[i][j]);
        }
        System.out.printf("\n");
     }

    Resultado com "m1":
    1a. linha: 1 2 3 4
    2a. linha: 5 6

    Resultado com "m2":
    1a. linha: 1 2
    2a. linha: 3
    3a. linha: 4 5 6

    Exemplos de aplicações Java utilizando vetores bidimensionais ou matrizes

    import java.util.Scanner;
    
    public class Matriz1 {
      public static void main(String[] args) {
        Scanner ler = new Scanner(System.in);
        int i, j, m[][] = new int[2][4];
    
        for (i=0; i<2; i++) {
          System.out.printf("Informe os elementos %da. linha:\n", (i+1));
          for (j=0; j<4; j++) {
            System.out.printf("m[%d][%d] = ", i, j);
            m[i][j] = ler.nextInt();
          }
          System.out.printf("\n");
        }
    
        System.out.printf("\n");
        for (i=0; i<2; i++) {
          System.out.printf("%da. linha: ", (i+1));
          for (j=0; j<4; j++) {
            System.out.printf("%d ", m[i][j]);
          }
          System.out.printf("\n");
        }
      }
    }

    Listagem 1- Alimentando e mostrando os valores de uma matriz 2 X 4.

    public class Matriz2 {
      public static void main(String[] args) {
        int n = 6;
        int i, j, m[][] = new int[n][n];
    
        for (i=0; i      for (j=0; j        if (i == j) // diagonal principal
               m[i][j] = 0;
            else if ((i+j) == (n-1)) // diagonal secundária
                    m[i][j] = 1;
    // sorteia um número aleatório no intervalo de 2 até 5
                 else m[i][j] = (int)(Math.round(Math.random() * 2) + 3); //
          }
        }
    
        for (i=0; i      System.out.printf("%da. linha: ", (i+1));
          for (j=0; j        System.out.printf("%d ", m[i][j]);
          }
          System.out.printf("\n");
        }
      }
    }

    Listagem 2- Matriz quadrada: diagonal principal e diagonal secundária.

    Listagem 1:

    Matriz 1

    Listagem 2:

    Matriz 2
    Referência
    Peter Jandl Junior. Introdução ao Java. São Paulo: Berkeley - 2002.

    Com este terceiro artigo concluímos nossa abordagem sobre vetores em Java.

    Obrigado e um abraço.

    Links Úteis

    • Java 7:
      Site com informações sobre o lançamento do Java 7
    • JavaFX:
      Site para fazer download de aplicações JavaFX
    • JFXtras:
      Site do projeto JFXtras

    Saiba mais sobre Java ;)

    • O Que é JPA?:
      Dominar a persistência de dados é uma necessidade indispensável aos programadores. Sem esse conhecimento nossas aplicações não terão a capacidade de armazenar e recuperar os dados por ela manipulados.
    • Preparando o ambiente para programar em Java:
      Neste curso você aprenderá a preparar seu ambiente para programar em Java. Veremos aqui o que é necessário instalar e como proceder para desenvolver aplicações com essa linguagem.
    • Criando meu primeiro projeto no Java:
      Neste curso você aprenderá a criar o seu primeiro programa com Java, e não, ele não será um simples “Hello, World!”. :) Para isso, vamos começar ensinando como instalar o Java e preparar o ambiente de desenvolvimento.