Tag: Arrays de tipos primitivos
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; } } } }