Sie sind auf Seite 1von 12

12/7/2014 Introduo Linguagem Java Atravs de Exemplos

http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 1/12
Introduo Linguagem Java Atravs de Exemplos
Objetivos da Seo
Queremos introduzir a linguagem Java bsica (sem uso de orientao a objeto) atravs
de alguns exemplos simples
O aluno deve entender, neste momento, que Java apenas uma outra linguagem de
programao, mas possuindo de sintaxe diferente da linguagem vista em Programao I
(Python, Pascal, ...)
Mais tarde, veremos que Java , na realidade, substancialmente diferente de Python
Queremos ver como Java trata
Tipos bsicos
Constantes
Decises
Laos
Compilao e execuo de programas
IDE - Integrated Development Environment (Eclipse)
Observe que no veremos chamadas de sub-programas (subrotinas ou funes) aqui
Este assunto bem diferente em Java, devido orientao a objeto, e ser visto
frente
Importante! Voc responsvel por aprender detalhes adicionais da linguagem Java. O
que faremos em aula no uma cobertura completa da linguagem.
Por que Java?
Linguagem muito poderosa embora simples
Permite portabilidade
Muito usada em programao em rede
Server Programming
Aplicaes de e-commerce, e-business, etc.
Aplicaes para acesso via Internet, intranet, etc.
Um primeiro programa: Hello, World!
O programa est no arquivo Hello.java
package p2.exemplos;
/*
* O primeiro programa em Java: Hello World
* Autor: Jacques Sauv
*/
// Todo programa tem um ponto de entrada: o "mtodo" main de alguma "classe"
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Observaes segue ...
A linha ...
package p2.exemplos;
... usada para indicar que este programa faz parte de um "pacote" que pode conter
vrios programas
uma forma de organizar vrios programas, da mesma forma que "pastas" ou
"diretrios" so usados para organizar arquivos num sistema de arquivos
Dois tipos de comentrios (h mais um tipo a ser visto adiante)
Esquea, por enquanto, o que significam "public", "classe", "static", "void" e "mtodo"
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 2/12
"Mtodo" semelhante a "module" em Python
Outgros nomes: subrotina, funo, procedimento, procedure, ...
O nome do programa Hello
Por conveno, deve iniciar com uma letra maiscula
Observe que o programa Hello est obrigatoriamente armazenado no arquivo
Hello.java
Java "case-sensitive" (reconhece diferena de caixa)
At entender detalhes, sempre use as primeiras duas linhas de cdigo do exemplo
acima, trocando apenas o nome do programa (Hello)
"{" significa "BEGIN" e "}" significa "END"
Observe a forma de imprimir
Observe a formao de uma constante do tipo string ("Hello, world!")
Vamos compilar o programa (no Windows, UNIX, etc.)
Isso desnecessrio em Python que interpretado
javac Hello.java
O comando javac o compilador Java
O resultado deve estar no arquivo Hello.class (verifique)
Agora, vamos executar o programa:
java Hello
O comando java a "Java Virtual Machine" (JVM) que sabe executar um programa Java
compilado com o comando java e presente no arquivo Hello.class
Isso diferente de outras linguagens (C, C++) que so diretamente executveis
aps a compilao
Motivo: independncia de plataforma: Um programa em Java executa em
qualquer lugar onde houver uma JVM, sem recompilao
A sada :
Hello, world!
Observe que a sada "a caractere"
possvel fazer interfaces grficas com Java mas no falaremos disso
A disciplina de laboratrios tratar do assunto
possvel usar ambientes integrados de desenvolvimento (IDE) para programar e
depurar em Java
Eclipse particularmente popular
Um segundo programa: entrada de dados, tipos bsicos, variveis,
decises simples
Ler 3 nmeros inteiros da entrada, imprimir o menor e o maior.
A primeira soluo est no arquivo MinMax1.java
package p2.exemplos;
import java.util.Scanner;
/*
* "Ler 3 nmeros inteiros da entrada, imprimir o menor e o maior"
*
* Autor: Jacques Sauv
*/
public class MinMax1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1, n2, n3;
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 3/12
System.out.print("Entre com o primeiro inteiro: ");
n1 = sc.nextInt();
System.out.print("Entre com o segundo inteiro: ");
n2 = sc.nextInt();
System.out.print("Entre com o terceiro inteiro: ");
n3 = sc.nextInt();
if (n1 > n2) {
if (n1 > n3) {
if (n2 < n3) {
System.out.println("O menor numero eh: " + n2);
} else {
System.out.println("O menor numero eh: " + n3);
}
System.out.println("O maior numero eh: " + n1);
} else {
if (n1 < n2) {
System.out.println("O menor numero eh: " + n1);
} else {
System.out.println("O menor numero eh: " + n2);
}
System.out.println("O maior numero eh: " + n3);
}
} else {
if (n2 > n3) {
if (n1 < n3) {
System.out.println("O menor numero eh: " + n1);
} else {
System.out.println("O menor numero eh: " + n3);
}
System.out.println("O maior numero eh: " + n2);
} else {
if (n1 < n2) {
System.out.println("O menor numero eh: " + n1);
} else {
System.out.println("O menor numero eh: " + n2);
}
System.out.println("O maior numero eh: " + n3);
}
}
}
}
Como compilar e rodar o programa
javac MinMax1.java
java MinMax1
Uma sada tpica:
Entre com o primeiro inteiro: 3
Entre com o segundo inteiro: 9
Entre com o terceiro inteiro: 123
O menor numero eh: 3
O maior numero eh: 123
A linha ...
import java.util.Scanner;
... usada para dizer ao Java que usaremos alguma coisa externa ao nosso programa (a
"classe" Scanner)
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 4/12
A linha ...
Scanner sc = new Scanner(System.in);
... cria um "Scanner" que usado para ler dados da entrada
Os detalhes (o que significa "new", etc. sero explicados adiante)
A linha ...
int n1, n2, n3;
... declara trs variveis inteiras para uso posterior
Por conveno, variveis iniciam com letra minscula
A linha ...
n1 = sc.nextInt();
... l um inteiro da entrada
Tambm poderamos ter feito assim:
int n1 = sc.nextInt();
As linhas ...
if(n2 < n3) {
System.out.println("O menor numero eh: " + n2);
} else {
System.out.println("O menor numero eh: " + n3);
}
... mostram uma deciso
Duas dessas linhas tambm mostram a concatenao de strings com o operador +
Falamos que, em Java, o operador "+" est overloaded porque ele significa adio
de nmeros e tambm concatenao de strings, dependendo dos seus operandos
o nico operador que sofre overload
Segue uma segunda verso do programa
Esta soluo est no arquivo MinMax2.java
package p2.exemplos;
import java.util.Scanner;
/*
* "Ler 3 nmeros inteiros da entrada, imprimir o menor e o maior"
*
* Autor: Jacques Sauv
*/
public class MinMax2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1, n2, n3;
System.out.print("Entre com o primeiro inteiro: ");
n1 = sc.nextInt();
System.out.print("Entre com o segundo inteiro: ");
n2 = sc.nextInt();
System.out.print("Entre com o terceiro inteiro: ");
n3 = sc.nextInt();
int mnimo;
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 5/12
int mximo;
if (n1 > n2) {
if (n1 > n3) {
if (n2 < n3) {
mnimo = n2;
} else {
mnimo = n3;
}
mximo = n1;
} else {
if (n1 < n2) {
mnimo = n1;
} else {
mnimo = n2;
}
mximo = n3;
}
} else {
if (n2 > n3) {
if (n1 < n3) {
mnimo = n1;
} else {
mnimo = n3;
}
mximo = n2;
} else {
if (n1 < n2) {
mnimo = n1;
} else {
mnimo = n3;
}
mximo = n3;
}
}
System.out.println("O menor numero eh: " + mnimo);
System.out.println("O maior numero eh: " + mximo);
}
}
Observe que estamos usando acentuao variveis com acentuao
Isso possvel porque Java usa Unicode como cdigo de caracteres
Perguntas sobre o programa acima
Voc achou o programa "bem escrito"?
fcil de entender?
fcil trocar as mensagenms de sada por outras?
fcil assegurar-se de que no h bug?
Na realidade, um dos programas acima tem um bug: ache o!
fcil estender para 4 nmeros lidos na entrada?
Que tal o seguinte programa que resolve o mesmo problema:
Esta soluo est no arquivo MinMax3.java
package p2.exemplos;
import java.util.Scanner;
/*
* "Ler 3 nmeros inteiros da entrada, imprimir o menor e o maior"
*
* Autor: Jacques Sauv
*/
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 6/12
public class MinMax3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num;
int mnimo = Integer.MAX_VALUE;
int mximo = Integer.MIN_VALUE;
System.out.print("Entre com o primeiro inteiro: ");
num = sc.nextInt();
if (num < mnimo) {
mnimo = num;
}
if (num > mximo) {
mximo = num;
}
System.out.print("Entre com o segundo inteiro: ");
num = sc.nextInt();
if (num < mnimo) {
mnimo = num;
}
if (num > mximo) {
mximo = num;
}
System.out.print("Entre com o terceiro inteiro: ");
num = sc.nextInt();
if (num < mnimo) {
mnimo = num;
}
if (num > mximo) {
mximo = num;
}
System.out.println("O menor numero eh: " + mnimo);
System.out.println("O maior numero eh: " + mximo);
}
}
muito mais limpo, no ?
Explique por qu
Agora, vamos resolver a mesma coisa com um lao simples:
Esta soluo est no arquivo MinMax4.java
package p2.exemplos;
import java.util.Scanner;
/*
* "Ler 3 nmeros inteiros da entrada, imprimir o menor e o maior"
*
* Autor: Jacques Sauv
*/
public class MinMax4 {
public static void main(String[] args) {
final int NMEROS_A_LER = 3;
Scanner sc = new Scanner(System.in);
int mnimo = Integer.MAX_VALUE;
int mximo = Integer.MIN_VALUE;
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 7/12
for (int i = 0; i < NMEROS_A_LER; i++) {
System.out.print("Entre com o proximo inteiro: ");
int num = sc.nextInt();
if (num < mnimo) {
mnimo = num;
}
if (num > mximo) {
mximo = num;
}
}
System.out.println("O menor numero eh: " + mnimo);
System.out.println("O maior numero eh: " + mximo);
}
}
NMEROS_A_LER declarado como "final" para indicar que uma constante
Como "const" em Pascal ou C
Por conveno, usam-se letras maisculas para constantes (como em Python, C,
C++)
Melhor usar constantes simblicas do que contantes numricas
Programa fica mais simples de entender
Observe como fazer um lao "for" na linha:
for(int i = 0; i < NMEROS_A_LER; i++) {
A expresso ...
i++
... significa ...
i = i + 1
Observe tambm onde a varivel "num" foi declarada:
int num = sc.nextInt();
De forma geral, bom declarar uma varivel perto de onde ela usada
Fizemos a mesma coisa com a declarao da varivel do lao (i)
Um terceiro programa: tipos primitivos, limites de representao,
constantes, operadores e expresses
Primeiro, um pouco de teoria ...
Tipos primitivos, limites de representao e constantes
Tipo primitivo Tamanho Mnimo Mximo Exemplos de Constantes
boolean 1 bit - - true, false
char 16 bits Unicode 0 Unicode 65.535 'a' (letra a)
byte 8 bits -128 +127
97, -23
0x65 (hexadecimal)
short 16 bits
-2
15
(-32.768) +2
15
-1(32.767)
17569, -21875
int 32 bits
-2
31
(uns -2 bi)
+2
31
-1
(uns 2 bi)
1876345240, -2000000000
long 64 bits
-2
63

(uns -9 quintilhes)
+2
63
-1
(uns 9 quintilhes)
123981723971982318273L,
-12381726387613678688L,
97L, -23L, 0L
(Observe o 'L' final)
float 32 bits
aprox -10
38

(6-7 dgitos
aprox +10
38

(6-7 dgitos
-3.4F
45.78E+23F
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 8/12
significativos) significativos) (Observe o 'F' final)
double 64 bits
aprox -10
308

(15 dgitos
significativos)
aprox +10
308

(15 dgitos
significativos)
-3.4
45.78E+23
void - - -
indica ausncia de tipo
(quando um "mtodo" nada retorna)
A converso entre tipos (quando possvel) feita com cast:
double x = 8.89;
int n = (int)x; // n ter valor 8
Operadores
Operadores matemticos
+ (soma)
- (subtrao)
* (multiplicao)
/ (diviso)
% (mdulo)
H operadores unrios - e +
Operadores binrios podem ser seguido de =, tal como na seguinte expresso:
soma += nota*peso; // equivalente a soma = soma + nota*peso
Operador de String
+ (overload do operador par concatenar strings)
Operadores de auto-incremento e auto-decremento
nmeroDeAlunos++; // equivalente a nmeroDeAlunos = nmeroDeAlunos + 1
nmeroDeAlunos--; // equivalente a nmeroDeAlunos = nmeroDeAlunos - 1
if(nmeroDeAlunos-- > 0) // equivalente a testar nmeroDeAlunos e depois decrementar
if(--nmeroDeAlunos > 0) // equivalente a decrementar e depois testar nmeroDeAlunos
Operadores relacionais
< (menor)
<= (menor ou igual)
> (maior)
>= (maior ou igual)
== (igual)
!= (no igual)
Operadores lgicos
&& (AND)
|| (OR)
! (NOT)
Exemplos:
if(nmeroDeAlunos > MAX_ALUNOS || nmeroDeProfessores > MAX_PROFS) ...
if(ano % 4 == 0 && ano % 100 != 0 || ano % 400 == 0) ... // ano bissexto
Operadores de bits e de deslocamento
&, &=, |, |=, ^, ^=, ~
No falaremos deles aqui
Operador ternrio
Para escrever uma operao condicional sem usar if-else
Exemplo segue
// a linha seguinte
mdia = nmeroDeNotas == 0 ? 0.0 : soma/nmeroDeNotas;
// equivalente s linhas seguintes
if(nmeroDeNotas == 0) {
mdia = 0.0;
} else {
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 9/12
mdia = soma/nmeroDeNotas;
}
Expresses complexas e precedncia de operadores
A precedncia dos operadores pode ser vista na tabela abaixo, a qual no deve se
decorada
Observe que a tabela contm operadores que ainda no mencionamos
Operadores Precedncia Associatividade
[] . () Mais alta
! ~ ++ -- + (unrio) - (unrio) (cast) new
* / %
+ -
<< >> >>>
< <= > >= instanceof
== !=
&
^
|
&&
||
?:
= += -= *= /= %= &= |= ^= <<= >>= >>>= Mais baixa
De forma geral, as precedncias "esperadas" funcionam, como mostra o exemplo abaixo
// a linha seguinte
if(nmeroDeAlunos > MAX_ALUNOS || nmeroDeProfessores > MAX_PROFS) ...
// no precisa de parnteses, pois equivalente a
if((nmeroDeAlunos > MAX_ALUNOS) || (nmeroDeProfessores > MAX_PROFS)) ...
Na dvida sobre precedncias, use parnteses
Um programa exemplo
Segue um programa que ajuda a planejar sua aposentadoria (ser que jovens de 18
anos pensam nisso???)
Esta soluo est no arquivo Aposentadoria.java
package p2.exemplos;
import java.util.Scanner;
/*
* Planejamento de aposentadoria
*
* Autor: Jacques Sauv (roubado de CoreJava)
*/
public class Aposentadoria {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double alvo;
double juros;
double contribuio;
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 10/12
int anos = 0;
double saldo = 0;
// exercicio: verifique valores informados abaixo so aceitveis
System.out.print("Quanto dinheiro voce quer para se aposentar? ");
alvo = sc.nextDouble();
System.out.print("Quanto dinheiro voce vai contribuir todo ano?");
contribuio = sc.nextDouble();
System.out
.print("Taxa de juros em % (exemplo: digite 7.5 para 7.5%): ");
juros = sc.nextDouble() / 100;
while (saldo < alvo) {
saldo = (saldo + contribuio) * (1 + juros);
anos++;
}
System.out.println("Voce pode se aposentar em " + anos + " anos.");
}
}
Um quarto programa: arrays
Java tem arrays unidimensionais e multidimensionais
Segue um programa que l 10 nmeros e os imprime em ordem inversa
Esta soluo est no arquivo Inverte.java
package p2.exemplos;
import java.util.Scanner;
/*
* Ler 10 nmeros inteiros da entrada, imprimir em ordem inversa
*
* Autor: Jacques Sauv
*/
public class Inverte {
public static void main(String[] args) {
final int NMEROS_A_LER = 10;
Scanner sc = new Scanner(System.in);
int[] nmeros = new int[NMEROS_A_LER]; // criao do array de 10
// inteiros
for (int i = 0; i < nmeros.length; i++) {
System.out.print("Entre com o proximo inteiro: ");
nmeros[i] = sc.nextInt();
}
for (int i = nmeros.length - 1; i >= 0; i--) {
System.out.println(nmeros[i]);
}
}
}
Observe que arrays so sempre indexados a partir de zero
Precisa saber o tamanho para criar o array
nmeros.length o nmero de elementos no array nmeros
No lao, prefervel usar nmeros.length a usar o nmero 10
Por qu?
Segue um programa que ecoa os argumentos de linha de comando
Esta soluo est no arquivo Eco.java
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 11/12
package p2.exemplos;
/*
* Ecoar argumentos de linha de comando
*
* Autor: Jacques Sauv
*/
public class Eco {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.print(args[i] + " ");
}
System.out.println();
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
Observe que args um array normal, composto de Strings
Segue um programa que mostra uma forma de inicializar arrays
Esta soluo est no arquivo Dia.java
package p2.exemplos;
/*
* Imprime o dia da semana correspondendo ao argumento de linha de comando
*
* Autor: Jacques Sauv
*/
public class Dia {
public static void main(String[] args) {
final int DIAS_NA_SEMANA = 7;
final String[] diasDaSemana = { "", "Domingo", "Segunda", "Terca",
"Quarta", "Quinta", "Sexta", "Sabado" };
if (args.length != 1) {
System.err.println("Sintaxe: Dia numero");
System.exit(1);
}
int dia = Integer.parseInt(args[0]);
if (dia < 1 || dia > DIAS_NA_SEMANA) {
System.err.println("O dia da semana deve estar entre 1 e "
+ DIAS_NA_SEMANA);
System.exit(1);
}
System.out.println(diasDaSemana[dia]);
}
}
Observaes
A inicializao do array diaDaSemana j calcula o tamanho necessrio
recomendado usar System.err em vez de System.out para imprimir erros
System.exit(0) usado para terminar o programa "bem"
System.exit(1) usado para terminar o programa "mal"
Integer.parseInt(xpto) converte o string xpto a um inteiro
Teste: retire o teste da seguinte linha ...
if(dia < 1 || dia > 7) {
... e veja o que ocorre com argumento 8
12/7/2014 Introduo Linguagem Java Atravs de Exemplos
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/intro/intro.htm 12/12
Voc pode obter mais informao e dicas sobre entrada e sada em Java aqui
Voc poder no entender tudo que est a agora, mas volte a ler este material
sobre entrada e sada de vez em quando ao longo da disciplina. Voc enteder
mais a cada leitura
Tem mais exemplos de programas simples aqui para vocs examinar:
Oper1.java
Oper2.java
Oper3.java
Oper4.java
Oper5.java
Oper6.java
Oper7.java
Oper8.java
Data1.java
Data2.java
Data3.java
Data4.java
intro-1 programa

Das könnte Ihnen auch gefallen