Você está na página 1de 9

Definição

Um array, também conhecido outrora como “estrutura homogênea de


dados”, além dos nomes: vetor, matriz, arranjo; é um conjunto de
variáveis de mesmo tipo que atendem todas pelo mesmo nome.

O array é uma estrutura complexa de dados formadas por variáveis


de tipos simples (ou escalares) que podem ser: int, long, float, double,
boolean ou por variáveis de tipos complexos: string, array e classes.

De uma forma geral, as linguagens de programação implementam o


array como blocos contíguos de memória com as variáveis sendo
endereçáveis individualmente por seus índices. Os índices começam
sempre pelo índice 0. Por isso, quando um array tem 10 elementos,
seus índices vão de 0 a 9. Generalizando, se um array tem n elementos,
o primeiro elemento tem índice 0 e o último elemento tem índice n -1. A
figura 1 mostra um diagrama representativo de um array.

1 2 3 4 5 6 7 8 9
0
0 0 0 0 0 0 0 0 0

IdadesDasPessoas
10 elementos
Figura 1. Representação de um array

O diagrama da figura 1 mostra um array chamado IdadesDasPessoas


que possui 10 variáveis (ou 10 posições). Esse array é formado por
variáveis do tipo inteiro que guardam as idades de pessoas. Ele começa
pelo índice 0 e vai até o índice 9 (10 -1).

Arrays no C#

No C#, os arrays podem ser estáticos ou dinâmicos (que veremos


mais adiante).

Um array estático é um array que deve ter um número de variáveis


internas definido e não pode mudar esse número ao longo do programa.
Para criarmos arrays estáticos no C# precisamos primeiramente
declará-los e depois devemos defini-los.

A definição de um array estático se dá da seguinte forma:

<<tipo>>[] <<nome>>;

Por exemplo, o array da figura 1:

int[] IdadesDasPessoas;

Repare nos colchetes logo após o tipo int. Eles indicam que não será
criada uma variável inteira, mas sim um array de variáveis inteiras.

Para definir um array devemos criar um objeto de array utilizando a


palavra reservada new e indicando o tamanho (quantidade de
elementos do array). Veja:

<<nome>> = new <<tipo>>[<<tamanho>>];

Por exemplo, para o array da figura 1:

IdadesDasPessoas = new int[10];

O que fizemos foi associar um novo (new) array de inteiros, formados


por 10 variáveis (tamanho) e associá-lo à variável IdadesDasPessoas.
Agora podemos utilizar esse array para guardar as idades das pessoas.

Utilização de um array estático


Vamos criar um programinha bem simples para exemplificar o uso do
array estático.

Abra o Visual Studio e crie um novo projeto do tipo Windows


Application. Vamos chamar esse projeto de ExemploArray1. A figura 2
mostra o criação do projeto.

Vamos criar uma interface com usuário para o nosso projeto que é
mostrada na figura 3. Veja que utilizamos controles bem simples:
botões (buttons), rótulos (labels), caixas de textos (textbox) e um
agrupador (groupbox).
Figura 2. Criação do projeto ExemploArray1

Figura 3. A interface do ExemploArray1

Vamos entender o que o aplicativo ExemploArray1 faz para depois


podermos implementá-lo.
1. Em primeiro lugar, precisamos, antes de utilizar um array,
declará-lo e defini-lo.

2. Criado o array, é importante “limpá-lo”, ou seja, inicializar suas


variáveis internas com algum valor (em geral 0).

3. Depois podemos preencher cada posição (variável) do array com


um valor de idade.

4. A qualquer momento podemos visualizar o array.

Para declarar e definir o array faremos o seguinte. Peça a visualização


de código do form1.cs (botão View Code da seção Solution Explorer). O
código abaixo mostra as modificações feitas para declarar e definir o
array.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ExemploArray1
{
public partial class Form1 : Form
{
private int[] IdadesDasPessoas;

public Form1()
{
InitializeComponent();

IdadesDasPessoas = new int[10];


}
}
}

Observe que a declaração foi feita dentro da classe Form1. O que


significa que o array é um atributo da classe Form1. A definição foi feita
dentro do método construtor da classe Form1. Esse é um ótimo lugar
para colocar comandos de criação de objetos para atributos da classe,
que é o caso da definição do array.

Com isso já atingimos o objetivo 1 do nosso programa. Agora como


devemos proceder para “limpar” o array? Para cada variável dentro do
array devemos preenchê-la com o valor 0. E como se faz isso?
Acesso a elementos do array
Vimos que um array é um conjunto de variáveis que possuem um único
nome. Mas se todos têm o mesmo nome, como podemos acessar uma
posição (variável interna) do array?

Para isso utilizamos o índice da variável interna. Veja os exemplos:

//escreve um valor na posição 7


IdadesDasPessoas[7] = 0;

//lê um valor da posição 3


MessageBox.Show(IdadesDasPessoas[3]);

Moral da estória. Para acessar a posição interna de um array utilizamos


o nome do array seguido da posição da variável interna entre colchetes.
E o que é melhor: podemos escrever ou ler nessa variável!

Agora para escrever o valor 0 em 10 variáveis (mesmo sendo um


array). Isso parece ser bastante trabalhoso:

//inicializa as variáveis do array com o valor 0

IdadesDasPessoas[0] = 0;
IdadesDasPessoas[1] = 0;
...
IdadesDasPessoas[8] = 0;
IdadesDasPessoas[9] = 0;

Afinal, será que não existe um modo mais fácil? Existe sim.

Podemos utilizar o fato de que as variáveis são indexadas e fazer uso da


