You are on page 1of 102

Programação Java

Versões do Java

Regras para programação Java:
• Regra: Nome do arquivo deve ser o mesmo da
classe

Convenções:
• Ao escrever uma classe, inicia-se sempre com
letra maiúscula (e.g.: Carro, Casa, Pessoa,
Aluno)
• Quando existe um nome com Mais de uma
palavra, da segunda palavra em diante devese colocar a primeira letra maiúscula.(e.g.:
olaMundo, cadaDoJoao)

Comentários
• Para comentários de uma linha, é utilizado o
“//”
• Para comentários de duas ou mais linhas, é
utilizado o “/*” para iniciar e o */ para fechar

Os tipos de dados que serão vistos a seguir, são todos ‘primitivos’

TIPOS DE DADOS

Tipos de dados (inteiros) .

Tipos de dados(ponto flutuante) .

Tipos de dados(caracteres) • Tipo: Caractere • Storage Requirement: 1 byte • Range: 0 a 256 .

Tipos de dados(caracteres) .

Caracteres especiais .

Tipos de dados(booleana) • • • • • Tipo: boolean Storage Requirement: 1 bit Range: 0 a 1 O 0 representa “false” O 1 representa “true” .

VARIÁVEIS .

existe uma diferença entre a letra ‘a’ e a letra ‘A’ . nome2. nomeN • Exemplos: – double salario – long populacaoDaTerra – Char letra • As variáveis são case sensitive..Variáveis • Toda variável possui um tipo • Declaração: – Tipo nome. .. nome3.. • Para declarar mais de uma variável utiliza-se virgula: – Tipo nome1. ou seja.

0 – int idade = 12 .Inicializando variáveis • Para inicializar uma variavel. utiliza-se o operador de atribuição “=“ • Exemplos: – double numero = 65000.

após serem inicializadas não possuem mais o seu valor alterado • Exemplo: – final double CM_POR_POLEGADA = 2. .54.Constantes • Constantes são variáveis que possuem a palavra “final” • Essas variaveis.

OPERADORES .

Lembrete • os operadores somente devem ser utilizados com valores que são de tipos primitivos. • Também são chamados de operadores binários por precisarem de dois operandos para realizar a operação .

também há o mod ( % ).Operadores aritméticos • Existem quatro operadores aritméticos: – ‘+’ (soma) – ‘-’ (subtração) – ‘*’ (multiplicação) – ‘/’ (divisão) • Além desses quatro operadores. ele devolve o resto de uma divisão .

– Int num3 = num%num2. . – Int num2 = num – 2.Operadores aritméticos • Exemplos: – Int num = 5*4.

Operadores aritméticos • Existem os operadores de incremento e decremento: – ‘++’ – ‘--’ Operador Ação • PodemSoma sero valor utilizados de acordo com tabela: da variável ‘i’ com ‘5’ e depois adiciona ‘1’ ao valor da a variável ‘i’ 5 + i++ 5+ ++i Adiciona ‘1’ ao valor da variável ‘i’ e em seguida soma o valor de ‘i’ com o ‘5’ 5 + i-- Soma o valor da variável ‘i’ com ‘5’ e depois retira ‘1’ ao valor da variável ‘i’ 5+ --i retira ‘1’ ao valor da variável ‘i’ e em seguida soma o valor de ‘i’ com o ‘5’ .

Operadores Relacionais • Utilizados para fazer a comparação de dois valores: • São eles: – >. <. caso contrario obtem-se ‘false’ . <=. !=(diferente) • Se a expressão é verdadeira. obtem-se o valor ‘true’. >=. ==(igual).

Operadores lógicos • Fazem a união de duas ou mais operações relacionais • São eles: – && (também chamado de ‘e’) realiza uma multiplicação lógica – || (também chamado de ‘ou’) realiza uma soma lógica .

