Arrays estáticos com C#

10

Click here to load reader

Transcript of Arrays estáticos com C#

Page 1: Arrays estáticos com C#

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.

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.

IdadesDasPessoas

0 10

20

30

40

50

60

70

80

90

10 elementos

Page 2: Arrays estáticos com C#

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).

Page 3: Arrays estáticos com C#

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.

Page 4: Arrays estáticos com C#

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

Page 5: Arrays estáticos com C#

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 7IdadesDasPessoas[7] = 0;

//lê um valor da posição 3MessageBox.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.

Page 6: Arrays estáticos com C#

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) {

Page 7: Arrays estáticos com C#

//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)

Page 8: Arrays estáticos com C#

{ 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

Page 9: Arrays estáticos com C#

método Show serve para informar o texto que aparecerá na barra de título da caixa de diálogo.