Tipos de Dados Primários
Em Java podemos definir as nossas variáveis como sendo do tipo Objecto – sendo esse objecto um dos já existentes na API ou um dos definidos por nós – ou, um dos denominados, tipos primários:
· boolean: admite os valores true ou false.
· char: Usa o código UNICODE
· Inteiros: Diferem nas precisões e podem ser positivos ou negativos.
o byte: 1 byte.
o short: 2 bytes.
o int: 4 bytes.
o long: 8 bytes.
· Reais em ponto flutuante: diferem nas precisões e podem ser positivos ou negativos.
o float: 4 bytes.
o double: 8 bytes.
Estruturas de Dados
Depois de vos apresentar os tipos primários de dados, vou-vos mostrar outro tipo de estruturas mais complexas onde também é possível armazenar informação.
Antes demais esta não pretende ser uma “aula” acerca de estruturas de dados, pois para tal muitos tutoriais teriam de ser feitos só sobre essa tema, mas sim uma apresentação de algumas estruturas já existentes na forma de classes na API do Java e que podem ser utilizadas pelo programador. São muito úteis uma vez que já possuem definidos um número elevado de métodos de grande funcionalidade sobre as mesmas.
Vamos ver algumas das mais úteis e mais utilizadas (na minha opinião, obviamente este tutorial poderia ser completado com muitas outras). Para cada uma, irei dar alguns exemplos de utilização mas, todas elas possuem muitas mais funcionalidades que poderão ser utilizadas, funcionalidades essas que poderão descobrir na API da classe em questão – cujo link indicarei em todas elas.
Array

Um array é uma estrutura de tamanho fixo definido aquando da sua criação, que pode conter um único tipo de dados, tipo esse também definido quando o array é criado.
Cada elemento do array pode ser acedido através do sua posição dentro do mesmo, sendo a primeira posição de um array de tamanho n a posição 0 e a última a posição n-1. O exemplo em seguida demonstra o funcionamento de um array:

O output do programa anterior, seria:
Um método de grande utilidade quando se utiliza arrays é o método length que nos permite saber o tamanho do array. Utilizando o exemplo anterior, se quisessemos conhecer o tamanho do array anArray, bastava fazer anArray.length.
Também útil é o facto de podermos criar arrays bidimensionais (matrizes de dimensão N x M), podendo os mesmos serem inicializados e utilizados como demonstra o exemplo seguinte:
Vector
A classe Vector é possivelmente uma das mais úteis da API do Java e, talvez uma das mais utilizadas. Um vector, de um modo simplista, é um array dinâmico. Quer isto dizer que o tamanho deste não é fixo, podendo-se acrescentar ou remover posições com facilidade. No entanto, isto é um processo que poderá consumir muitos recursos do sistema se for utilizado incorrectamente uma vez que, sempre que a estrutura é alterada, o que o Java faz é criar uma nova estrutura com o tamanho desejado e copia os dados da anterior estrutura para a nova. O Vector apenas aceita como seus elementos Objectos, não podendo portanto guardar nele tipos primários de dados. Eis um exemplo de como utilizar a classe Vector:
O programa anterior teria como output o seguinte:
Linked List
A classe LinkedList é uma implementação da Interface List e, tal como o nome indica é uma lista ligada, ou seja, é uma lista em que cada nó da mesma tem informação sobre qual é o nó seguinte e o nó anterior. Esta também é uma estrutura dinâmica. Em comparação com o Vector, tem uma performance superior a nível de inserção/remoção de elementos no início e fim da lista, mas uma menor performance quando os elementos a remover/inserir são no meio da mesma.
HashMap
A classe HashMap implementa a interface Map e, é nada mais do que a representação Java da estrutura de dados Hash Table. Esta estrutura serve para guardar pares <chave,valor>, sendo chave e valor do tipo definido pelo programador. As chaves devem ser únicas e, dada uma chave conseguimos obter o seu valor correspondente.
Estruturas Condicionais e Ciclos
O código Java, por defeito, será executado sequencialmente. No entanto, programas – minimamente – mais avançados, requerem uma execução condicional do código por nós construído. Para efectuar esses “malabarismos” podemos utilizar as instruções que enunciarei em seguida.
If..Else
Esta instrução valida uma instrução. Se ela for verdadeira executa o bloco de código do if, caso contrário entra no bloco de código do else. Note-se que não é necessário haver um else, o que não pode é haver um else sem um if.
É também possível criar uma sequência de instruções:
?:
Uma forma muito útil e minimalista de introduzir uma condição algures no nosso código é utilizando o operador condicional ?:, utilizando-se na forma boolean_expr ? expr1 : expr2.Se o resultado da expressão booleana for true, o resultado é expr1, senão, o resultado é expr2.
Switch..Case
O switch..case serve para avaliar uma expressão inteira e dependendo do resultado, realizar uma acção.
Deverão sempre ser utilizados breaks para saltar para fora do switch e devemos fornecer sempre uma opção default onde a condição entrará quando der um resultado que não se enquadre em nenhum dos cases (útil para quando acontece um resultado inesperado).
While
Existem 3 ciclos condicionais em Java, o while é o mais simples dos 3. O bloco de execução do while é executado enquanto uma condição for/não for verdade.
Do..While
O ciclo do..while faz a avaliação da expressão no fim do ciclo e não no início.
For
O ciclo for é amplamente utilizado em Java. Consiste numa inicialização, numa condição de paragem do ciclo e dum iterador sobre a variável inicializada.
Continue e Break
Os ciclos, muitas vezes são utilizados em conjunto com as estruturas condicionais e, muitas vezes é útil definir uma de duas situações:
· Se se verificar uma determinada condição, o programa deverá sair do ciclo mesmo que este não tenha atingido o seu final – nesse caso deveremos utilizar o break;
· Se se verificar uma determinada condição, o ciclo deverá iterar de imediato, passando portanto à próxima iteração do mesmo – nesse caso utilizamos o continue.
Trabalho de Casa (Próxima Página)

































