Você está na página 1de 102

Programao Java

Verses do Java

Regras para programao Java:


Regra: Nome do arquivo deve ser o mesmo da
classe

Convenes:
Ao escrever uma classe, inicia-se sempre com
letra maiscula (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 maiscula.(e.g.:
olaMundo, cadaDoJoao)

Comentrios
Para comentrios de uma linha, utilizado o
//
Para comentrios de duas ou mais linhas,
utilizado o /* para iniciar e o */ para fechar

Os tipos de dados que sero vistos a seguir, so 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

VARIVEIS

Variveis
Toda varivel possui um tipo
Declarao:
Tipo nome;

Para declarar mais de uma varivel utiliza-se virgula:


Tipo nome1, nome2, nome3, ..., nomeN

Exemplos:
double salario
long populacaoDaTerra
Char letra

As variveis so case sensitive, ou seja, existe uma diferena entre a letra


a e a letra A

Inicializando variveis
Para inicializar uma variavel, utiliza-se o
operador de atribuio =
Exemplos:
double numero = 65000.0
int idade = 12

Constantes
Constantes so variveis que possuem a
palavra final
Essas variaveis, aps serem inicializadas no
possuem mais o seu valor alterado
Exemplo:
final double CM_POR_POLEGADA = 2.54;

OPERADORES

Lembrete
os operadores somente devem ser utilizados
com valores que so de tipos primitivos.
Tambm so chamados de operadores
binrios por precisarem de dois operandos
para realizar a operao

Operadores aritmticos
Existem quatro operadores aritmticos:
+ (soma)
- (subtrao)
* (multiplicao)
/ (diviso)

Alm desses quatro operadores, tambm h o


mod ( % ), ele devolve o resto de uma diviso

Operadores aritmticos
Exemplos:
Int num = 5*4;
Int num2 = num 2;
Int num3 = num%num2;

Operadores aritmticos
Existem os operadores de incremento e
decremento:
++
--
Operador

Ao

PodemSoma
sero valor
utilizados
de
acordo
com
tabela:
da varivel i com 5
e depois
adiciona 1 ao
valor da a
varivel
i

5 + i++
5+ ++i

Adiciona 1 ao valor da varivel i e em seguida soma o valor de i com o 5

5 + i--

Soma o valor da varivel i com 5 e depois retira 1 ao valor da varivel i

5+ --i

retira 1 ao valor da varivel i e em seguida soma o valor de i com o 5

Operadores Relacionais
Utilizados para fazer a comparao de dois
valores:
So eles:
>, >=, <, <=, ==(igual), !=(diferente)

Se a expresso verdadeira, obtem-se o valor


true, caso contrario obtem-se false

Operadores lgicos
Fazem a unio de duas ou mais operaes
relacionais
So eles:
&& (tambm chamado de e) realiza uma
multiplicao lgica
|| (tambm chamado de ou) realiza uma soma
lgica

Operadores lgicos
Exemplos:
int x =5, y = 10
X==5
&& y<=10
true(1) * true(1) => true(1)
X==5
|| y<10
true(1) + false(0)=> true(1)

Operadores lgicos
Existem um terceiro operador lgico chamado not,
sua funo inverter o valor booleano
Exemplo:
int x=5, y=10
!(x<y)
!(5<10)
!(true)
False

Operador ternrio
chamado de ternario por possuir tres partes:
If then else, funciona como se fossse um if,
porm tem o tamanho reduzido:
Exemplo:
int x = 5, y = 10;
x<y ? yMaior(); : xMaior();

Operadores bit a bit (bitwise)


Utilizado para trabalhar com qualquer tipo do grupo
dos inteiros, esses operadores trabalham diretamente
com os bits que compom um nmero.
So eles:

& (e)
| (ou)
^ (xor)
~ (not)

Operadores bit a bit (bitwise)


Exemplo(aplicao em operao de calculo de
redes)(muito lgl):
int ip = 127;
// 0111 1111
int mask = 250;
// 1111 1010
int netid = ip & mask;// 0111 1010

Operador shift (bitshift)


Desloca os bits de um nmero
So eles:
<< (desloca para a esquerda)
>> (desloca para a direita)
>>> (desloca para a direita sem sinal)

Operador shift (bitshift)


Exemplo: deslocar dois bits para a esquerda
do numero 1 (0000 0001)
int num = 1;
//0000 0001
int a = num<<2;
//0000 0100

FUNES MATEMTICAS

Classe Math
A classe Math possui diversas funes e
constantes, dessa forma fica mais fcil para
desenvolver expresses aritmticas.
Para utilizar as funes da classe Math sem
referencia-la, deve-se importar a classe para o
seu projeto da seguinte forma:
import static java.lang.Math.*;

Funes da classe Math:


Funes algbricas:
Raiz Quadrada: Math.sqrt(4);
Potncia: Math.pow(2,3); // mesmo que 2^3

Funes da classe Math(cont):


Funes trigonometricas:

Seno: Math.sin
Cosseno: Math.cos
Tangente: Math.tan
Arco Tangente: Math.atan //devolve o valor do angulo
para os quadrantes I e IV
Arco Tangente 2: Math.atan2 // devolve o valor do
angulo para qualquer um dos 4 quadrantes.

Funes da classe Math(cont):


Funes exponenciais
Math.exp
Log: Math.log
Log na basse 10: Math.log10

Constantes da classe Math:


Math.PI //3.141592653589793
Math.E //2.718281828459045

CONVERSO DE TIPOS

Converso entre os tipos numricos


Algumas vezes ser necessrio converter
valores entre os tipos de dados
A converso pode ser realizada de duas
formas:
Implcita
Explcita

Converso implcita
Quando no necessrio mostrar que acontece a converso
As linhas pontilhadas representam perda de preciso
Ocorre um truncamento
char(2)
Tipo(num de bytes)
Byte(1)

short(2)

int(4)

long(8)

float(4)

double(8)

Combinao de dois valores diferentes


com operadores binrios

Quando dois valores de tipos diferentes so combinados


com um operador binrios, 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

No

um dos
operador
es do
tipo float?

Sim
O outro operador ter
seu tipo convertido
para float

No

um dos
operador
es do
tipo long?

Sim
O outro operador ter
seu tipo convertido
para float

No

Ambos os
operandos
sero
convertidos
para o tipo
int

Converso explcita
A converso explicita acontece para qualquer
outro tipo de converso que no est listado
na imagem:
char(2)
Tipo(num de bytes)
Byte(1)

short(2)

int(4)

long(8)

float(4)

double(8)

Converso explcita
A converso explicita, tambm chamada de
cast, realizada da seguinte forma:
double x = 9.997;
int nx = (int) x;
Note que neste cast houve perda de preciso, o
valor da variavel nx 9 por que a parte decimal
descartada.
Nos casts realizado o truncamento do nmero

Dica para converso explicita


Caso voc queira arredondar o nmero para o
inteiro mais prximo, pode-se utilizar a funo
round que arredonda para o inteiro longo
mais prximo;
double x = 9.997;
int nx = (int) Math.round(x);
Agora a varivel nx possui o valor 10

Hierarquia dos parnteses e operadores


Operadores

Associatividade

[] . ()

Esquerda para direita

! ~++ -- +(unrio) (unrio) () (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 ternrio)

Direita para Esquerda

= += -= *= /= %= &= |= ^= <<= >>= >>>=

Direita para Esquerda

Hierarquia dos parnteses e operadores


Exemplo:
boolean a,b,c;
a && b || c
a e b sero comparados e o seu resultado ser
comparado com c

Hierarquia dos parnteses e operadores


O operador += possui associatividade da direita
para a esquerda:
int a,b,c;
...
a += b += c;
O valor de c ser agregado a b e o resultado ser
agregado ao valor de a

Tipos enumerados
Algumas vezes as variveis devem ter somente alguns tipos
de valores especficos de valores, por exemplo, uma pizza
pode ser pequena, mdia ou grande, para que um programa
possua uma melhor integridade, pode-se definir tipos
enumerados para que os erros diminuam:
Exemplo de declarao:
enum Tamanhos{PEQUENO, MEDIO, GRANDE};
Tamanhos t = Tamanhos.PEQUENO;

STRINGS

Definio de string
uma classe Java utilizada para guardar uma sequencia de
caracteres.
Note que apesar de ser utilizado como um tipo de varivel,
esse tipo no primitivo e portanto no possvel aplicar
os operadores relacionais e lgicos diretamente.
Para utilizar as Strings declara-se a varivel da seguinte
forma:
String Rua = Av. Paulista;
String str = ; // essa string est vazia

Substrings
So subconjuntos de caracteres dentro das strings.
Tambm so strings
0
1
2
3
4
5
6
7
Exemplo:
o

\0

String a = "ola Mundo";


String b = a.substring(2); // b = la Mundo
String c = a.substring(2, 6); // c = la Mu

Concatenao
Significa juntar duas strings formando uma nova
Utiliza-se o operador +
Exemplo:
String a= abc";
String b = 123";
String c = a+b; // c = abc123

Verificar se duas Strings so iguais


Para a verificao utiliza-se a funo equals()
A funo equals case sensitive, portanto a e A so diferentes;
Exemplo:
String a =abc, b = 123;
a.equals(b)
// vai retornar o booleano
//false
abc.equals(a)
// vai retornar o
//booleano true

Verificar se duas Strings so iguais


Para ignorar o case Sensitive, utilize a funo
equalsIgnoreCase() da mesma forma que a
funo equals()

Operador == e as Strings
O operador igual utilizado com Strings(e qualquer outro
objeto que estudaremos mais para frente) compara
endereos de memoria)
Portanto, se a String no inicializada, o seu valor ser
null
Exemplo:
String a=null;
a == null // vai retornar o booleano true

