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