y = 10 X==5 && y<=10 true(1) * true(1) => true(1) X==5 || y<10 true(1) + false(0)=> true(1) .Operadores lógicos • Exemplos: int x =5.

sua função é inverter o valor booleano • Exemplo: int x=5. y=10 !(x<y) !(5<10) !(true) False .Operadores lógicos • Existem um terceiro operador lógico chamado ‘not’.

Operador ternário • É chamado de ternario por possuir tres partes: • If – then – else. porém tem o tamanho reduzido: • Exemplo: int x = 5. . : xMaior(). x<y ? yMaior(). y = 10. funciona como se fossse um if.

Operadores bit a bit (bitwise) • Utilizado para trabalhar com qualquer tipo do grupo dos inteiros. • São eles: – – – – & (e) | (ou) ^ (xor) ~ (not) . esses operadores trabalham diretamente com os bits que compoêm um número.

// 0111 1111 int mask = 250.// 0111 1010 . // 1111 1010 int netid = ip & mask.Operadores bit a bit (bitwise) • Exemplo(aplicação em operação de calculo de redes)(muito lgl): int ip = 127.

Operador shift (bitshift) • Desloca os bits de um número • São eles: – << (desloca para a esquerda) – >> (desloca para a direita) – >>> (desloca para a direita sem sinal) .

//0000 0001 int a = num<<2. //0000 0100 .Operador shift (bitshift) • Exemplo: deslocar dois bits para a esquerda do numero 1 (0000 0001) int num = 1.

FUNÇÕES MATEMÁTICAS .

deve-se importar a classe para o seu projeto da seguinte forma: – import static java.lang. • Para utilizar as funções da classe Math sem referencia-la.*.Math. dessa forma fica mais fácil para desenvolver expressões aritméticas. .Classe Math • A classe Math possui diversas funções e constantes.