Obtendo uma letra em um String


Para obter uma determinada em uma String utiliza-se
o seguinte comando:
0

\0

String a = abcdefg;
Char letra = a.charAt(2); // letra = c

String vazia
A string tambm pode estar vazia, para verificar se a
string est vazia, existem dois mtodos:
String str=;
str.length() == 0
A funo length() retorna o nmeros de caracteres
que a String possui
str.equals() // compara com uma String vazia

Mais funes para String

String a = abcdefg;
String b = a.toUpperCase(a); // b = ABCDEFG
String c = b.toLowerCase(b); // c = abcdefg
String d = abcdefg //note que h espaos
String e = d.trim() // e = abcdefg

Construtor de Strings
A concatenao de Strings pega duas String e gera uma nova, isso
consome muitos recursos, para que o uso dos recursos seja
diminudo, utiliza-se o StringBuilder:
StringBuilder builder = new StringBuilder();
//cria o construtor de Strings
builder.append(abc); // adiciona abc
builder.append(123); // adiciona 123
String resultado = builder.toString() //
retorna abc123

Funes do StringBuilder

java.lang.StringBuilder 5.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, char c) // adiciona um caractere em um determinado indice
StringBuilder insert(int offset, String str) // insere a string str a partir da posicao i
StringBuilder insert(int offset, char c) // insere o caractere c na posio offset
StringBuilder delete(int startIndex, int endIndex) // apaga o conjunto de letras no
intervalo informado
String toString() // retorna a string que foi feita

