Para aceder aos elementos de um array (tanto para leitura do valor que contêm, como para escrita de valores nos lugares de memória a eles atribuídos), usamos
uma expressão cujo valor é uma referência ao array (a mais simples é o nome de uma variável, mais adiante veremos expressões mais complexas),
seguida de uma expressão inteira, entre parêntesis retos, representando o índice do elemento a que queremos aceder.
As instruções seguintes permitem escrever valores em elementos de arrays:
notas[0] = 20;
notas[1] = 19;
permissoes[quantos – 1] = true;
nomes[quantos / 3] = "Aristoteles";
distancias[0] = Math.sqrt(2);
Após a sua execução:
notas
ficam com os valores 20 e 19, respetivamente; permissoes
fica com o valor true
;quantos/3
do array referenciado pela variável nomes
fica a referenciar a String
"Aristoteles" edistancias
fica com o valor da raiz quadrada de 2.Se não experimentou executar o programa acima, pode ver ilustrada na figura seguinte a representação da memória após a execução do programa.
A partir daqui, para simplificar, desde que não introduza ambiguidades, passamos a referir “o array v” em vez de “o array referenciado pela variável v”.
Para ler o valor de um elemento de um array, fazemos de forma semelhante. As instruções seguintes:
xxxxxxxxxx
int minhaNota = notas[1];
System.out.println(nomes[2]);
distancias[1] = 3 * distancias[0];
têm como consequência
notas
à variável minhaNota
, nomes
e distancias
de um valor igual ao triplo do valor do primeiro elemento do mesmo array, respetivamente.
É um erro tentarmos aceder a um elemento de um array usando um valor para o índice que esteja fora do intervalo legal [0, comprimento - 1], onde comprimento denota o número de elementos do array em questão. O programa terminará lançando uma exceção ArrayIndexOutOfBoundsException
.
Voltando agora ao cálculo do desvio padrão usando a fórmula da soma dos quadrados das diferenças entre os vários valores e a média, o seguinte método main
cria e utiliza um array para guardar os valores dados pelo utilizador de modo a usá-los posteriormente:
xpublic static void main (String [] args) {
Scanner leitor = new Scanner (System.in);
System.out.println("Quantos valores?");
int quantos = lerInteiro("Tem que ser um inteiro!", leitor);
int[] valores = new int[quantos];
double soma = 0.0;
for (int i = 0 ; i < quantos ; i++){
valores[i] = lerInteiro("Tem que ser um inteiro!", leitor);
soma += valores[i];
}
double media = soma / quantos;
double somaQuadrados = 0.0;
for (int i = 0 ; i < quantos ; i++){
somaQuadrados += Math.pow(media - valores[i], 2);
}
System.out.println("Desvio padrao: " +
Math.sqrt(somaQuadrados / quantos));
}
Em todos os exemplos que vimos, é conhecido o número de elementos dos arrays; esta não é, no entanto, uma situação comum, pois é muito frequente termos que trabalhar com arrays sobre os quais nada sabemos além de qual o tipo dos seus elementos.
Anterior: 9.1. O tipo de dados não primitivo array
Seguinte: 9.3. Número de elementos de um array