• Potência: Math.Funções da classe Math: – Funções algébricas: • Raiz Quadrada: Math.3).pow(2. // mesmo que 2^3 .sqrt(4).

Funções da classe Math(cont): • Funções trigonometricas: – – – – Seno: Math.atan2 // devolve o valor do angulo para qualquer um dos 4 quadrantes.sin Cosseno: Math. .atan //devolve o valor do angulo para os quadrantes I e IV – Arco Tangente 2: Math.cos Tangente: Math.tan Arco Tangente: Math.

Funções da classe Math(cont): • Funções exponenciais – Math.log10 .log – Log na basse 10: Math.exp – Log: Math.

141592653589793 • Math.E //2.PI //3.718281828459045 .Constantes da classe Math: • Math.

CONVERSÃO DE TIPOS .

Conversão entre os tipos numéricos • Algumas vezes será necessário converter valores entre os tipos de dados • A conversão pode ser realizada de duas formas: – Implícita – Explícita .

Conversão implícita • Quando não é necessário mostrar que acontece a conversão • As linhas pontilhadas representam perda de precisão • Ocorre um truncamento char(2) Tipo(num de bytes) Byte(1) short(2) int(4) long(8) float(4) double(8) .

o java utiliza-se da seguinte regra para dar o tipo resultante: um dos operadores é do tipo double? Sim O outro operador terá seu tipo convertido para double Não um dos operador es é do tipo float? Sim O outro operador terá seu tipo convertido para float Não um dos operador es é do tipo long? Sim O outro operador terá seu tipo convertido para float Não Ambos os operandos serão convertidos para o tipo int .Combinação de dois valores diferentes com operadores binários • Quando dois valores de tipos diferentes são combinados com um operador binários.

Conversão explícita • A conversão explicita acontece para qualquer outro tipo de conversão que não está listado na imagem: char(2) Tipo(num de bytes) Byte(1) short(2) int(4) long(8) float(4) double(8) .

também chamada de “cast”.Conversão explícita • A conversão explicita. • Nos casts é realizado o truncamento do número . • Note que neste cast houve perda de precisão. o valor da variavel nx é “9” por que a parte decimal é descartada. int nx = (int) x.997. é realizada da seguinte forma: double x = 9.

pode-se utilizar a função round que arredonda para o inteiro longo mais próximo.997. int nx = (int) Math.round(x). double x = 9.Dica para conversão explicita • Caso você queira arredondar o número para o inteiro mais próximo. • Agora a variável nx possui o valor 10 .

+(unário) –(unário) () (cast) new Direita para Esquerda */% Esquerda para direita +- Esquerda para direita << >> >>> Esquerda para direita < <= > >= instanceof Esquerda para direita == != Esquerda para direita & Esquerda para direita ^ Esquerda para direita | Esquerda para direita && Esquerda para direita || Esquerda para direita ?: (operador ternário) Direita para Esquerda = += -= *= /= %= &= |= ^= <<= >>= >>>= Direita para Esquerda .Hierarquia dos parênteses e operadores Operadores Associatividade [] . () Esquerda para direita ! ~++ -.

a && b || c • a e b serão comparados e o seu resultado será comparado com c .Hierarquia dos parênteses e operadores • Exemplo: boolean a.c.b.

. • O valor de c será agregado a b e o resultado será agregado ao valor de a .c.. a += b += c.b. .Hierarquia dos parênteses e operadores • O operador += possui associatividade da direita para a esquerda: int a.

Tipos enumerados • Algumas vezes as variáveis devem ter somente alguns tipos de valores específicos de valores. Tamanhos t = Tamanhos.PEQUENO. uma pizza pode ser pequena. pode-se definir tipos enumerados para que os erros diminuam: • Exemplo de declaração: enum Tamanhos{PEQUENO. MEDIO. para que um programa possua uma melhor integridade. GRANDE}. por exemplo. . média ou grande.

STRINGS .

// essa string está vazia . Paulista”.Definição de string • É uma classe Java utilizada para guardar uma sequencia de caracteres. • Para utilizar as Strings declara-se a variável da seguinte forma: • String Rua = “Av. • Note que apesar de ser utilizado como um tipo de variável. • String str = “”. esse tipo não é primitivo e portanto não é possível aplicar os operadores relacionais e lógicos diretamente.

// b = “la Mundo” String c = a. // c = “la Mu“ .substring(2. String b = a. • Também são strings 0 1 2 3 4 5 6 7 • Exemplo: o l a M u n d 8 9 o \0 String a = "ola Mundo". 6).substring(2).Substrings • São subconjuntos de caracteres dentro das strings.

// c = “abc123” . String c = a+b.Concatenação • Significa juntar duas strings formando uma nova • Utiliza-se o operador + • Exemplo: String a= “abc". String b = “123".

• Exemplo: String a =“abc”. portanto a e A são diferentes.Verificar se duas Strings são iguais • Para a verificação utiliza-se a função equals() • A função equals é case sensitive.equals(b) // vai retornar o booleano //false “abc”.equals(a) // vai retornar o //booleano true . a. b = “123”.

Verificar se duas Strings são iguais • Para ignorar o case Sensitive. utilize a função equalsIgnoreCase() da mesma forma que a função equals() .

Operador == e as Strings • O operador igual utilizado com Strings(e qualquer outro objeto que estudaremos mais para frente) compara endereços de memoria) • Portanto. a == null // vai retornar o booleano true . o seu valor será null • Exemplo: String a=null. se a String não é inicializada.

charAt(2).Obtendo uma letra em um String • Para obter uma determinada em uma String utiliza-se o seguinte comando: 0 1 2 3 4 5 6 7 a b c d e f g \0 String a = “abcdefg”. // letra = „c‟ . Char letra = a.

length() == 0 • A função length() retorna o números de caracteres que a String possui str. existem dois métodos: String str=“”. str. para verificar se a string está vazia.equals(“”) // compara com uma String vazia .String vazia • A string também pode estar vazia.

