Upload
abelardo-ferreira
View
2
Download
0
Embed Size (px)
Citation preview
Sistemas de InformaoSistemas de Informao
Linguagem de Programao II
1
ArraysArraysFJN | Faculdade de Juazeiro do Norte
Bacharelado em Sistemas de InformaoLinguagem de Programao II
Prof. Sidney Lima
2
FJN | SI | LP2 PROF. SIDNEY
ArraysArrays
Um array uma estrutura de dados consistindo em itens de dados do mesmo tipo relacionados.
Os arrays so objetos, portanto, considerados tipos por referncia.
3
Nome do array (C) -45
6
0
72
154
89
C[ 0 ]
C[ 1 ]
C[ 2 ]
C[ 3 ]
C[ 4 ]
C[ 5 ]
ndice (ou subscrito) do elemento do array
Para referenciar um elemento do array deve-se utilizar uma expresso de acesso ao array, que inclui o nome do array seguido pelo nmero da posio do elemento no array(dentro de colchetes)
O nmero de posio do elemento chamado de ndiceou subscrito do elemento.
FJN | SI | LP2 PROF. SIDNEY
ArraysArrays
Cada objeto de array conhece seu prprio tamanho e armazena-o em uma varivel de instncia denominada length. A expresso c.length acessa o campo length do array c para determinar o comprimento do array.
4
C -45
6
0
72
154
89
C[ 0 ]
C[ 1 ]
C[ 2 ]
C[ 3 ]
C[ 4 ]
C[ 5 ]
Algumas operaes:
soma = c[1]+c[2]+c[3]
x = c[3]/8
6
length
0
72
6
FJN | SI | LP2 PROF. SIDNEY
Declarando e Criando Declarando e Criando ArraysArrays
int[] c = new int[6];
ou
// declarao da varivel de arrayint[] c;
// cria o array e atribui varivel de arrayc = new int[6];
Obs.: quando um array criado, cada elemento do array recebe um valor padro.
5
C 0
0
0
0
0
0
C[ 0 ]
C[ 1 ]
C[ 2 ]
C[ 3 ]
C[ 4 ]
C[ 5 ]
length 6
FJN | SI | LP2 PROF. SIDNEY
Observao de Engenharia de SoftwareObservao de Engenharia de Software
Um programa pode criar vrios arrays em uma s declarao, embora isso no seja uma boa prtica.
6
String[] b = new String[100], x = new String[25];
Poderia ser assim:
String[] b = new String[100]; // cria o array beString[] x = new String[25]; / / cria o array x
FJN | SI | LP2 PROF. SIDNEY
Observao de Engenharia de SoftwareObservao de Engenharia de Software
Declarar mltiplas variveis de array em uma nica declarao pode levar a erros sutis, devido ao posicionamento dos pares de colchetes [].
7
Considere as seguintes declaraes:
int[] a, b, c; // define a, b e c como arrays de inteiros
int a[], b, c; // declara a como array de int, b e c como // variveis primitivas de valore do tipo inteiro.
FJN | SI | LP2 PROF. SIDNEY
Exerccio: criando e Exerccio: criando e incializandoincializando um um arrayarray
8
continuacontinua >>>>
1 public class InitArray
2 {
3 public static void main(String[] args)
4 {
5 int[] array;
6 array = new int[10];
7 System.out.printf("%s%8s","Index","Value");
8 for (int counter = 0; counter < array.length; counter++)
9 {
10 System.out.printf("%5d%8d\n",counter,array[counter]);
11 }
12 }
13 }
FJN | SI | LP2 PROF. SIDNEY
Utilizando um Utilizando um inicializadorinicializador de de arrayarray
Voc pode criar um array e inicalizar seus elementos com um inicializador de arrays: uma lista separada por vrgula colocada entre chaves.
Nesse caso, o comprimento do array determinado pelo nmero de elementos na lista.
Exemplo:int[] n = { 10, 20, 30, 40, 50}
9
n 10
20
30
40
50
n[ 0 ]
n[ 1 ]
n[ 2 ]
n[ 3 ]
n[ 4 ]
length 5
FJN | SI | LP2 PROF. SIDNEY
Exerccio: somando os elementos do Exerccio: somando os elementos do arrayarray
10
1 public class SumArray
2 {
3 public static void main(String[] args)
4 {
5 int[] array = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87};
6 int total = 0;
7 for (int counter = 0; counter < array.length; counter++)
8 {
9 total += array[counter];
10 }
11 System.out.printf("Total of array elements: %d\n",total);
12 }
13 }
FJN | SI | LP2 PROF. SIDNEY
Exerccio: imprimindo um Exerccio: imprimindo um arrayarray
11
1 public class TestArrays
2 {
3 public static void main(String[] args)
4 {
5 int[] lista = {22, 44, 66, 88};
6 System.out.println("Array de Inteiros: "+lista);
7 System.out.println("lista.length: "+lista.length);
8 System.out.println("lista[2]: "+lista[2]);
9
10 lista[2] = 99;
11 System.out.println("lista[2]: "+lista[2]);
12
13 }
14 }
0
int[]
1
22
2
3
66
88
lista
44
FJN | SI | LP2 PROF. SIDNEY
ArraysArrays
Observao:Para a instruo:System.out.println("Array de Inteiros: "+lista);
A sada ser algo como:Array de Inteiros: [I@3e25a5
O que significa uma referncia para um array de ints. Isto acontece porque estamos tentando imprimir um objeto, logo, o que apresentado na tela corresponde atype-id@mem-addr
onde type-id um identificador de tipo e mem-addr o endereo de memria onde o objeto est armazenado. Neste caso, type-id [I (que significa um array cujos elementos possuem o tipo int) e mem-addr 3e25a5.
12
FJN | SI | LP2 PROF. SIDNEY
Exerccio: imprimindo um Exerccio: imprimindo um arrayarray
13
1 public class TestArrays
2 {
3 public static void main(String[] args)
4 {
5 int[] lista = {22, 44, 66, 88};
6 System.out.println("Array de Inteiros: "+lista);
7 System.out.println("lista.length: "+lista.length);
8 System.out.println("lista[2]: "+lista[2]);
9 print(lista);
10 lista[2] = 99;
11 System.out.println("lista[2]: "+lista[2]);
12 print(lista);
13 }
0
int[]
1
22
2
3
66
88
lista
a
44
continuacontinua >>>>
FJN | SI | LP2 PROF. SIDNEY 14
continuaocontinuao >>>>
14 public static void print(int[] a) {
15 for (int i=0; i< a.length; i++)
16 System.out.print(a[i]+" ");
17 System.out.println();
18 }
19 }
Exerccio: Imprimindo um Exerccio: Imprimindo um arrayarray
FJN | SI | LP2 PROF. SIDNEY
A estrutura for aprimorada (A estrutura for aprimorada (foreachforeach))
A instruo for aprimorada itera pelos elementos de um array sem usar um contador, evitando assim a possibilidade de ultrapassar o limite do array.
Sintaxe:
for ( parmetro : nomeDoArray )instruo
onde parmetro tem duas partes um tipo e um identificador e nomeDoArray o array pelo qual iterar.
Obs.: o tipo do parmetro deve ser consistente com o tipo de elementos no array. O identificador representa valores sucessivos do array nas sucessivas iteraes do loop.
15
FJN | SI | LP2 PROF. SIDNEY
Exerccio: for aprimorado (Exerccio: for aprimorado (foreachforeach))
16
1 public class EnhancedForTest
2 {
3 public static void main(String[] args) {
4 {
5 int[] array = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87};
6 int total = 0;
7 for (int number : array)
8 {
9 total += number;
10 }
11 System.out.printf("Total of array elements: %d\n",total);
12 } // fim do mtodo main
13 } // fim da classe EnhancedForTest
FJN | SI | LP2 PROF. SIDNEY
Cpia de ArraysCpia de Arrays
Como se sabe, um array um objeto e, como qualquer objeto, seu nome na realidade o nome de uma referncia a este objeto. Consequentemente, atribuir um array a outro no duplica o array; isto meramente atribui uma outra referncia ao mesmo objeto.
Desta forma, se as instrues seguintes fossem acrescentadas ao cdigo anteriormente exibido, teramos o que est representado na figura ao lado:
int[] lista2;
lista2 = lista;
17
0
int[]
1
22
2
3
66
88
lista
lista2 44
FJN | SI | LP2 PROF. SIDNEY
Cpia de ArraysCpia de Arrays
Para copiar o prprio objeto array, voc deve copiar cada um de seus elementos. A maneira mais eficiente de fazer isto usar o mtodo System.arraycopy().
Sintaxe:arraycopy(src,srcPos,dest,destPos,length)
onde src o array de origem, srcPos o ndice do primeiro elemento do array de origem a ser copiado, dest o array de destino, destPos o ndice onde o primeiro elemento deve ser copiado no array de destino, e length o nmero de elementos a serem copiados.
18
FJN | SI | LP2 PROF. SIDNEY
Cpia de ArraysCpia de Arrays
Exemplo: arraycopy(lista,4,lista2,2,3)
Indica que haver cpia de 3 elementos de lista[] para lista2[]:
Os elementos {lista[4],lista[5],lista[6]} so copiados para {lista2[2],lista2[3],lista2[4]}.
19
int[]
lista
int[]
lista2 0 0
1 0
2 66
3 77
4 88
5 0
6 0
7 0
0 22
1 33
2 44
3 55
4 66
5 77
6 88
7 99
FJN | SI | LP2 PROF. SIDNEY
Exerccio: copiando um Exerccio: copiando um arrayarray
20
1 public class TestArrays2 {
2 public static void main(String[] args) {
3 int[] lista = {22,33,44,55,66,77,88,99};
4 print(lista);
5 int[] lista2 = new int[lista.length];
6 System.out.println("lista2: "+lista2);
7 print(lista2);
8 System.arraycopy(lista, 0, lista2, 0, lista.length);
9 System.out.println("lista2: "+lista2);
10 print(lista2);
11 lista2[1] = 11;
12 print(lista);
13 print(lista2);
14 lista2 = new int[12]; continuacontinua >>>>
FJN | SI | LP2 PROF. SIDNEY 21
continuaocontinuao >>>>15 System.arraycopy(lista, 0, lista2, 3, 8);
16 System.out.println("lista2: "+lista2);
17 print(lista2);
18 System.arraycopy(lista2, 3, lista2, 1, 5);
19 System.out.println("lista2: "+lista2);
20 print(lista2);
21 }
22 public static void print(int[] a) {
23 for (int i=0; i
FJN | SI | LP2 PROF. SIDNEY
Passagem de Arrays em MtodosPassagem de Arrays em Mtodos
Anteriormente, no estudo de mtodos, vimos que possvel a criao de mtodos que recebem valores, manipulam valores e retornam um resultado.
Na passagem desses valores pode ser usado qualquer tipo de varivel (int, float, double, por exemplo). Da mesma forma, possvel tambm criar mtodos com passagem e retorno de arrays.
O funcionamento basicamente o mesmo: quando o mtodo invocado, um array qualquer passado, o qual manipulado internamente pelo mtodo e depois retornado.
22
FJN | SI | LP2 PROF. SIDNEY
Passagem de Arrays em MtodosPassagem de Arrays em Mtodos
Veja a sintaxe simples para um mtodo que recebe e retorna um array:
public static tipo-de-array[] nome-do-metodo(tipo-do-array nome-do-array[])
O prximo exerccio apresenta um mtodo que recebe um array do tipo inteiro, organiza seus elementos e o retorna em ordem crescente. Esses elementos sero passados pelo usurio na linha de comando no momento da execuo do programa.
23
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
import javax.swing.JOptionPane;
public class OrdenaValores {public static void main(String[] args) {int array[] = new int[5]; //cria um array com 5 elementosString saidaDigitada = "Array digitado: ";
for (int i=0;i>>>
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
array = ordenaArrayInt(array);String saidaOrdenada = "Array ordenado: ";for (int i = 0; i < array.length; i++)
saidaOrdenada += array[i] + " - ";saidaDigitada = removeTraco(saidaDigitada);saidaOrdenada = removeTraco(saidaOrdenada);JOptionPane.showMessageDialog(null, saidaDigitada + "\n" +
saidaOrdenada);
System.exit(0);}
25
continuacontinua >>>>
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
public static int[] ordenaArrayInt(int arr[]) {int x, y, aux;for (x = 0; x < arr.length; x++)for (y = 0; y < arr.length; y++) {if (arr[x]>>>
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
public static String removeTraco(String str) {...
}}
27
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
public static String removeTraco(String str) {str = str.substring(0, str.length()-2);return str;
}}
28
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
Arrays de Strings e outros objetosArrays de Strings e outros objetos
Os exemplos anteriores ilustram um array do tipo int. Outras possibilidades incluem arrays do tipo double,double[] vector = {3.14, 2.178, 1.414};
arrays do tipo char,char[] strings = {'J','a','v','a'};
e arrays do tipo Object,Object[] objetos = {x, y, z};
29
FJN | SI | LP2 PROF. SIDNEY
Arrays de Strings e outros objetosArrays de Strings e outros objetos
Todo programa Java usa um array do tipo String, declarado como parmetro de seu mtodo main().
Embora ele possa ter qualquer nome, ele geralmente denominado args, para indicar "argumentos". Este array armazena os argumentos de linha de comando que voc pode fornecer quando voc executa seu programa a partir da linha de comando. O exemplo seguinte ilustra a passagem de argumentos na chamada de um programa.
30
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
public class TestArgs {public static void main(String[] args) {System.out.println("args.length: "+args.length);for (int i = 0; i < args.length; i++)
System.out.println("args["+i+"]: "+args[i]);System.out.println();for (int i = args.length-1; i >= 0; i--)
System.out.println("args["+i+"]: "+args[i]);}
}
31
FJN | SI | LP2 PROF. SIDNEY
Arrays de Strings e outros objetosArrays de Strings e outros objetos
Suponha que vamos compilar e executar este programa a partir de linha de comando, como segue:javac TestArgs.java
java TestArgs Juazeiro do Norte
Ento a sada ser:args.length: 3args[0]: Juazeiroargs[1]: doargs[2]: Norte
args[2]: Norteargs[1]: doargs[0]: Juazeiro
32
FJN | SI | LP2 PROF. SIDNEY
Arrays de Strings e outros objetosArrays de Strings e outros objetos
Cada string (delimitado por espao em branco) que aparece depois do comando java TestArgs salvo como um elemento do array args.
Uma vez que qualquer tipo de dado pode ser armazenado na forma de um string, podemos ver que o array args pode ser usado para entrada de qualquer tipo de dado durante a execuo.
33
FJN | SI | LP2 PROF. SIDNEY
Arrays de Strings e outros objetosArrays de Strings e outros objetos
public class TestArgs2 {public static void main(String[] args) {if (args.length != 2) {System.err.println("Uso: java TestArgs ");System.exit(1);
}int n = Integer.parseInt(args[0]);System.out.println("O int : "+n);double x = Double.parseDouble(args[1]);System.out.println("o double : "+x);
}}
34
FJN | SI | LP2 PROF. SIDNEY
Arrays de Strings e outros objetosArrays de Strings e outros objetos
Executando como:javac TestArgs2.java
java TestArgs 22 3.14
A sada ser:O int : 22o double : 3.14
35
FJN | SI | LP2 PROF. SIDNEY
ArraysArrays BidimensionaisBidimensionais
Uma array bidimensional permite a criao de vetores com mais de um ndice. Esta caracterstica possibilita que os valores sejam armazenados na forma de matrizes de qualquer dimenso.
O exerccio apresentado a seguir utiliza um array bidimensional para coletar duas notas de trs alunos (um total de seis notas). Uma vez armazenadas, o programa solicita ao usurio o nmero de um aluno para mostrar suas notas e a mdia delas.
36
FJN | SI | LP2 PROF. SIDNEY
ArraysArrays BidimensionaisBidimensionais
Uma array bidimensional permite a criao de vetores com mais de um ndice. Esta caracterstica possibilita que os valores sejam armazenados na forma de matrizes de qualquer dimenso.
O exerccio apresentado a seguir utiliza um array bidimensional para coletar duas notas de trs alunos (um total de seis notas). Uma vez armazenadas, o programa solicita ao usurio o nmero de um aluno para mostrar suas notas e a mdia delas.
37
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
Os aspectos mais importantes do exerccio a seguir so: So coletadas e armazenadas duas notas de trs alunos noarray no formato de uma tabela; o que feito atravs da estrutura de loops aninhados e do comando abaixo:
notas[aluno][nota]=Float.parseFloat(JOptionPane.showInputDialog(null,"Fornea a nota "+(nota+1)+" do aluno "+(aluno+1)));
38
Notas
Alunos0 1
0 Aluno1 Nota1 ndice[0][0] Nota2 ndice[0][1]
1 Aluno2 Nota1 ndice[1][0] Nota2 ndice[1][1]
3 Aluno3 Nota1 ndice[2][0] Nota2 ndice[2][1]
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
import javax.swing.JOptionPane;public class CalculaMedias {public static void main(String[] args) {float notas[][] = new float[3][2];int aluno = 0, nota;while (aluno>>
FJN | SI | LP2 PROF. SIDNEY
ExerccioExerccio
aluno++;}aluno =Integer.parseInt(JOptionPane.showInputDialog(null,"Fornea o
nmero do aluno a consultar: "));JOptionPane.showMessageDialog(null, "CONSULTA DE NOTAS: "+"\nAluno: "+aluno+"\nNota1: "+notas[aluno - 1][0]+"\nNota2: "+notas[aluno - 1][1]+"\nMedia: "+((notas[aluno-1][0]+notas[aluno-1][1])/2)
);System.exit(0);}
}
40
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Exerccio: ArrayArray de Objetosde Objetos
public class TestArrays {public static void main(String[] args) {Object[] a = new Object[5];a[0] = new java.util.Date();a[1] = "ABCDE";a[2] = new java.util.Random();a[3] = new int[] {22,33,44};print(a);
}
private static void print(Object[] a) {for (int i=0; i
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Exerccio: ArrayArray de Objetosde Objetos
No exerccio anterior, o array a[] declarado na linha 3 como um array de elementos Object. Em Java, cada classe uma extenso da classe Object, de modo que cada objeto se qualifica como sendo desse tipo, seja direta ou indiretamente. Consequentemente, qualquer objeto pode ser um elemento deste array. Ele alocado na linha 3 para conter at 5 objetos.
Object[] a = new Object[5]
42
0
Object[]
1
2
3
4
Date
String
"ABCDE"
Random
0
1
2
int[]
a
22
44
33
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Exerccio: ArrayArray de Objetosde Objetos
A linha 4 atribui um novo objeto java.util.Date a a[0].A linha 5 atribui o String "ABCDE" a a[1].A linha 6 atribui um novo objeto java.util.Random a a[2].A linha 7 atribui um novo objeto array annimo que armazena os trs inteiros 22, 33, 44 a a[3].
a[0] = new java.util.Date();a[1] = "ABCDE";a[2] = new java.util.Random();a[3] = new int[] {22,33,44};
43
0
Object[]
1
2
3
4
Date
String
"ABCDE"
Random
0
1
2
int[]
a
22
44
33
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Exerccio: ArrayArray de Objetosde Objetos
Na linha 8, nosso mtodo print() imprime o array a[]. Isto faz com que o mtodo toString() de cada objeto seja invocado na linha 13. Para o objeto Date em a[0], o mtodo toString() retorna o string " Tue Apr 14 17:50:04 BRT 2009 ", que mostra o momento no qual o objeto Date foi instanciado. Para o objeto String em a[1], o mtodo toString() simplesmente retorna o string "ABCDE" que o objeto contm.
print(a);
private static void print(Object[] a) {for (int i=0; i
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Exerccio: ArrayArray de Objetosde Objetos
O mtodo toString() no diretamente implementado pela classe Random, e assim, para a[2], o mtodo default toString() (da classe Object) invocado na linha 13 retornando a formagenrica java.util.Random@190d11, que mostra o tipo de ojbeto e o seu endereo de memria. A mesma coisa ocorre com a[3]. Note que o quinto elemento, a[4], foi alocado mas no inicializado. Consequentemente,seu valor null.
print(a);
private static void print(Object[] a) {for (int i=0; i
FJN | SI | LP2 PROF. SIDNEY
A Classe A Classe javajava..util.Arraysutil.Arrays
Java inclui uma classe "utilitria" especial para processamento de arrays. O nome desta classe Arrays; ela est definida no pacote java.util.
O prximo programa ilustra os mtodos sort(), binarySearch(), fill(), e equals() da classe java.util.Arrays.
46
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Usando a classe Exerccio: Usando a classe javajava..util.Arraysutil.Arrays
47
continuacontinua >>>>
1 import java.util.Arrays;
2
3 public class TestArrays3 {
4 public static void main(String[] args) {
5 int[] a = {44, 77, 55, 22, 99, 88, 33, 66};
6 print(a);
7 Arrays.sort(a);
8 print(a);
9 int k = Arrays.binarySearch(a, 44);
10 System.out.println("Arrays.binarySearch(a,44): "+k);
11 System.out.println("a["+k+"]:"+a[k]);
12 k = Arrays.binarySearch(a,45);
13 System.out.println("Arrays.binarySearch(a,45): "+k);
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Usando a classe Exerccio: Usando a classe javajava..util.Arraysutil.Arrays
48
continuaocontinuao >>>>14 int[] b = new int[8];
15 print(b);
16 Arrays.fill(b, 55);
17 print(b);
18 System.out.println("Arrays.equals(a,b): "+Arrays.equals(a,b));
19 }
20
21 public static void print(int[] a) {
22 for (int i = 0; i < a.length; i++)
23 System.out.print(a[i]+" ");
24 System.out.println();
25 }
26 }
FJN | SI | LP2 PROF. SIDNEY
Exerccio: usando a classe Exerccio: usando a classe javajava..util.Arraysutil.Arrays
O array a[] criado e impresso nas linhas 5-6. Na linha 7, a chamada Arrays.sort(a) ordena os elementos do array, colocando-os em ordem ascendente, como podemos ver na sada da linha 8.
Na linha 9, o mtodo Arrays.binarySearch() invocado. O segundo argumento, 44, o alvo da pesquisa. O mtodo retorna o ndice 2, que atribudo a k na linha 9. A linha 11 confirma que 44 ainda o valor de a[2].
49
FJN | SI | LP2 PROF. SIDNEY
Exerccio: usando a classe Exerccio: usando a classe javajava..util.Arraysutil.Arrays
O mtodo invocado novamente na linha 13, desta vez procurando pelo alvo 45. O valor no encontrado no array, e assim o mtodo retorna um nmero negativo, k=-4. Quando isso acontece, o ndice i=-k-1 ser a posio do array onde o elemento alvo deveria ser inserido para manter a ordem crescente do array. Note que, neste caso, i=-k-1=3, e 45 deveria ser inserido em a[3] uma vez que existem 3 elementos do array que so menores do que 45.
As linhas 16-17 mostram como o mtodo Arrays.fill() funciona: ele preenche o array de 8 elementos b[] com o argumento 55.
Finalmente, a linha 18 mostra como o mtodo Arrays.equals() funciona. Ele vai retornar verdadeiro somente se dois arrayspossuem o mesmo tipo de elementos, o mesmo tamanho e os mesmos valores em cada elemento.
50
FJN | SI | LP2 PROF. SIDNEY
Exerccio: usando a classe Exerccio: usando a classe javajava..util.Arraysutil.Arrays
A sada:44 77 55 22 99 88 33 66 22 33 44 55 66 77 88 99 Arrays.binarySearch(a,44): 2a[2]:44Arrays.binarySearch(a,45): -40 0 0 0 0 0 0 0 55 55 55 55 55 55 55 55 Arrays.equals(a,b): false
51
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
52
continuacontinua >>>>
1 import java.util.Random;
2
3 public class IntArrays {
4 private static Random random = new Random();
5
6 public static boolean isSorted(int[] a) {
7 // retorna false a menos que a[0]
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
53
continuacontinua >>>>
13 public static void print(int[] a) {
14 // imprime os elementos do array especificado em sequencia.
15 if (a==null||a.length==0) return;
16 System.out.print("{"+a[0]);
17 for (int i = 1; i < a.length; i++)
18 System.out.print(","+a[i]);
19 System.out.println("}");
20 }
21
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
54
continuacontinua >>>>
22 public static int[] randomIntArray(int length, int range) {
23 // retorna novo array int, do tamanho definido, cujos elementos
24 // esto randomicamente distribudos no intervalo 0 a range-1:
25 int[] a = new int[length];
26 for (int i = 0; i < a.length; i++)
27 a[i] = random.nextInt(range);
28 return a;
29 }
30
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
55
continuacontinua >>>>
31 public static int[] resized(int[] a, int length) {
32 // retorna um novo array com o tamanho especificado
33 // contendo os mesmos elementos que o array especificado:
34 int[] aa = new int[length];
35 int n = Math.min(a.length, length);
36 System.arraycopy(a, 0, aa, 0, n);
37 return aa;
38 }
39
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
56
40 public static void swap(int[] a, int i, int j) {
41 // permuta os elementos a[i] e a[j];
42 int ai=a[i], aj=a[j];
43 a[i]=aj;
44 a[j]=ai;
45 }
46 }
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
57
continuacontinua >>>>
1 import java.util.Arrays;
2
3 public class TestIntArrays {
4 public static void main(String[] args) {
5 int[] a = IntArrays.randomIntArray(8, 100);
6 IntArrays.print(a);
7 System.out.println("IntArrays.isSorted(a): "+IntArrays.isSorted(a));
8 Arrays.sort(a);
9 IntArrays.print(a);
10 System.out.println("IntArrays.isSorted(a): "+IntArrays.isSorted(a));
11 IntArrays.swap(a, 2, 4);
12 IntArrays.print(a);
13 System.out.println("IntArrays.isSorted(a): "+IntArrays.isSorted(a));
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
58
14 a = IntArrays.resized(a, 10);
15 IntArrays.print(a);
16 a = IntArrays.resized(a, 5);
17 IntArrays.print(a);
18 }
19 }
continuaocontinuao >>>>
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
A sada:{98,1,37,98,83,70,74,95}IntArrays.isSorted(a): false{1,37,70,74,83,95,98,98}IntArrays.isSorted(a): true{1,37,83,74,70,95,98,98}IntArrays.isSorted(a): false{1,37,83,74,70,95,98,98,0,0}{1,37,83,74,70}
59
FJN | SI | LP2 PROF. SIDNEY
Exerccio: Outra Classe Exerccio: Outra Classe ArraysArrays
O programa de teste usa a classe java.util.Arrays e a nossa prpria classe IntArrays. O array a[] inicializado na linha 5 com nmeros randmicos {98,1,37,98,83,70,74,95}. A chamada a sort() na linha 8 transforma a[] em {1,37,70,74,83,95,98,98}.
O mtodo isSorted() retorna false na primeira chamada (linha 7), mas retorna true na segunda (linha 10), aps a chamada ao mtodo sort() (que feita na linha 8). A terceira chamada ao mtodo isSorted() retorna false (linha 13), pois ela acontece aps a chamada ao mtodo swap() (linha 11), que troca elementos de posio.
Finalmente, nas linhas 14 e 16, testamos o mtodo resized(). Na linha 14, ele expande o array, adicionando dois 0s no final. Na linha 16, ele trunca o array, eliminando todos os seus elementos, exceto os 5 primeiros.
60
FJN | SI | LP2 PROF. SIDNEY
Questes de RevisoQuestes de Reviso
1. Como a determinao do tamanho de um array de caracteres se diferencia da determinao do tamanho de um objeto String?
2. O que acontece se voc usa w[5] em uma expresso aps alocar 5 elementos para o array?
3. Qual a diferena entre um array null e um array de tamanho zero?
4. Por que arrays so geralmente processados com laos for?5. Por que um array Objetct[] chamado de array universal?6. Pode um array armazenar elementos de diferentes tipos?
61
FJN | SI | LP2 PROF. SIDNEY 62
continuaocontinuao >>>>
13 public static void main(String[] args) {
14 JFrame janela = new CriaJanela();
15 janela.setVisible(true);
16 // rotina para fechar a janela:
17 janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18 }
19 }
Exerccio: Criando uma janelaExerccio: Criando uma janela