CONTROLE DE FLUXO

Escopos
Escopos so conjuntos de instrues que esto dentro de um par de parnteses
As variveis somente existem dentro do escopo em que foram declaradas
Exemplo:
public static void main(String[] args)
{
int n;
. . .
{
int k;
. . .
}
// a varivel k no existe mais aqui
}

Comando break
O comando break, serve para iterromper o fluxo dentro
de um escopo:
{
......
break;
....
}
Os comandos abaixo do break, no sero executados.

Declaraes Condicionais
A declarao condicional no java possui a seguinte forma:
If(condio) umaDeclarao
Se voc deseja colocar mais de uma declarao, necessario utilizar
um par de parenteses para determinar o escopo
If(condio) {
declarao1
declarao2
.....
}

Declaraes condicionais

Caso seja necessrio realizar uma declarao se a condio for false, utiliza-se o comando else:

If (condio) declarao1 else declarao2

Se voc desejar colocar mais de uma declarao utilize o par de parnteses para determinar o escopo

if (yourSales >= target)


{
performance = "Satisfactory";
bonus = 100 + 0.01 * (yourSales - target);
}
else
{
performance = "Unsatisfactory";
bonus = 0;
}

A parte do else sempre opcional

Declaraes Condicionais
tambm existe o comando else if, que da mais possibilidades de
execuo das declaraes condicionais:
if(x<0) {
....// x negativo
} else if(x==0) {
...//x neutro
} else {
...//x positivo
}
Pode-se repetir o comando else if quantas vezes for necessrio