toLowerCase(b). // c = “abcdefg” String d = “ abcdefg ” //note que há espaços String e = d. String b = a. // b = “ABCDEFG” String c = b.trim() // e = “abcdefg” .toUpperCase(a).Mais funções para String • • • • • String a = “abcdefg”.

append(“123”).toString() // retorna “abc123” . para que o uso dos recursos seja diminuído. utiliza-se o StringBuilder: StringBuilder builder = new StringBuilder().Construtor de Strings • A concatenação de Strings pega duas String e gera uma nova. // adiciona “123” String resultado = builder. // adiciona “abc” builder.append(“abc”). //cria o construtor de Strings builder. isso consome muitos recursos.

char c) // adiciona um caractere em um determinado indice StringBuilder insert(int offset.lang. String str) // insere a string str a partir da posicao i StringBuilder insert(int offset. int endIndex) // apaga o conjunto de letras no intervalo informado String toString() // retorna a string que foi feita .0 StringBuilder() // cria o construtor com uma string vazia int length() // rtorna o tamnho da string StringBuilder append(String str) // agrega o valor da string str na string StringBuilder append(char c) // agrega o valor na string void setCharAt(int i.StringBuilder 5.Funções do StringBuilder • • • • • • • • • • java. char c) // insere o caractere c na posição offset StringBuilder delete(int startIndex.

.

CONTROLE DE FLUXO .

