Вы находитесь на странице: 1из 30

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 subprogramas (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" "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;

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)

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; 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 */

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;

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 Tamanh Mnimo primitivo o boolea 1 bit n char byte 16 bits Unicode 0 Mximo Exemplos de Constantes true, false

Unicode 65.535 'a' (letra a) +127 97, -23 0x65 (hexadecimal)

8 bits -128

short int

16 bits 32 bits

-215 (-32.768) -231 (uns -2 bi) -263 (uns -9 quintilhes) aprox -1038 (6-7 dgitos significativos ) aprox -10308 (15 dgitos significativos ) -

+215-1(32.767) +231-1 (uns 2 bi) +263-1 (uns 9 quintilhes)

17569, -21875 1876345240, 2000000000 123981723971982318273L , 12381726387613678688L, 97L, -23L, 0L (Observe o 'L' final)

long

64 bits

float

32 bits

aprox +1038 -3.4F (6-7 dgitos 45.78E+23F significativos (Observe o 'F' final) ) aprox +10308 (15 dgitos -3.4 significativos 45.78E+23 ) indica ausncia de tipo (quando um "mtodo" nada retorna)

double

64 bits

void

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 autodecremento

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 { mdia = soma/nmeroDeNotas; }

Expresses complexas e precedncia de operadores A precedncia dos operadores pode ser vista na tabela abaixo, a qual nodeve se decorada Observe que a tabela contm operadores que ainda no mencionamos
Precedncia Mais alta Associatividade

Operadores [] . () ! ~ ++ -- + (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; 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

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

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

Вам также может понравиться