Loop indeterminado - While


O while executa um conjunto de declaraes at que sua condio seja
falsa:
while(condio) declarao
Ou
while(condio) {
declarao1
declarao2
....
}
Nesse modelo de loop, primeiro realizado o teste e em seguida so
executadas as declaraes

Loops indeterminado Do While


O Do While executa um conjunto de declaraes at que sua condio seja
falsa:
do declarao While(condio);
Ou
do {
declarao1
declarao2
....
} while(condio);
Nesse modelo de loop, primeiro so executadas as declaraes e depois
realizado o teste para verificar se acontecer mais uma volta.

Loop determinado - for


O loop for, funciona como o while, porm possui um nmero determinado de voltas
Possui trs declaraes em sua configurao:
for (int i = 1; i <= 10; i++)
Declarao
Ou
for (int i = 1; i <= 10; i++) {
declarao1
declaraao2
....
}
Cuidado ao utilizar contadores de ponto flutuante, a igualdade ou diferen geralmente no
funciona por causa dos arredondamentos

Selees mltiplas a declarao switch

A repetio de ifs de orma sequencial pode ser cansativa, para resolver esse problema, existe o
switch:
Switch(umNumero) {
case 1: .... Break;
case 2: .... Break;
...
case n: .... Break;
Default: ....
}
Se a varivel umNumero for igual a um dos cases so executadas as declaraes referentes, se no
for encontrado o valor o default executado.
O break serve para que o switch seja interrompido aps as declaraes terem sido finalizadas.
O break opcional
De forma superficial, um if fresco

Aplicao do break em um lao while


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

Labels

possvel rotular os escopos com labels da seguinte forma:

Com a rotulao dos escopos, possivel escolher quais escopos sero parados:
Scanner in = new Scanner(System.in);
int n;
lacoWhile:
while (true) // this loop statement is tagged with the label
{
read_data2:
for (int i = 0; i < 3; i++) {
System.out.print(i+"Enter a number >= 0: ");
n = in.nextInt();
if (n < 0) // should never happencan't go on
{
break; // vai parar apenas o lao for
}
// break out of read_data loop
}
}

Labels

possvel rotular os escopos com labels da seguinte forma:


Scanner in = new Scanner(System.in);
int n;
lacoWhile:
while (true) // this loop statement is tagged with the label
{
read_data2:
for (int i = 0; i < 3; i++) {
System.out.print(i+"Enter a number >= 0: ");
n = in.nextInt();
if (n < 0) // should never happencan't go on
{
break lacoWhile; //vai para o while e consequentemente o for tambm
}
// break out of read_data loop
}
}

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

BIG NUMBERS

O que fazer?
Se voc possui um nmero inteiro ou real que
seja muito grande, pode acontecer de as
variveis primitivas no terem a capacidade
para guarda-los, portanto ser necessrio a
utilizao das classes BigInteger e BigDecimal,
que guardam respectivamente nmeros
inteiros e reais

Exemplo:
BigInteger a = BigInteger.valueOf(100);
BigInteger b = BigInteger.valueOf(200);
BigInteger c = a.add(b); // representa a operao
//c = a+b;
BigInteger d = a.multiply(b); // d = a*b
BigInteger e = c.multiply(b.add(a)); //c * (a+b)

Perceba que 100 e 200 no so nmeros


muito grandes