. . . { int k.Escopos • Escopos são conjuntos de instruções que estão dentro de um par de parênteses • As variáveis somente existem dentro do escopo em que foram declaradas • Exemplo: public static void main(String[] args) { int n. . . . } // a variável k não existe mais aqui } .

.Comando break • O comando break... break..... } Os comandos abaixo do break. ... não serão executados. serve para iterromper o fluxo dentro de um escopo: { .

.. } ...Declarações Condicionais • A declaração condicional no java possui a seguinte forma: If(condição) umaDeclaração • Se você deseja colocar mais de uma declaração. é necessario utilizar um par de parenteses para determinar o escopo If(condição) { declaração1 declaração2 .

Declarações condicionais • Caso seja necessário realizar uma declaração se a condição for false. utiliza-se o comando else: If (condição) declaração1 else declaração2 • Se você desejar colocar mais de uma declaração utilize o par de parênteses para determinar o escopo if (yourSales >= target) { performance = "Satisfactory". } else { performance = "Unsatisfactory".01 * (yourSales .target). } • A parte do else é sempre opcional . bonus = 100 + 0. bonus = 0.

//x é neutro } else { ..//x é positivo } • Pode-se repetir o comando else if quantas vezes for necessário .// x é negativo } else if(x==0) { ..... que da mais possibilidades de execução das declarações condicionais: if(x<0) { ..Declarações Condicionais • também existe o comando else if..

While • O while executa um conjunto de declarações até que sua condição seja falsa: while(condição) declaração Ou while(condição) { declaração1 declaração2 .. primeiro é realizado o teste e em seguida são executadas as declarações .. } Nesse modelo de loop.Loop indeterminado ..

Loops indeterminado – Do While • O Do While executa um conjunto de declarações até que sua condição seja falsa: do declaração While(condição). primeiro é são executadas as declarações e depois é realizado o teste para verificar se acontecerá mais uma volta... . } while(condição).. Nesse modelo de loop. Ou do { declaração1 declaração2 .

for • O loop for. } • Cuidado ao utilizar contadores de ponto flutuante.Loop determinado . i <= 10. a igualdade ou diferençã geralmente não funciona por causa dos arredondamentos . porém possui um número determinado de voltas • Possui três declarações em sua configuração: for (int i = 1. i++) Declaração Ou for (int i = 1.. funciona como o while.. i++) { declaração1 declaraçao2 .. i <= 10.

. . • O break é opcional • De forma superficial. Break.. } • Se a variável umNumero for igual a um dos cases são executadas as declarações referentes.. para resolver esse problema. se não for encontrado o valor o default é executado.. é um if fresco . existe o switch: Switch(umNumero) { case 1: ..... case 2: ..... Break. case n: .. Default: . • O break serve para que o switch seja interrompido após as declarações terem sido finalizadas.. Break.Seleções múltiplas – a declaração switch • A repetição de ifs de orma sequencial pode ser cansativa.

Aplicação do break em um laço while Scanner in = new Scanner(System. //recebe o numero do teclado if(n==0) break. //classe que //faz leitura do teclado Int n.println(5/n).out. } .in).nextInt(). System. while(true) { n = in.

Labels • É possível rotular os escopos com labels da seguinte forma: • Com a rotulação dos escopos. lacoWhile: while (true) // this loop statement is tagged with the label { read_data2: for (int i = 0.print(i+"Enter a number >= 0: ").out. i < 3.in). é possivel escolher quais escopos serão parados: Scanner in = new Scanner(System. if (n < 0) // should never happen—can't go on { break. // vai parar apenas o laço for } // break out of read_data loop } } . i++) { System. n = in. int n.nextInt().

n = in.print(i+"Enter a number >= 0: "). if (n < 0) // should never happen—can't go on { break lacoWhile.in).out.Labels • É possível rotular os escopos com labels da seguinte forma: Scanner in = new Scanner(System. //vai para o while e consequentemente o for também } // break out of read_data loop } } . int n. lacoWhile: while (true) // this loop statement is tagged with the label { read_data2: for (int i = 0.nextInt(). i < 3. i++) { System.

o comando continue. faz com que o fluxo volte para o começo do escopo: Scanner in = new Scanner(System.out. while (sum < goal) { System. o fluxo é desviado para a condição do while .print("Enter a number: ").in). sum += n.nextInt().Comando continue • Ao contrario do break. // not executed if n < 0 } • Se o valor de n for inferior a zero. n = in. if (n < 0) continue.

BIG NUMBERS .

pode acontecer de as variáveis primitivas não terem a capacidade para guarda-los.O que fazer? • Se você possui um número inteiro ou real que seja muito grande. que guardam respectivamente números inteiros e reais . portanto será necessário a utilização das classes BigInteger e BigDecimal.

BigInteger d = a. BigInteger c = a. //c * (a+b) • Perceba que 100 e 200 não são números muito grandes .add(a)). // representa a operação //c = a+b.valueOf(200).add(b).multiply(b). // d = a*b BigInteger e = c.multiply(b. BigInteger b = BigInteger.valueOf(100).Exemplo: BigInteger a = BigInteger.

Funções do BigInteger BigInteger add(BigInteger other) BigInteger subtract(BigInteger other) BigInteger multiply(BigInteger other) BigInteger divide(BigInteger other) BigInteger mod(BigInteger other) // resto de divisão .

Funções do BigDecimal BigInteger add(BigInteger other) BigInteger subtract(BigInteger other) BigInteger multiply(BigInteger other) BigInteger divide(BigInteger other) Note que não há resto de divisão para números reais. .

ARRAYS .

cada par de colchetes adicionados em um array significa uma dimensão. que serão vistos de forma mais profunda. • O número máximos de dimensões é o tamanho da sua imaginação e a capacidade do computador. • Utiliza-se o par de colchetes([]) para determinar um array. e por esse índice.O que são? • É uma estrutura de dados que guarda um conjunto de valores do mesmo tipo. pode ser acessado. • Arrays também são um tipo de coleção. cada valor possui um número de índice. nas próximas aulas .

O que são?
• Os índices sempre começam a ser contados a
partir do zero, e o valor do ultimo índice é
sempre o número anterior ao tamanho do
array:
Array de 10 índices:
Índices do array
0

1

2

3

4

5

6

7

8

9

55

47

897

94

87

89

51

547

41

10

Conteúdo do array

Como declarar um array
Int[] a = new int[100];
Ou
Int a[] = new int[100];
Ambas as declarações criam um array de 100
posicoes

Preenchendo um array
• Desta forma preenchemos um array com valores que
vão de 0 a 9:
int[] a = new int[10];
for (int i = 0; i < 10; i++)
a[i] = i;
• Note que i=0 é o primeiro índice do vetor
• Note que i<10, possui resultados verdadeiros com o i
valendo até 9 que é o ultimo índice do vetor

3. 7. 5. .Preenchendo um array • Também podemos preencher um array da seguinte forma: int[] smallPrimes = { 2. 11. 13 }.

31. quando é necessário passar um array para alguma função. 23. . 19. 37 }. o array pode ser criado no momento da chamada da função. • Podemos declarar um array anônimo da seguinte forma: new int[] { 17.Arrays anônimos • Em certos momentos. 29.

pode-se redeclara-lo também: int[] smallPrimes = { 2.2. 13 }. 11.3}.Preenchendo novamente um array • Depois que um array já foi declarado. 3. 7. 5. smallPrimes = {1. .

3.3.4}. . 11. 13 }. smallPrimes = new int[] {1.2. pode-se redeclara-lo também e ainda por cima utilizar o array anônimo: int[] smallPrimes = { 2. 7. 5.Preenchendo novamente um array • Depois que um array já foi declarado.

Como obter o tamanho do array? • Para obter o tamanho do array utiliza-se o comando .length Exemplo: a.length // retorna o tamanho do array a .

Um novo loop: for each • O loop for each. permite que todos os elementos de uma coleção. sejam acessados de forma sequencial e simples for (variavel : coleção) declaração .

5.3.println(numero).Exemplo de for each int a[] = {2.out.2} for(int numero: a) System.7. .4.2.

5.2. É a mesma coisa que: for (int i = 0.2}.out.7.3. for(int numero: a) System.out. i < a.length. .4.println(a[i]).println(numero).Exemplo de for each int a[] = {2. i++) System.

UM PARALELO ENTRE VARIÁVEIS PRIMITIVAS E NÃO PRIMITIVAS .

ou um valor primitivo. o ponto final sempre é no valor primitivo .O paralelo • As variáveis primitivas guardam um valor • As variáveis não primitivas guardam um endereço de memória. esse endereço de memoria pode ter um outro endereço de memoria.

AGORA VOLTANDO PARA OS ARRAYS .

3.Cópia de um array • Arrays não é um tipo primitivo. //o vetor smallPrimes também mostrará o mesmo valor . 11. luckyNumbers[5] = 12. int luckyNumbers = smallPrimes. portanto a cópia de um array vai fazer com que existam dois ponteiros apontando para o mesmo endereço de memoria: int[] smallPrimes = { 2. 5. 13 }. 7.

Cópia de um array .

29. 31. 19. 19.Classificando um array • Você pode desenvolver o seu proprio algoritmo de classificação de arrays. 31. 23. 29. 37 . 37 .sort(anonymous). 23. }. Array. porém o java faz isso para você através do quickSort: int[] anonymous = { 17. // vai ficar na ordem: //17.

{4. 7. 11. 1} }.Exemplo de arrays de duas dimensões int[][] magicSquare = { {16. 6. 2. 15. 10. 13}. {9. . 14. 12}. {5. 3. 8}.

Exemplo de arrays de duas dimensões .

• Dessa forma a quantidade de memória pode ser reduzida de forma significativa. . • Essa particularidade do java permite que cada linha do array de duas dimensões possuam um numero variado de colunas.Exemplo de arrays de duas dimensões • Note que um array de duas dimensões no java é uma composição de arrays de uma dimensão que apontam para outros arrays de uma dimensão.

Exemplo de arrays de duas dimensões • Esse é um exemplo de matriz que possui 7 linhas e cada linha possui um número variado de colunas: 1 11 12 1 13 3 1 14 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 .