Tag: Classes “wrapper”

Programação avançada – capitulo 2

Acerca dos tipos primitivos:
foi removida a noção de unsigned

O Java faz uso do unicode

Existe o Boxing e o Unboxing em Java, sendo que um exemplo de Boxing é o da substituição automaticamente por um objeto da classe wrapper correspondente, isto é:

public class e01 {
    public static void main(String args[]){
            System.out.println("\n Primeiro exemplo de Java");
            Integer a = 100;
            Integer a2 = new Integer(101);
            int b = 200;
            System.out.println(a + " - " + b + " - " + a2);
            
        }
}

Os arrays de tipos primitivos:
podem conter tipos primitivos
ou
referências para objetos

Existem duas formas de os representar:
int [] agora;
ou
int ontem[];

public class e02 {
    public static void main(String args[]){
            System.out.println("\n Os arrays em Java");
            int [] antes = new int[12]; //para criar: reservar espaço em memória
            int depois [] = {1,2,3,4,5,6,7,8,9}; //array reservado em memória dinamicamente, atribuição de arrays
            
            antes[0] = 0;
            
            System.out.println("\n Aceder a um elemento do array: " + antes[0]);
            System.out.println("\n Aceder a um elemento do array: " + depois[1]);
            
            System.out.println("\n Aceder ao total de elementos do array: " + antes.length);
            System.out.println("\n Aceder ao total de elementos do array: " + depois.length);
            
            //copiar arrays
            int [] copy = {0,1,3};
            int [] paste = new int[3]; //tem que ter o tamanho do copy
            System.arraycopy(copy, 0, paste, 0, copy.length);
            
            System.out.println("\n Aceder ao total de elementos do array depois de copiado: " + paste[1]);
        }
}

Os arrays como argumentos de métodos

public class e03 {
    static boolean arraysiguais(int []c, int []p){
        if(c.length != p.length){
            return false;
        }
        for(int i=0; i < c.length; i++){
            if(c[i] != p[i]){
                return false;
            }
        }
    return true;
    }
    
    public static void main(String args[]){
            System.out.println("\n Os arrays em Java: arrays como argumentos de métodos");
            int [] copy ={100,200,300};
            int [] paste = new int [3];
            
            //preencher cada um dos arrays
            for(int i=0; i< copy.length ;i++){
                copy[i]=i*i;
            }
            for(int i=0; i< paste.length ;i++){
                paste[i]=i*i*i;
            }
            
            if(arraysiguais(copy, paste)){
                System.out.println("\n Iguais");
            }else{
                System.out.println("\n Diferentes");
            }
        }
}

Os arrays como retorno de métodos:

public class e04 {

    static int[] arrayRetorno(int []a, int b[]){
        int extra[]= new int[Math.min(a.length, b.length)];
        
        for(int i=0; i< extra.length; i++){
            extra[i]=a[i]*b[i];
        }
     return extra;   
    }
    
    public static void main(String args[]){
            System.out.println("\n Os arrays em Java: arrays retorno de métodos");
            int arg1[] = {1,2,3};
            int arg2[] = {3,2,1};
            int argC[];
            
            argC = arrayRetorno(arg1, arg2);
            
            for(int i = 0; i< argC.length; i++){
                System.out.println("\n infos: " + argC[i]);
                
            }
        }
}

Os arrays multidmensionais:

public class e05 {
    static int[][] preenche(int a[][]){
        int aux[][]=new int[a.length][a[0].length];
        
        if(a.length ==0 || a[0].length==0){
            return null;
        }
        
        for(int i=0; i< a.length; i++){ //numero de linhas
            for(int j=0; j< a[i].length; j++){ //numero de colunas
                aux[i][j]=(i+1)*(j+1);
            }
        }
        return aux;
    }
    static void mostra(int a[][]){
        System.out.println("\n numero de linhas:" + a.length);
        System.out.println("\n numero de colunas:" + a[0].length);
        for(int i=0; i< a.length; i++){ //numero de linhas
            for(int j=0; j< a[i].length; j++){
                System.out.println(a[i][j]);
            }
            System.out.println("\n");
        }
    }
    public static void main(String args[]){
            System.out.println("\n Os arrays em Java: arrays multidimensionais");
            
            int multi[][] = new int[2][3];
            multi=preenche(multi);
            mostra(multi);
        }
}

