UTILIZAÇÃO DE ARRAYS ( Arranjos)

Propaganda
Material de Aulas Java-4
UTILIZAÇÃO DE ARRAYS ( Arranjos)
1. Arrays Unidimensionais
São arrays com uma dimensão, possuem apenas um índice para acessar seu conteúdo.
São declarados da seguinte forma:
Tipo-de-dado nome-do-array[] = new tipo-do-dado[quantidade]
. Tipo-de-dado – pode ser qualquer tipo de variável primitiva ou classe;
. Nome-do-array – um nome qualquer válido, da mesma forma que os nomes de
variáveis;
Exemplos:
. int N[]=new int [100]; - cria um array de nome N que contém 100 elementos do tipo
int e seu índice varia de 0 a 99.
. String mes[]=new String[12]; - cria um array de nome mes que contém 12 elementos
do tipo string e seu índice varia de 0 a 11.
Para se atribuir o valor a um elemento do array, basta colocar o índice desejado dentro
dos colchetes, como a seguir:
N[0] = 100;
N[52] = 38;
mes[0] = “Janeiro”;
mes[11] = “Dezembro”;
Vejamos um programa que demonstra a utilização de um array para armazenar um
conjunto de argumentos do tipo inteiro, passado pelo usuário na linha de execução e
calcular a média destes valores.
import java.io.*;
import java.text.DecimalFormat;
class C10EX01 {
public static void main(String args[]) {
float MDG[] = new float[8];
float SOMA = 0, MEDIA;
int I;
DecimalFormat df = new DecimalFormat("0.00");
System.out.println();
Prof. Walcyr
1
Material de Aulas Java-4
for (I = 0; I <= 7; I++) {
System.out.print("Entre media do " + (I + 1) + "o. aluno: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
MDG[I] = Float.parseFloat(br.readLine()); }
catch (Exception e) {
MDG[I] = 0;
}
SOMA += MDG[I];
}
MEDIA = SOMA / 8;
System.out.println();
System.out.println("Media Geral = " + df.format(MEDIA));
}
}
Prof. Walcyr
2
Material de Aulas Java-4
Este novo programa tem por objetivo fazer a leitura de dez elementos de um arranjo A
unidimensional e construir um arranjo B do mesmo tipo observando que: se o valor do
índice for par, o valor deve ser multiplicado por 5; e se for ímpar, deve ser somado com 5.
Ao final mostra os conteúdos dos 2 arranjos.
import java.io.*;
class C10EX02 {
public static void main(String args[]) {
int A[] = new int[10];
int B[] = new int[10];
int I;
// Entrada de dados
System.out.println();
for (I = 0; I <= 9; I++) {
System.out.print("Entre o " + (I + 1) + "o. elemento: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
A[I] = Integer.parseInt(br.readLine()); }
catch (Exception e) {
A[I] = 0;
}
}
// Processamento par ou impar
for (I = 0; I <= 9; I++)
if (I % 2 == 0)
B[I] = A[I] * 5;
else
B[I] = A[I] + 5;
// Apresentacao dos arranjos
System.out.println();
for (I = 0; I <= 9; I++)
System.out.println("A[" + (I + 1) + "] = " + A[I]);
System.out.println();
for (I = 0; I <= 9; I++)
System.out.println("B[" + (I + 1) + "] = " + B[I]);
}
}
Prof. Walcyr
3
Material de Aulas Java-4
Desenvolver um programa que faça a leitura de 5 elementos para um array A
unidimensional e apresente ao final o resultado da soma de todos os elementos que sejam
ímpares.
import java.io.*;
class C10EX03 {
public static void main(String args[]) {
int A[] = new int[5];
int I, SOMA = 0;
// Entrada de dados
System.out.println();
for (I = 0; I <= 4; I++) {
System.out.print("Entre o " + (I + 1) + "o. elemento: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
A[I] = Integer.parseInt(br.readLine()); }
catch (Exception e) {
A[I] = 0;
}
}
Prof. Walcyr
4
Material de Aulas Java-4
// Processamento par ou impar
for (I = 0; I <= 4; I++)
if (A[I] % 2 != 0)
SOMA += A[I];
// Apresentacao dos arranjos
System.out.println();
System.out.println("Soma = " + SOMA);
}
}
Ordenação de Arrays
O programa abaixo efetua a leitura de 5 elementos de um array e classifica em ordem
crescente.
import java.io.*;
class C10EX04 {
public static void main(String args[]) {
int A[] = new int[5];
Prof. Walcyr
5
Material de Aulas Java-4
int I, J, X;
// Entrada de dados
System.out.println();
for (I = 0; I <= 4; I++) {
System.out.print("Entre o " + (I + 1) + "o. elemento: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
A[I] = Integer.parseInt(br.readLine()); }
catch (Exception e) {
A[I] = 0;
}
}
// Processamento ordenacao
for (I = 0; I <= 3; I++)
for (J = I + 1; J <= 4; J++)
if (A[I] > A[J]) {
X = A[I];
A[I] = A[J];
A[J] = X;
}
// Apresentacao dos arranjos
System.out.println();
for (I = 0; I <= 4; I++)
System.out.println((I + 1) + "o. valor = " + A[I]);
}
}
Prof. Walcyr
6
Material de Aulas Java-4
O programa seguinte fará a apresentação de 5 nomes no formato de ordenação alfabética
ascendente.
import java.io.*;
class C10EX05 {
public static void main(String args[]) {
String A[] = new String[5], X;
int I, J;
// Entrada de dados
System.out.println();
for (I = 0; I <= 4; I++) {
System.out.print("Entre o " + (I + 1) + "o. nome: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
A[I] = br.readLine(); }
catch (Exception e) {
A[I] = "";
}
}
// Processamento ordenacao
Prof. Walcyr
7
Material de Aulas Java-4
for (I = 0; I <= 3; I++)
for (J = I + 1; J <= 4; J++)
if (A[I].compareTo(A[J]) > 0) {
// quando se usa dados do tipo string é preciso usar o método compareTo()
X = A[I];
A[I] = A[J];
A[J] = X;
}
// Apresentacao dos arranjos
System.out.println();
for (I = 0; I <= 4; I++)
System.out.println((I + 1) + "o. nome = " + A[I]);
}
}
Pesquisa em Arrays
Existe 2 tipos de pesquisa: seqüencial e binária.
Prof. Walcyr
8
Material de Aulas Java-4
Modelo de pesquisa seqüencial – considere um programa que receberá a entrada de 10
valores inteiros e disponibilizará para o usuário a capacidade de ir pesquisando os valores
armazenados no array.
import java.io.*;
class C10EX06 {
public static void main(String args[]) {
int A[] = new int[10], I, J, PESQ, ACHA;
String RESP;
// Entrada de dados
System.out.println();
for (I = 0; I <= 9; I++) {
System.out.print("Entre o " + (I + 1) + "o. elemento: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
A[I] = Integer.parseInt(br.readLine()); }
catch (Exception e) {
A[I] = 0;
}
}
// Pesquisa de dados
do {
System.out.println();
System.out.print("Entre o valor a ser pesquisado: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
PESQ = Integer.parseInt(br.readLine()); }
catch (Exception e) {
PESQ = 0;
}
I = 0;
ACHA = 0;
while (I <= 9 & ACHA == 0)
if (PESQ == A[I])
ACHA = 1;
else
I++;
Prof. Walcyr
9
Material de Aulas Java-4
if (ACHA == 1)
System.out.print(PESQ + " localizado na posicao " + (I + 1));
else
System.out.print(PESQ + " nao foi localizado");
System.out.println();
System.out.println();
System.out.println("Continua? [S]im / [N]ao + <Enter>.");
System.out.print("Ou <Enter> para 'Nao': ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
RESP = br.readLine(); }
catch (Exception e) {
RESP = "";
}
RESP = RESP.toUpperCase(); }
while (RESP.compareTo("S") == 0);
}
}
Prof. Walcyr
10
Material de Aulas Java-4
Método de Pesquisa Binária
Este método exige que o array esteja previamente ordenado, divide o array em 2 partes e
procura saber se a informação a ser pesquisada está na posição que marca o meio da divisão.
Se estiver, então achou e encerra o processo. Mas caso não esteja, o modelo verifica se o
conteúdo da busca está acima ou abaixo da linha que marca a divisão da tabela.
Vejamos como exemplo o programa abaixo que usa este método de pesquisa para localizar
um nome em um array de 10 elementos.
import java.io.*;
class C10EX07 {
public static void main(String args[]) {
String A[] = new String[10], X, PESQ, RESP;
int I, J, MEIO, COMECO, FINAL, ACHA;
// Entrada de dados
System.out.println();
for (I = 0; I <= 9; I++) {
System.out.print("Entre o " + (I + 1) + "o. nome: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
A[I] = br.readLine(); }
catch (Exception e) {
A[I] = "";
}
}
// Processamento ordenacao
for (I = 0; I <= 8; I++)
for (J = I + 1; J <= 9; J++)
if (A[I].compareTo(A[J]) > 0) {
X = A[I];
A[I] = A[J];
A[J] = X;
}
// Apresentacao nomes ordenados
System.out.println();
for (I = 0; I <= 9; I++)
System.out.println((I + 1) + "o. nome = " + A[I]);
// Apresentacao por pesquisa binario
do {
Prof. Walcyr
11
Material de Aulas Java-4
System.out.println();
System.out.print("Entre o valor a ser pesquisado: ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
PESQ = br.readLine(); }
catch (Exception e) {
PESQ = "";
}
COMECO = 0;
FINAL = 9;
MEIO = 0;
ACHA = 0;
while (COMECO <= FINAL & ACHA == 0) {
MEIO = (COMECO + FINAL) / 2;
if (PESQ.compareTo(A[MEIO]) == 0)
ACHA = 1;
else
if (PESQ.compareTo(A[MEIO]) < 0)
FINAL = MEIO - 1;
else
COMECO = MEIO + 1;
}
if (ACHA == 1)
System.out.print(PESQ + " esta na posicao " + (MEIO + 1));
else
System.out.print(PESQ + " nao foi localizado");
System.out.println();
System.out.println();
System.out.println("Continua? [S]im / [N]ao + <Enter>.");
System.out.print("Ou <Enter> para 'Nao': ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
RESP = br.readLine(); }
catch (Exception e) {
RESP = "";
}
RESP = RESP.toUpperCase(); }
while (RESP.compareTo("S") == 0);
}
}
Prof. Walcyr
12
Material de Aulas Java-4
ARRAY Bidimensional
Uma estrutura de dados do tipo array pode também ser composta por mais de uma coluna.
Neste caso, este será um array bidimensional, ou seja, uma tabela que pode ser formada por
várias linhas e colunas.
Os arrays bidimensionais usa 2 índices, um controlando o posicionamento de linha e outro
controlando o posicionamento de coluna. Desta forma, a referência TABELA[2,3] faz
menção a um elemento armazenado na linha 2 e coluna 3 do arranjo TABELA.
Sintaxe:
Tipo ARRANJO[] = new tipo[dimensão linha] [dimensão coluna];
. <tipo>
. <arranjo>
. <dimensão linha>
. <dimensão coluna>
- o tipo de dado primitivo ou classe;
- o nome atribuído ao arranjo;
- o tamanho do array em número de linhas;
- o tamanho do array em número de colunas;
O programa a seguir efetuará a entrada de 4 notas escolares de 8 alunos de uma sala de aula.
Prof. Walcyr
13
Material de Aulas Java-4
import java.io.*;
import java.text.DecimalFormat;
class C10EX08 {
public static void main(String args[]) {
float NOTA[][] = new float[8][4];
byte I, J;
DecimalFormat df = new DecimalFormat("00.00");
for (I = 0; I <= 7; I++) {
System.out.println();
System.out.println();
System.out.println("Aluno ---> " + (I + 1));
System.out.println();
for (J = 0; J <= 3; J++) {
System.out.print((J + 1) + "a. Nota = ");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
NOTA[I][J] = Float.parseFloat(br.readLine()); }
catch (Exception e) {
NOTA[I][J] = 0;
}
}
}
System.out.println();
System.out.println("Aluno Nota1 Nota2 Nota3 Nota4");
System.out.println("-----------------------------");
for (I = 0; I <= 7; I++) {
System.out.print((I + 1) + " --> ");
for (J = 0; J <= 3; J++)
System.out.print(df.format(NOTA[I][J]) + " ");
System.out.println();
}
System.out.println();
}
}
Prof. Walcyr
14
Material de Aulas Java-4
ARRAY de Argumentos
Observe o código de programa: public static void main(String args[]) que estamos usando
em todos os programas desenvolvidos.
No parâmetro do método main() observe a definição do array String args[] que permite usar
um array de argumentos.
O programa abaixo calcula o fatorial de um valor fornecido como parâmetro.
import java.io.*;
class C10EX09 {
public static void main(String args[]) {
int F = 1, I = 1, N;
N = Integer.parseInt(args[0]);
for (I = 1; I <= N; I++)
F *= I;
System.out.println(F);
}
}
Prof. Walcyr
15
Material de Aulas Java-4
O próximo programa tem por finalidade passar com parâmetro 4 valores representando as
notas escolares de um aluno para então o programa calcular a média do aluno e indicar se
ele foi aprovado ou reprovado.
import java.io.*;
import java.text.DecimalFormat;
class C10EX10 {
public static void main(String args[]) {
float N1, N2, N3, N4, MD;
DecimalFormat df = new DecimalFormat("0.00");
N1 = Float.parseFloat(args[0]);
N2 = Float.parseFloat(args[1]);
N3 = Float.parseFloat(args[2]);
N4 = Float.parseFloat(args[3]);
MD = (N1 + N2 + N3 + N4) / 4;
if (MD >= 5)
System.out.print("Aluno Aprovado com Media ");
else
System.out.print("Aluno Reprovado com Media ");
System.out.println(df.format(MD));
}
}
Obs: para usar o BlueJ os parâmetros deverão ser passados como {(“5”,”6”,”7.5”,”8.3”)}
Prof. Walcyr
16
Material de Aulas Java-4
Caso esqueça de fornecer as notas como parâmetro, será apresentado um erro conforme:
Exception in thread “main” Java.lang.ArrayIndexOutOfBoundsException: 0
At C10Ex09.main(C10EX09.java:10).
Neste caso podemos tratar esta exceção com um bloco try / catch. Vejamos o programa
abaixo:
import java.io.*;
import java.text.DecimalFormat;
class C10EX11 {
public static void main(String args[]) {
float N1, N2, N3, N4, MD;
DecimalFormat df = new DecimalFormat("0.00");
try {
N1 = Float.parseFloat(args[0]);
N2 = Float.parseFloat(args[1]);
N3 = Float.parseFloat(args[2]);
N4 = Float.parseFloat(args[3]);
MD = (N1 + N2 + N3 + N4) / 4;
if (MD >= 5)
Prof. Walcyr
17
Material de Aulas Java-4
System.out.print("Aluno Aprovado com Media ");
else
System.out.print("Aluno Reprovado com Media ");
System.out.println(df.format(MD)); }
catch (ArrayIndexOutOfBoundsException aioobe) {
System.out.println();
System.out.println("Forneca: C10EX10 A B C D");
System.out.println("Onde, A B C D sao notas escolares.");
}
}
}
Exercícios de Fixação:
1. Desenvolva os seguintes programas com elementos de arrays unidimensionais:
a) Ler 8 elementos numéricos inteiros em um arranjo A do tipo vetor. Construir um
arranjo B de mesma dimensão com os elementos do arranjo A multiplicados por 3.
Apresentar os elementos do array B.
b) Ler 2 arrays A e B do tipo vetor com 8 elementos numéricos inteiros. Construir um
arranjo C, sendo cada elemento de C a subtração do elemento correspondente de A
em B. Apresentar os elementos do arranjo C.
Prof. Walcyr
18
Material de Aulas Java-4
c) Ler 2 arrays A e B do tipo vetor com 10 elementos numéricos inteiros cada uma.
Construir um array C, sendo esta a junção dos arranjos A e B. Dessa forma, C deve
ter o dobro de elementos A e B. Apresentar os elementos do arranjo C.
d) Ler 2 arrays do tipo vetor. O array A deve possuir 5 elementos pares inteiros e o
array B deve possuir 10 elementos ímpares inteiros. Construir um array C, sendo
esta a junção dos 2 outros arrays. Dessa forma, C deve ter a capacidade de
armazenar 15 elementos. Apresentar os elementos do array C. Para efetivar as
entradas dos arrays A e B, eles deverão ser verificadas quanto da validade do valor
fornecido. Caso o valor fornecido não seja compatível com o esperado, o programa
deve recusar a entrada e forçar uma nova entrada, até que o valor válido seja
fornecido.
e) Ler 15 elementos numéricos inteiros de uma array A do tipo vetor. Construir um
array B do mesmo tipo, observando a seguinte lei de formação: todo elemento do
array B deve ser o quadrado do elemento correspondente do array A. Apresentar os
elementos do array B.
2. Desenvolva os seguintes programas com elementos de arrays unidimensionais e
bidimensionais:
a) Ler 2 arrays A e B com valores inteiros cada uma de duas dimensões com 5 linhas e
3 colunas. Construir um array C de mesma dimensão, a qual é formada pela soma
dos elementos do array A com os elementos do array B. Apresentar os elementos do
array C.
b) Ler um array A de uma dimensão com 5 elementos numéricos inteiros. Construir
um array B de duas dimensões com 5 linhas e 3 colunas. A primeira coluna do
array B será formada pelos elementos do array A somados com 5, a segunda coluna
será formada pelo valor do cálculo da fatorial de cada elemento correspondente do
array A e a terceira coluna deverá ser formada pelos quadrados dos elementos
correspondentes do array A. Apresentar os elementos do array B.
c) Ler 2 arrays A e B de duas dimensões com 4 linhas e 4 colunas, que deverão ser
formadas com valores reais. Construir um array C de mesma dimensão, a qual é
formada pela subtração dos elementos do array A com os elementos do array B.
Apresentar ao valores do array C.
d) Ler 16 elementos numéricos reais para um array A, considerando um array com 4
linhas e 4 colunas. Em seguida apresentar os valores existentes na diagonal
principal do array A.
e) Ler 9 elementos numéricos reais para um array A, considerando um array com 3
linhas e 3 colunas. Em seguida apresentar os valores existentes na diagonal
principal do array A multiplicados por 2 e os demais elementos multiplicados por 3.
Prof. Walcyr
19
Download