Aprenda Java

  • Página Inicial
  • Contato!
  • Tudo sobre Java Parte 1!
  • Tudo sobre Java Parte 2!
  • Tudo sobre Java Parte 3!
  • Tudo sobre Java Parte 4!
  • Tudo sobre Java Parte 5!
  • Tudo sobre Java Parte 6!
  • Tudo sobre Java Parte 7!
  • Tudo sobre Java Parte 5

    Estruturas de Repetição - Parte 3

    A estrutura for é usada para construir estruturas de loop nos casos para que se conhecem de antemão o número de repetições que devem ser realizadas (como 10 vezes, 20 vezes, etc.). Veja um exemplo:

    
    for(int cc = 1; cc <= 4; cc++) {
        System.out.println("Cambalhota:" + cc);
    }
    
    

    PS: Apesar de poder fazer a declaração dentro do for, não é recomendável.

    No for, podemos fazer com que ele pule os números, além de outras operações, como por exemplo:

    
    for(int num = 0; num <= 100; num += 10) {
        System.out.println(num);
    }
    
    

    Nas estruturas de repetição, também podemos ter condições aninhadas. Nesse caso, as repetições executadas primeiro são as internas, quando parar ele executará a próxima externa, até chegar na última. Dessa forma:

    
    for(int num1 = 1; num1 <= 3; num1++) {
        for(int num2 = 0; num2 <= 2; num2 += 2) {
            System.out.println("Num 1: " + num1 + " e Num 2: " + num2);
        }
    }
    
    

    Vamos criar um Swing com contadores deslizantes e uma lista, ele contará os números de 0 a 5 no primeiro, do 6 ao 20 no segundo e o passo irá de 1 à 4.

    Esse é o código change do primeiro deslizante, faça da mesma forma pra todos os sliders:

    
    int ini = sliIni.getValue();
    lblIni.setText(Integer.toString(ini));
    
    

    Agora vamos programar o evento, mas antes vamos esvaziar a lista, clicando no botão direito dela e indo em model.

    Esse é o código do clicar botão (observe que para trabalharmos com listas, necessitamos usar um objeto e uma importação (javax.swing.DefaultListModel):

    
    int ini = sliIni.getValue();
    int fim = sliFim.getValue();
    int pas = sliPas.getValue();
    
    DefaultListModel lista = new DefaultListModel(); // Importar javax.swing.DefaultListModel.
    
    for(int cont = ini; cont <= fim; cont += pas) {
        lista.addElement(cont);
    }
    lstCont.setModel(lista);
    
    

    Vetores e Matrizes

    Os vetores (arrays) contém espaços dentro de uma mesma variável com valores distintos, sendo contados a partir do 0. No Java, tanto vetores quanto matrizes são identificadas como variáveis compostas.

    No Java, os vetores são considerados objetos, pois tem métodos e atributos. Veja um exemplo de criação de array:

    
    int n[] = new int[4];
    n[0] = 3;
    n[1] = 5;
    n[2] = 8;
    n[3] = 2;
    
    

    Como visto acima, pelo fato do array ser um objeto, a variável criada tem que ter dois colchetes ao lado (indicação de variável composta, podendo os colchetes estando no nome do objeto ou no tipo/classe, mas nunca os dois, ou é um ou é outro), e declarada com new int (obviamente foi declarada assim pelo array ser do tipo int, se o array for de outro tipo deve-se colocar, por motivos óbvios, o tipo/classe invólucro da variável criada, como float, char ou String).

    Simplificando:

    
    int n[] = {3, 5, 8, 2};
    
    

    Para exibir, podemos usar um laço de repetição simples, assim:

    
    int i;
    int n[] = {3, 5, 8, 2};
    
    for(i = 0; i < 4; i++) {
        System.out.print(n[i] + " ");
    }
    
    

    PS: Lembrando que, como em outras linguagens, a contagem dos arrays começam no 0, e não no 1. No exemplo acima são quatro valores contados, de 0 a 3).

    Veja um exemplo de uso de repetições para mostrar valores em arrays:

    
    int num[] = {3, 2, 8, 7, 5, 4};
    System.out.println("Total de casas de Num: " + num.length);
    for(int cont = 0; cont < num.length; cont++) {
        System.out.println("Na posição " + cont + " temos o valor " + num[cont]);
    }
    
    

    PS: No for tem a subtração de 1 pelo fato do array começar em zero.

    Pelo array ser um objeto, ele tem características, propriedades, atributos e métodos (funções).

    Todo vetor tem um tamanho, podemos ver no código acima, exibido no primeiro System.out.print, onde o objeto pode ter métodos (aqueles em parênteses, como o equals()) ou os atributos (sem parenteses, no caso apenas o length).

    A estrutura de repetição é genérica, usada para todos os vetores no código, independente do tamanho dos mesmos, independente do tamanho:

    
    String mes[] = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho",
    "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}; int tot[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for(int cont = 0; cont < mes.length; cont++) { System.out.println(mes[cont] + " tem " + tot[cont] + " dias."); }

    Nos arrays, podemos usar o for it (para cada, que é uma versão "resumida" do for). Esse tipo de for só funciona em vetores e deverá ser do mesmo tipo do array. Veja um exemplo:

    
    int num[] = {3, 5, 1, 8, 4};
    for(int valor: num) {
        System.out.println(valor);
    }
    
    

    Outro exemplo, com números reais:

    
    double num[] = {3.5, 2.75, 9, -4.5};
    for(double valor: num) {
        System.out.println(valor);
    }
    
    

    Se quiser colocar os vetores em ordem, basta colocar a classe Array, com o método Arrays.sort() (não esqueça da importação de java.util.Arrays, dessa forma;

    
    double num[] = {3.5, 2.75, 9, -4.5};
    Arrays.sort(num); // Importe.
    for(double valor: num) {
        System.out.println(valor);
    }
    
    

    A classe Arrays também é usada para buscas binárias no Java, com o método Arrays.binarySearch(), dessa forma:

    
    int vet[] = {3, 7, 6, 1, 9, 4, 2};
    for(int valor: vet) {
        System.out.println(valor + " ");
    }
    int pos = Arrays.binarySearch(vet, 1); // Importe.
    System.out.println("\nEncontrei o valor na posição " + pos);
    
    

    PS: Caso seja passado um valor que não está no array, ele exibirá um número inexistente com sinal negativo (até por não existir índices negativos no Java).

    Se quiser preencher todos os espaços de um array com um mesmo valor, podemos utilizar o método Arrays.fill(), dessa forma:

    
    int vet[] = new int[20];
    Arrays.fill(vet, 0);
    for(int valor: vet) {
        System.out.println(valor);
    }
    
    

    Além dos vetores, também temos as matrizes (arrays bidimensionais). Veja um exemplo de uma em Java:

    
    int l, c;
    
    int matr[][] = {{0, 1, 2, 3}, {10, 11, 12, 13}};
    
    for(l = 0; l < 2; l++) {
        for(c = 0; c < 4; c++) {
            if(c < 4 - 1) {
                System.out.print(matr[l][c] + " ");
            }
            else {
                System.out.println(matr[l][c]);
            }
        }
    }
    
    

    Elas também podem ser declaradas assim:

    
    String cores[][] = new String[3][3];
    
    cores[0][0] = "Azul";
    cores[0][1] = "Amarelo";
    cores[0][2] = "Vermelho";
    cores[1][0] = "Verde";
    cores[1][1] = "Laranja";
    cores[1][2] = "Violeta";
    cores[2][0] = "Branco";
    cores[2][1] = "Preto";
    cores[2][2] = "Cinza";
    
    for(int l = 0; l < 3; l++) {
        for(int c = 0; c < 3; c++) {
            System.out.print(cores[l][c] + " "); 
        }
        System.out.println("");
    }
    
    

    Vamos criar um Swing que mostre vetores, no qual podemos adicionar e remover valores desejados. Ele terá três botões, um controle giratório e uma lista.

    Esse é o código que vai na primeira linha da classe pública (abaixo de javax.swing.JFrame):

    
    int vet[] = new int[5];
    DefaultListModel lista = new DefaultListModel(); // Importar.
    int selec = 0;
    
    

    Código do botão Adicionar (o mesmo código é colocado no construtor, só que sem o list.removeAllElements() abaixo de initComponents(), também pode ser usado uma rotina):

    
    vet[selec] = Integer.parseInt(numVal.getValue().toString());
    lista.removeAllElements();
    for(int cont = 0; cont < vet.length; cont++) {
        lista.addElement(vet[cont]);
    }
    
    

    O código do Remover é o mesmo acima, mudando o fato do vetor ser zerado, dessa forma:

    
    vet[selec] = 0;
    
    

    O mesmo vale pro botão Ordenar, é quase igual ao primeiro também, colocando apenas esse método no lugar da declaração do vetor (não esqueça da importação):

    
    Arrays.sort(vet); // Importe
    
    

    Para ligar a lista do frame ao objeto do código, selecionaremos a lista e em propriedades e em model, escolha Código personalizado e coloque o nome do modelo do objeto (no caso, será lista).

    Para que podermos clicar em determinado valor da lista, mostre a posição dele no vetor, clique na lista e nos eventos, vamos em mouse e em mouseclicked. Veja abaixo o código:

    
    selec = lstVet.getSelectedIndex();
    lblSel.setText("[" + selec + "]");