Os operadores podem ser aplicados a todos os tipos de primitivos (int, float,…) contudo existem operadores que se podem aplicar a objetcos (referências para, cópia da referência) e que são:
=
==
!=
outros operadores que também funcionam com a classe String:
+
+=

Exemplo da passagem de um objecto por referência:

class Texto {
    String txt = "ola Java";
}

public class e06 {
    static void funcao(Texto t) {
        t.txt = "Dentro";
    }
    public static void main(String args[]) {
        System.out.println("\n Passagem de objetos a funções");
        Texto txt1 = new Texto();
        txt1.txt = "Ola Mundo";
        System.out.println("\n primeira versão: " + txt1.txt);
        funcao(txt1);
        System.out.println("\n segunda versão: " + txt1.txt);
    }
}

Exemplo do uso do operador equals:

class Texto {
    String txt = "ola Java";
}

public class e06 {
    static void funcao(Texto t) {
        t.txt = "Dentro";
    }
    public static void main(String args[]) {
        System.out.println("\n Passagem de objetos a funções");
        Texto txt1 = new Texto();
        Texto txt2 = new Texto();
        txt1.txt = "Ola Mundo";
        
        System.out.println("\n primeira versão: " + txt1.txt);
        funcao(txt1);
        System.out.println("\n segunda versão: " + txt1.txt);
        
        //operador equals
        txt2.txt = "Ola Mundo!!!";
        System.out.println("\n comparação: " + txt1.txt.equals(txt2.txt));
    }
}

O método equals não poderia ser usado com o objecto txt1 e txt2, porque ele não estava redefinido dentro da classe Texto.

Existem também o operador cast, e que é utilizado para:
conversões de tipos de maior para tipos de menor capacidade
ou outro casos em que não seriam feitas conversões implícitas

public class e07 {
    public static void main(String args[]) {
        System.out.println("\n Conversões de tipo");
        System.out.println("\n uma conversão implicita");
        int a = 100;
        float b;
        b = a;
        System.out.println("\n a: " + a + "\t b: " + b);
        
        System.out.println("\n uma conversão explicita (cast)");
        float d = 200;
        int e;
        e= (int)d;
        System.out.println("\n d: " + d + "\t e: " + e);
    }
}

Para testar um determinado tipo de objeto podemos fazer uso do instanceof

class Testar{
    char t= 'p';
}

public class e07 {

    public static void main(String args[]) {
        System.out.println("\n Testar o tipo de objeto");
        Testar t = new Testar();
        System.out.println(t instanceof Testar);
    }
}

Existe aqui também uma variante do ciclo for, que é o foreach, e que pode ser utilizado com arrays e coleções

public class e07 {

    public static void main(String args[]) {
        System.out.println("\n O ciclo for(each)");
        int i[]={0,1,2,3,4,5,6,7,8,9};
        for(int aux: i){
            System.out.println(i[aux]);
        }
    }
}

por vezes é importante fazer uso das instruções continue e break, sendo que quando o break é executado dentro de um ciclo, o ciclo termina e a execução continua na instrução a seguir
já o uso do continue, dentro de um ciclo while ou do while, termina a iteração corrente, continuando o ciclo a ser executado na iteração seguinte.
o uso do continue, dentro de um ciclo for, provoca a passagem ao incremento do ciclo e em seguida à avaliação da expressão condicional.
podem ser usados label com o caso do “:” (sem aspas) que serve para identificar ciclos do tipo: for, while ou do while

public class e07 {

    public static void main(String args[]) {
        System.out.println("\n a intrução do break e do continue");
        int i[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println("\n primeira estrutura");
        primeiro:
        for (int aux : i) {
            if (aux > 5) {
                break primeiro; //ou break;
            }
            System.out.println(i[aux]);
        }
        System.out.println("\n segunda estrutura");
        segundo:
        for (int aux2 : i) {
            if (aux2 > 5) {
                System.out.println(i[aux2]);
            }
            if (aux2 == 8) {
                System.out.println("\n na segunda estrutura");
                continue segundo;
            }
        }
    }
}
Tags : , , , , , , , ,