Funes do BigInteger
BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other) // resto de
diviso

Funes do BigDecimal
BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
Note que no h resto de diviso para nmeros
reais.

ARRAYS

O que so?
uma estrutura de dados que guarda um conjunto de
valores do mesmo tipo, cada valor possui um nmero de
ndice, e por esse ndice, pode ser acessado.
Utiliza-se o par de colchetes([]) para determinar um array,
cada par de colchetes adicionados em um array significa
uma dimenso.
O nmero mximos de dimenses o tamanho da sua
imaginao e a capacidade do computador.
Arrays tambm so um tipo de coleo, que sero vistos de
forma mais profunda, nas prximas aulas

O que so?
Os ndices sempre comeam a ser contados a
partir do zero, e o valor do ultimo ndice
sempre o nmero anterior ao tamanho do
array:
Array de 10 ndices:
ndices do array
0

55

47

897

94

87

89

51

547

41

10

Contedo do array

Como declarar um array


Int[] a = new int[100];
Ou
Int a[] = new int[100];
Ambas as declaraes criam um array de 100
posicoes

Preenchendo um array
Desta forma preenchemos um array com valores que
vo 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

Preenchendo um array
Tambm podemos preencher um array da
seguinte forma:
int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };

Arrays annimos
Em certos momentos, quando necessrio
passar um array para alguma funo, o array
pode ser criado no momento da chamada da
funo.
Podemos declarar um array annimo da seguinte
forma:
new int[] { 17, 19, 23, 29, 31, 37 };

Preenchendo novamente um array


Depois que um array j foi declarado, pode-se
redeclara-lo tambm:
int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };
smallPrimes = {1,2,3};

Preenchendo novamente um array


Depois que um array j foi declarado, pode-se
redeclara-lo tambm e ainda por cima utilizar o
array annimo:
int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };
smallPrimes = new int[] {1,2,3,4};

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 coleo, sejam acessados de forma
sequencial e simples
for (variavel : coleo) declarao

Exemplo de for each


int a[] = {2,4,5,7,3,2,2}
for(int numero: a)
System.out.println(numero);

Exemplo de for each


int a[] = {2,4,5,7,3,2,2};
for(int numero: a)
System.out.println(numero);
a mesma coisa que:
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);

UM PARALELO ENTRE VARIVEIS


PRIMITIVAS E NO PRIMITIVAS

O paralelo
As variveis primitivas guardam um valor
As variveis no primitivas guardam um
endereo de memria, esse endereo de
memoria pode ter um outro endereo de
memoria, ou um valor primitivo, o ponto final
sempre no valor primitivo

AGORA VOLTANDO PARA OS ARRAYS

Cpia de um array
Arrays no um tipo primitivo, portanto a cpia de um
array vai fazer com que existam dois ponteiros
apontando para o mesmo endereo de memoria:
int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };
int luckyNumbers = smallPrimes;
luckyNumbers[5] = 12; //o vetor
smallPrimes tambm mostrar o mesmo valor

Cpia de um array

Classificando um array
Voc pode desenvolver o seu proprio
algoritmo de classificao de arrays, porm o
java faz isso para voc atravs do quickSort:
int[] anonymous = { 17, 29, 19, 37 , 23, 31, };
Array.sort(anonymous); // vai ficar na ordem:
//17, 19, 23, 29, 31, 37

Exemplo de arrays de duas dimenses


int[][] magicSquare =
{
{16, 3, 2, 13},
{5, 10, 11, 8},
{9, 6, 7, 12},
{4, 15, 14, 1}
};

Exemplo de arrays de duas dimenses

Exemplo de arrays de duas dimenses


Note que um array de duas dimenses no java
uma composio de arrays de uma dimenso que
apontam para outros arrays de uma dimenso.
Essa particularidade do java permite que cada
linha do array de duas dimenses possuam um
numero variado de colunas.
Dessa forma a quantidade de memria pode ser
reduzida de forma significativa.

Exemplo de arrays de duas dimenses


Esse um exemplo de matriz que possui 7 linhas e
cada linha possui um nmero 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