estrutura de controle for para “passear” pelos elementos do array. Veja:

private void button1_Click(object sender, EventArgs e)


{
//inicializa as variáveis do array com o valor 0
int intContador;

for (intContador = 0; intContador < IdadesDasPessoas.Length;


intContador++)
{
IdadesDasPessoas[intContador] = 0;
}
}
Em primeiro lugar, repare que utilizamos o método button1_Click que é
o método tratador de eventos (event handler) do clique do botão limpar.
Dentro do método codificamos o seguinte: criação de uma variável
inteira que serve de contador para o for.

O for por sua vez é montado da seguinte forma: a variável contadora


recebe o valor inicial de 0. Ela será incrementada de uma unidade
(intContador++) a cada rodada. As rodadas devem parar quando a
condição de parada (intContador < IdadesDasPessoas.Length) não for
mais verdadeira.

Mas afinal o que é significa IdadesDasPessoas.Length? Um array é um


objeto. Como todo objeto o array possui métodos e propriedades. Uma
das propriedades do objeto do tipo array é a propriedade Length. Essa
propriedade retorna o tamanho do array, ou seja, a quantidade de
variáveis internas, ou posições, do array.

Então a variável intContador variará de 0 até tamanho do array (Length)


menos um (porque ela não pode ser igual a, tem que ser menor) e será
incrementada de uma unidade a cada rodada do for. Com isso
conseguimos que intContador assuma todos os valores dos índices do
array. Ou seja: 0 a 9.

Dentro do for, fizemos o acesso a cada variável interna do array


utilizando intContador como índice. Isso faz sentido, já que a cada
rodada intContador representará um índice do array. O acesso que
fizemos às variáveis internas do array foi de escrita, escrevendo em
todas elas o valor 0.

Dessa forma, conseguimos cumprir a segunda etapa do nosso


programa.

Para permitir que o usuário insira valores no array, precisamos controlar


o índice da posição onde o valor de idade será inserido. Para isso
utilizaremos o rótulo, a caixa de texto, o botão “preencher” e também
mais um atributo da classe Form1 para controlar a posição atual do
array. Veja a criação desse atributo abaixo.

public partial class Form1 : Form


{
private int[] IdadesDasPessoas;

private int PosicaoAtual;

public Form1()
{
InitializeComponent();
IdadesDasPessoas = new int[10];
}

private void button1_Click(object sender, EventArgs e)


{
//inicializa as variáveis do array com o valor 0
int intContador;

for (intContador = 0; intContador < IdadesDasPessoas.Length;


intContador++)
{
IdadesDasPessoas[intContador] = 0;
}
}
}

Além disso, será necessário fazer uma pequena modificação no método


button1_Click. Toda vez que o array for limpo a posição atual do array
deverá voltar a ser 0. Veja como fica:

public partial class Form1 : Form


{
private int[] IdadesDasPessoas;

private int PosicaoAtual;

public Form1()
{
InitializeComponent();
IdadesDasPessoas = new int[10];
}

private void button1_Click(object sender, EventArgs e)


{
//inicializa as variáveis do array com o valor 0
int intContador;

for (intContador = 0; intContador < IdadesDasPessoas.Length;


intContador++)
{
IdadesDasPessoas[intContador] = 0;
}

PosicaoAtual = 0;
label1.Text = "Índice: " + PosicaoAtual;
}
}

Fizemos isso para que o atributo PosicaoAtual torne a ser igual a 0 e


para que o rótulo label1 tenha seu valor igual a “Índice: ” +
PosicaoAtual. Esse rótulo mostra ao usuário qual a posição atual do
array que está sendo acessada.
No método que trata o evento clique do botão button2 (“Preenche”)
vamos inserir na posição atual do array o valor que o usuário inserir na
caixa de texto. Vejamos:

private void button2_Click(object sender, EventArgs e)


{
IdadesDasPessoas[PosicaoAtual] =
Convert.ToInt32(textBox1.Text);

PosicaoAtual++;
label1.Text = "Índice: " + PosicaoAtual;
}

Observe o que fizemos. Guardamos na posição atual do array o valor


inserido pelo usuário na caixa de texto. Para isso foi necessário
converter o valor inserido para inteiro (utilizando o método de classe
Convert.ToInt32). Incrementados a variável PosicalAtual e escrevemos
o novo texto no rótulo.

Finalmente vamos criar o código para mostrar o estado do array. Dê um


duplo clique no botão button3 (“Mostra”). Observe o código abaixo:

private void button3_Click(object sender, EventArgs e)


{
int intContador;
string strSaida="";

for (intContador = 0; intContador <= 9; intContador++)


{
strSaida += intContador + " -> " +
IdadesDasPessoas[intContador] + "\n";
}

MessageBox.Show(strSaida, "Array");
}

Repare que mais uma vez utilizamos a boa afinidade entre os arrays e a
estrutura for para construir visualização dos valores do array.

Dentro do for, utilizamos a variável strSaida. Essa variável, acumula a


cada iteração (rodada) uma linha de texto que diz o índice do array
(fornecido através de intContador e o valor contido naquela posição do
array: IdadesDasPessoas[intContador].

Cada linha é terminada com o caractere de escape “\n” que significa


quebra de linha e retorno de carro (equivalente a pressionar a tecla
Enter).
É muito interessante observar que a variável strSaida está funcionando
como um acumulador já que a cada iteração do array ela acumula
mais uma nova linha de informação.

Terminado o for, o método Show da classe MessageBox é utilizado


para mostrar o texto contido em strSaida. O segundo parâmetro do
método Show serve para informar o texto que aparecerá na barra de
título da caixa de diálogo.