Unidade 12 - Arrays.pdf

62
 Sistemas de Informação Sistemas de Informação Linguagem de Programação II 1

Transcript of Unidade 12 - Arrays.pdf

  • 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