Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java...

44
Introdução à Linguagem Java Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 1 / 87 A Linguagem Java Linguagem de programação divulgada pela Sun Microsystems em 1995: início do desenvolvimento: 1991 líder da equipa: James Gosling da Sun Microsystems a partir de 2009, pertence à Oracle Sintaxe muito próxima do C: mas não tem apontadores! Orientada a objectos (OO): os programas são classes noção de objecto é fundamental propriedades OO: abstracção, encapsulamento, herança e polimorfismo. outras linguagens OO que lhe antecederam: smalltalk (1980) - a primeira linguagem de referência C++ (1985) - acrescentou a orientação aos objectos ao C outras: Simula (1967), Eiffel, C#, Ruby, Scala, Python, Groovy Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87

Transcript of Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java...

Page 1: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Introdução à Linguagem Java

Fernando Silva

DCC-FCUP

Estruturas de Dados

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 1 / 87

A Linguagem Java

Linguagem de programação divulgada pela Sun Microsystems em1995:

I início do desenvolvimento: 1991I líder da equipa: James Gosling da Sun MicrosystemsI a partir de 2009, pertence à Oracle

Sintaxe muito próxima do C:I mas não tem apontadores!

Orientada a objectos (OO):I os programas são classesI noção de objecto é fundamentalI propriedades OO: abstracção, encapsulamento, herança e polimorfismo.

outras linguagens OO que lhe antecederam:I smalltalk (1980) - a primeira linguagem de referênciaI C++ (1985) - acrescentou a orientação aos objectos ao CI outras: Simula (1967), Eiffel, C#, Ruby, Scala, Python, Groovy

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87

Page 2: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Vantagens do Java

linguagem OO relativamente puraportabilidade:

I compila para byte-code (código intermédio)I basta ter uma máquina abstracta (java virtual machine/JVM) para

executar o programa.segurança e robustez:

I ao carregar o byte-code, a máquina abstracta verifica a sua validadeI gestão de memória intrinseca (com garbage-collection)I detecta erros em tempo de execução gerando excepções que podem ser

“apanhadas” pelo programareutilização de código – deriva do facto de ser OO

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 3 / 87

Processo de Programação

Envolve um conjunto de etapas:

definir as especificações do problema a resolverconceber um algoritmo que resolva o problemacodificar o algoritmo numa linguagem de programação de alto-níveldocumentar o algoritmo/programa de forma a torná-lo compreensívelpara terceirostestar o programa num conjunto de dados de input significativo deforma a eliminar errosfazer a manutenção do programa ao longo do tempo.

Neste processo, o desenvolvimento pode beneficiar de bons princípios deprogramação como a modularidade (ou abstracção procedimental) queconsiste em dividir programas em módulos mais simples e de menorcomplexidade.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 4 / 87

Page 3: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Modularidade e abstracção

Modularidade: agrupar procedimentos e funções em módulos; ajuda a

diminuir complexidade do programa;identificar funcionalidades permitindo reutilização em outrosprogramas;identificar mais rapidamente partes do programa que têm de sermodificadas sem mexer no programa todo;

O programador precisa apenas de conhecer a interface do módulo (nomede procedimento e tipo de argumentos) para poder usá-lo, ficando assimescondidos detalhes de implementação do módulo. A esta capacidadedesignamos por:

Abstracção: capacidade de abstrair dos detalhes (complexidade) deixandoapenas o que é fundamental para uso do conceito.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 5 / 87

Encapsulamento

Encapsulamento consiste em “esconder” os detalhes associados àimplementação de um módulo, deixando apenas visível uma interfacebem definida através da qual pode haver interacção com o exterior.Uma programação baseada em abstracção de dados (esconderdetalhes de implementação dos dados) designa-se por programaçãoorientada a objectos.No paradigma de programação OO, existem três entidadesfundamentais:

I objecto – repositório de informação (dados)I classe – caracterização geral do tipo de objectoI método – procedimento ou função que opera sobre um objecto

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 6 / 87

Page 4: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Classes e Objectos

Classe: é a base de encapsulamento e representa uma abstracção deum conjunto de objectos que partilham a mesma estrutura ecomportamento;Uma classe descreve os atributos gerais de um objecto através dadefinição de um template que inclui os tipos dos atributos (variáveisou dados) e funções (métodos) que operam sobre eles.Objecto: é uma instância particular de uma classe, pelo que étambém constituído por um conjunto de dados e métodos queoperam sobre esses dados.É comum objectos de diferentes classes estarem relacionados e porvezes constituirem hierarquias de objectos.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 7 / 87

Herança e Polimorfismo

Herança: é a capacidade de as classes poderem “herdar” atributos emétodos de classes mais gerais.

I Uma classe ListaCompras herda de uma classe Lista a propriedadede armazenar uma lista de ítens.

I Uma classe Funcionario herda atributos de uma classe Pessoa.

polimorfismo: é a capacidade de definir métodos gerais quefuncionem com várias classes, mesmo que estas requeiramimplementações diferentes.

I e.g. um método addItem() que sirva para qualquer tipo de lista,independentemente do que lá guardamos.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 8 / 87

Page 5: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Classes

Classe: é uma entidade de um programa que representa:um programa/módulo, ouum template para criar um novo tipo de objectos, incluindo adescrição dos:

I tipos de dados que representam os seus atributos, eI métodos que operam sobre os atributos.

Exemplo:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 9 / 87

Hello World em Java

Um programa em java é também uma classe:

A execução de um programa Java começa sempre pelo métodomain().Para executar este programa, fazer na linha de comando:

khredo> javac HelloWorld.java - compilação do programa- produz um HelloWorld.class (bytecode)

khredo> java HelloWorld - emulador executa HelloWorld.class

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 10 / 87

Page 6: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Definir classes em Java

Uma classe em Java inclui:I atributos ou variáveis internas à classe;

podem ser globais e acessíveis por todos os métodos e construtores oulocais a um método.

I construtores permitem inicializar os objectos no momento em que sãocriados;

I métodos que manipulam os atributos, modificando-os.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 11 / 87

Exemplo: classe Counter

Implementa um simples contador que pode ser incrementado oudecrementado em uma unidade de cada vez.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 12 / 87

Page 7: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Definir classes em Java (2)

Sintaxe:[<qualificador_classe>] class <nome_classe>

[extends <superclasse>][implements <interface_1>, interface_2>,...]

{// variáveis e métodos

}Uma classe pode ter um qualificador:

I abstract – interface, i.e. apenas define métodos abstractos (corpovazio)

I final – a classe não pode ter subclasses.I public – a classe pode ser instanciada ou extendida (. . .)

public class <nome_classe> – só pode existir uma por ficheirocom o nome <nome_classe>.java

I se não se usar qualificador, assume-se a classe como friendly, i.e.equivalente a public class (default).

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 13 / 87

Noção de objecto em Java

Em Java manipulamos essencialmente objectos (instânciasparticulares de classes):

I fazemo-lo através de uma variável que é uma referência para o objectoI através da referência podemos invocar métodos do objecto que podem

alterar o seu estadoUma analogia: televisor (objecto) e comando-remoto (referência)

I tendo o comando-remoto posso modificar o estado do objecto:aumentar o volume, mudar de canal, etc;

I se me deslocar na sala e quiser controlar o televisor basta-me levarcomigo o comando e não o televisor;

I por outro lado, o facto de eu ter um comando-remoto não significa quetenha um televisor associado;

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 14 / 87

Page 8: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Exemplo: criação de objectos da classe Counter

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 15 / 87

Criação de um objecto em Java

Criação de uma referência:Counter c;

I c é uma referência para um objecto da classe Counter;I contudo c ainda não representa um objecto.

O objecto é criado invocando o método construtor precedido de new.Counter c = new Counter();

I c representa agora um novo objecto do tipo Counter inicializado pelométodo construtor desta classe;

Ao fazermos d= c; estamos a fazer com que d referencie o mesmoobjecto que c e não a cópia!Note-se que existem outros tipos básicos de dados e classes, assimcomo podemos criar novas classes, de onde se podem instanciar novosobjectos.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 16 / 87

Page 9: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Métodos de classes

são conceptualmente análogos a funções em outras linguagens eapenas podem existir dentro de classes;class Exemplo {...int soma(int a, int b) { return a+b; }

}

só podem ser invocados através de um objecto...Exemplo x= new Exemplo(); // objecto x...int a= x.soma(2,3); // invocação do método de x

usamos o objecto x e invocamos o método soma() (ou enviamos umamensagem para o objecto x).

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 17 / 87

Métodos de classes: sintaxe

[<qualificador>] <tipoRetorno> <nomeMétodo> ([<parâmetros>]) {

// corpo do método}

qualificadores:I public pode ser invocado por qualquer umI protected pode ser invocado apenas por métodos do mesmo package

ou subclasses.I private pode ser invocado apenas pelos métodos da mesma subclasse.I por defeito o método é friendly, pode ser invocado por objectos de

classes do mesmo package.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 18 / 87

Page 10: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Métodos de classes (cont.)

qualificadores de segundo nível:I abstract sem código; apenas em classes abstractas.I final método que não pode ser reescrito pela subclasse.I static método da classe; na invocação não se cria uma nova instância,

pode ser invocado independente do objectométodos construtores

I são métodos especiais, com o mesmo nome da classe e usados parainicializar novos objectos.

I não pode ter qualificadoresmétodo main() – a classe que define o programa tem de ter ummétodo main() para indicar onde se inicia a execução.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 19 / 87

Declaração e Atribuição

Declaração de variáveis:I sintaxe: tipo-dados nome-variável;I as variáveis têm de ser declaradas antes de ser usadas.I a declaração corresponde a fazer-se reserva de memória para

guardarmos o valor da variável.Atribuição:

I sintaxe: nome-variável = expressão;I atribuir um valor à variável (guarda na memória associada à variável).

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 20 / 87

Page 11: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Qualificador static

serve para referir algo independente do número de objectos criados;variáveis estáticas:

class StaticField {static int x= 10;

}StaticField sf1 = new StaticField();StaticField sf2 = new StaticField();

Os atributos x dos objectos referenciados por sf1 e sf2 têm omesmo valor (referem a mesma posição de memória).métodos estáticos: o método pode ser invocado através da classe,sem se criar o objecto.

class StaticMethod {static int soma(int a, int b) {return a+b;}

}int x= StaticMethod.soma(2,3);

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 21 / 87

Palavras reservadas

O Java tem um conjunto de identificadores (palavras) reservadas dalinguagem:

abstract default if private thisboolean do implements protected throwbreak double import public throwsbyte else instanceof return transientcase extends int short trycatch final interface static voidchar finally long strictfp volatileclass float native super whileconst for new switchcontinue goto package synchronized

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 22 / 87

Page 12: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Tipos de dados básicos

O Java tem apenas estes tipos de dados simples; tudo o resto são objectos:

inteirosbyte 8 bits [−27 : 27 − 1]short 16 bits [−215 : 215 − 1]int 32 bits [−231 : 231 − 1]long 64 bits [−263 : 263 − 1]

Vírgula flutuante (IEEE 754 floating point)

float 32 bits [−3.4029E + 38 : +3.4029E + 38]double 64 bits [−1.79769E + 308 : +1.79769E + 308]

Outrosboolean 8 bits valor booleano (true ou false)char 16 bits ISO Unicode char set

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 23 / 87

Exemplo com tipos de dados básicos

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 24 / 87

Page 13: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Operadores

Aritméticos: Lógicos:+ adição - subtracção* multiplicação / divisão% módulo ++ incremento-- decremento

! NOT lógico&& AND lógico|| OR lógico

Bits:~ NOT binário & AND binário| OR binário ^ XOR binário<< shift binário esquerda >> shift binário direita

Relacionais ou de comparação:== igualdade != diferente< menor que <= menor ou igual que> maior que >= maior ou igual que

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 25 / 87

Divisão-inteira e Resto-da-divisão

Quando dividimos inteiros, o quociente é inteiro.I 18/4 dá 4 e não 4.5I y = x/2; – a divisão será inteira se x for um int.I se x for float e y for int, a divisão será em virgula flutuante, mas

depois o resultado é truncado para inteiro.I dividir por 0 provoca um erro durante a execução

O operador % calcula o resto da divisão inteira.I 18 % 4 dá 2I 59 % 5 dá 4

Aplicações do operador %:I obter o último dígito de um número: 12345 % 10 é 5I obter os últimos três dígitos: 734528 % 1000 é 528I verificar se um número é par: 9 % 2 é 1 e 16 % 2 é 0

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 26 / 87

Page 14: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Regras de precedência entre operadores

Precedência: ordem de avaliação dos operadores.

a regra geral é avaliação da esquerda para a direita.I 5-2-7 é igual a (5-2)-7 que é -4

mas os operadores * / % têm maior precedência que + -I 5+2*3 é 11I 5+10/2*3 é 5+5*3 que dá 20

os parentesis forçam a ordem de avaliação

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 27 / 87

Operadores de incremento/decrementooperadores incremento/decremento:

I variavel++; ⇐⇒ variavel = variavel + 1;I variavel--; ⇐⇒ variavel = variavel - 1;I ++variavel; ⇐⇒ variavel = variavel + 1;I --variavel; ⇐⇒ variavel = variavel - 1;

Cuidado com o uso destes operadores sobre variáveis no meio deexpressões. Consideremos o seguinte:

I int x= 5, y= 3, z;I x++; // incrementa x, i.e. x= x+1I --y; // decrementa y, i.e. y= y-1I z= x-- * ++y; // com que valores ficam x, y e z ?

x-- diz-nos para usar primeiro o valor de x e depois decrementar emuma unidade;++y diz-nos para primeiro incrementar y uma unidade e depois usar oseu valor.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 28 / 87

Page 15: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Operadores de imodificação-e-atribuição

operadores modifica-e-atribui:I variavel += valor; ⇐⇒ variavel= variavel + valor;I variavel -= valor; ⇐⇒ variavel= variavel - valor;I variavel *= valor; ⇐⇒ variavel= variavel * valor;I variavel /= valor;⇐⇒ variavel= variavel / valor;

Exemplos:I x -= 1; ⇐⇒ x--; ⇐⇒ x= x-1;I y /= 2; ⇐⇒ y = y/2;I x *= y+2;⇐⇒ x= x*(y+2);

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 29 / 87

Instruções de controle de fluxo (ou de decisão)

if-else if (a>b) a++; else b++;?: (a>b) ? a++; : b++;switch-case

if (condição) { switch (variável) {codigo-se-condição-true; case valor1: {

} bloco-código1;else { break;

código-se-condição-false; }} case valor2: {

...}default: {

código-por-defeito;break;

}}

(condição) ? código-se-true; : código-se-false;Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 30 / 87

Page 16: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Instruções de ciclo: while

Estrutura geral:

inicializa;while (condição) {

bloco_instruções;next;

}

Um exemplo: método para verificar se um inteiroé primo.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 31 / 87

Instruções de ciclo: for

Estrutura geral:

for (inicialização; condição-paragem; next) {bloco_instruções;

}

Um exemplo: método para verificar se um inteiro é primo.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 32 / 87

Page 17: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Instruções de ciclo: do-while

Estrutura geral:

inicializa;do {

bloco_instruções;next;

} while (condição);

Um exemplo: método para verificar se um inteiroé primo..

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 33 / 87

Strings em Java

as strings são objectos da classe Stringuma string é uma sequência de caracteres vista como uma unidade.criação de strings:

I String cor1= “vermelho”; – inicializada.I String mistura= “vermelho” + “amarelo”; – inicializada.I String cor2; – não inicializada.

criação/inicialização invocando métodos construtores:I cor2= new String(“verde”);I cor3= new String(“”); – inicializa com string vazia

o operador + funciona como concatenador de stringsI cor2= “Hello” + “World” + cor1;

segue-se um exemplo do uso de construtores para inicializar umobjecto String.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 34 / 87

Page 18: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Exemplo com Strings

Diferentes maneiras de criar objectos do tipo String:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 35 / 87

Strings como vectores de caracteres

As strings não são vectores do tipo array do Java,mas, podem ser vistas como vectores:

cada caracter é um char, mas como aceder a cada um dos caracteres?nome.charAt(0) ou nome.charAt(5)e se pretender imprimir todos?

for(int c=0; c < nome.length(); c++)System.out.print(nome.charAt(c));

posso transformar um vector de caracteres numa string e vice versa?I char n[]= nome.toCharArray(); converte a string em vector.I String nova= Arrays.toString(n); converte o vector n[] em

string.Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 36 / 87

Page 19: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Comparação de Strings

Como comparar se duas strings são iguais?I usar o método equals() e não o habitual operador “==”.

Dadas duas strings s1 e s2:I s1 == s2 apenas compara as referências dos dois objectos para ver se

se referem à mesma instância.I s1.equals(s2) compara por ordem os caracteres das duas strings.

O método equals() compara duas stringsI as duas strings serão iguais se tiverem os caracteres iguais, pela mesma

ordem.O método int n= s1.compareTo(s2) compara lexicograficamenteas strings s1 e s2

I n<0, se s1 precede s2I n==0, se forem iguaisI n>0, se s1 vem a seguir a s2

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 37 / 87

Comparação de Strings

Exemplos:

String s1= ‘‘Hello’’;String s2= ‘‘Hello’’;String s3= ‘‘Good-bye’’;String s4= ‘‘HELLO’’;s1.equals(s2) --> trues1.equals(s3) --> falses1.equals(s4) --> falses1.equalsIgnoreCase(s4) --> true

Experimentar num programa:System.out.print(s1+" equals "+s2+"-->"s1.equals(s2)); (true)eSystem.out.print(s1+"=="+s2+"-->" s1 == s2); (false)

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 38 / 87

Page 20: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Input e Output em Java

As funcionalidades de I/O do Java estão definidas na API: java.io.A leitura e escrita faz-se através de canais (streams) que podemrepresentar um qualquer periférico físico.Os canais podem ser:Byte streams : leitura e escrita sob a forma de bytes;Character streams : leitura e escrita sob a forma de carateres.A classe System, definida em java.lang, inclui muitas definições desistema, nomeadamente 3 canais: in, out, e err.

I InputStream System.in – objecto que representa o standard inputstream (por defeito o teclado);

I PrintStream System.out – objecto que representa o standard outputstream (por defeito a consola);

I PrintStream System.err – objecto que representa o standard errorstream (consola).

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 39 / 87

A classe Scanner

Fornece métodos de parsing de tipos primitivos e Strings.Simplifica muito o processamento do input vindo de:

I um canal de leitura (tipo InputStream)Scanner stdIn= new Scanner(System.in); // lê do teclado

I uma StringScanner strIn= new Scanner(line); // line é uma string

I ou de um ficheiroFile nf= new File(nomeFich);Scanner fileIn= new Scanner(nf); // lê do ficheiro

a classe Scanner lê do canal de leitura e divide-o em palavras que sãostrings separadas por caracteres especiais, os delimitadores.

I o método useDelimiter(expressao) permite especificar, através deuma expressão regular, o modo como se pretende separar o input empalavras.

I Exemplo: scanner.useDelimiter("\r\n")Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 40 / 87

Page 21: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Classe Scanner - métodos

Para se poder usar a classe Scanner é necessário declarar no programa:import java.util.Scanner; ou import java.util.*;

Alguns métodos relevantes desta classe:hasNext() true se e só se existir mais uma palavra no input

next() retorna a próxima palavra (String) do inputhasNextLine() true se e só se o input tiver mais uma linha de texto

nextLine() retorna a próxima linha de texto do inputhasNextType() true se e só se a próxima palavra for do tipo Type, onde

Type pode ser qualquer tipo básico: Int, Float, Double...nextType() retorna a próxima palavra convertida para o tipo básico

definido por Type.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 41 / 87

Scanner: leitura a partir de uma String

Processa a leitura a partir da String e aplica os separadores definidos poruseDelimiter():

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 42 / 87

Page 22: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Scanner: leitura a partir do teclado

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 43 / 87

Scanner: leitura a partir de um ficheiro

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 44 / 87

Page 23: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Output formatado: classe Formatter

O Java a partir da versão 5.0 admite output formatado ao estilo doprintf do C.usar a package java.util.Formatter e o métodoformat() da classe String:String fmt= String.format(‘‘pi = %5.3f\n’’);para escrever formatado, usar:double pi= Math.PI;System.out.printf(fmt, pi);ouSystem.out.printf("pi= %5.3f\n", pi);

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 45 / 87

Formatação de texto com printf()

Sintaxe do método printf() é:System.out.printf ("string formato", parâmetros)Uma string de formato contém “encaixes” para inserir os valores dosparâmetros:

I %d - inteiro base 10I %x - inteiro base hexadecimalI %o - inteiro base octalI %f - número real ou em vírgula flutuanteI %s - stringI %c - caracter

o printf() não faz a mudança de linhaé necessário incluir o caracter ‘\n’ (newline) na string de formato noponto onde quisermos mudar de linha.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 46 / 87

Page 24: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Formatos especiais (inteiros)

%Wd - inteiro com W caracteres de largura, alinhado à direita.%-Wd - inteiro com W caracteres de largura, alinhado à esquerda.

Output:

1 2 3 4 5 6 7 8 9 102 4 6 8 10 12 14 16 18 203 6 9 12 15 18 21 24 27 30

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 47 / 87

Formatos especiais (reais)

%.Df - no real, arredondado para D casas decimais.%W.Df - no real, com W caracteres e D casas decimais.%-W.Df - no real, com W caracteres alinhados à esquerda e D casasdecimais.Exemplo:double media= 13.172585;System.out.printf("Media: %.1f\n", media);System.out.printf("Media mais precisa: %8.3f\n", media);Output:Media: 13.2Media mais precisa: 13.173

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 48 / 87

Page 25: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Exemplo: uso de printf

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 49 / 87

Vectores simples (arrays) em Java

Os arrays são objectos que agrupam sob um mesmo nome um conjunto devariáveis numeradas de um mesmo tipo (primitivo ou objecto). Asvariáveis de um array são sempre indexadas a partir do zero.

criar uma referência x para um “vector de inteiros”;I int[] x; ouI int x[];

o operador new permite reservar espaço em memória para o vectorx[] (dimensionando-o):

I x = new int[10]; – cria efectivamente o vector e guarda a sualocalização em x.

x[0]= 23 x[1]= 15 x[2]= 25 ...

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 50 / 87

Page 26: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Vectores simples em Java (2)

Ao trabalharmos com arrays é necessário ter atenção a possíveisexcepções que sejam geradas e indiciadoras de situações de erro, e.g:

I NullPointerException – tentar usar o vector sem o criar;I ArrayIndexOutOfBounds – aceder ao vector fora dos limites, e.g.

int v[]= new int[4]; // vector com 4 elementos

v[4]= 5; // aborta com ArrayIndexOutOfBoundsException// v[4] já seria o 5o elemento!

No Java, todos os vectores têm associado uma variável atributolength, e.g.

I v.length dá a dimensão (ou capacidade) do vector.Como re-dimensionar um vector? Apenas por cópia para novo:

I int nv[]= Arrays.copyOf(v, 2*v.length);

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 51 / 87

Vectores simples em Java (3)

Podemos escrever os elementos de um vector com apenas um print?

produz duas linhas de output:

É possível comparar vectores com apenas uma instrução decomparação (==)? Não!

I é necessário fazer um ciclo a comparar os elementos, ouI usar o método Arrays.equals()

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 52 / 87

Page 27: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Exemplos do uso de vectores

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 53 / 87

Clonagem de vectores

Clonagem de vectores (cria umacópia separada do vector!):

Ilustração dos vectores apósclonagem:

x[] e xCopia[] são duas referências para o mesmo objecto (nãoexiste propriamente uma cópia).x[] e xClone[] são dois objectos em que o segundo é de facto acópia do primeiro (por clonagem).

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 54 / 87

Page 28: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Vectores como parâmetros e retorno de métodos

Um método pode ter parâmetros na chamada que são vectores e podedar como resultado um vector.Exemplo: escrever um método em que dados 2 vectores de igualtamanho, retorna um vector com a soma dos dois vectores.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 55 / 87

Vectores multimensionais (matrizes) em Java

Os vectores podem ser multi-dimensão (e.g. as matrizes). Porexemplo:int v[][]= new int[4][4]; // matriz bi-dimensional 4x4

int u[][][]= new int[4][4][4]; // tri-dimensionalExemplo: Multiplicação de uma matriz a[N][M] por um vector u[M]

para dar v [N]:

i.e.

vi =M−1∑

j=0aij × uj (0 ≤ i < N)

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 56 / 87

Page 29: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Multiplicação de matriz por vector

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 57 / 87

Triângulo de Pascal

O triângulo de Pascal pode ser visto como uma matriz triangular inferior:

1 ou 1 <-- lin 01 1 1 1 <-- lin 1

1 2 1 1 2 1 <-- lin 21 3 3 1 1 3 3 1 <-- lin 3

1 4 6 4 1 1 4 6 4 1 <-- lin 41 5 10 10 5 1 1 5 10 10 5 1 <-- lin 5

Cada valor é a soma dos dois valores mais próximos da linha anterior. Arepresentação corresponde a uma matriz triangular inferior.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 58 / 87

Page 30: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Triângulo de Pascal

Método para calcular as linhas do Triângulo de Pascal, usando uma matrizapenas dimensionada triangularmente:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 59 / 87

Dimensionamento matriz triangular inferior

Ilustração da matriz triangular inferior que representa o triângulo de Pascal(só estamos a reservar memória para o número correcto de elementos nalinha):

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 60 / 87

Page 31: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Instruções break, continue e return

break - sai do bloco de código corrente, normalmente um ciclo ouswitch, continuando a execução na instrução a seguir ao ciclo ouswitch.continue - é a instrução dual do break, servindo para se ignorar asinstruções da iteração corrente de um ciclo, passando-se para aiteração seguinte.labels - etiquetas que podem ser associadas a break e continue,marcando a posição no código para onde transita a execução.return - força a saída do corpo de um método com retorno de umavariável com o tipo de dados de retorno do método.Se o método não retornar nada, i.e. tiver tipo void, a execução dométodo termina na última instrução (não tem instrução de return).

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 61 / 87

Exemplo com labels, breaks e continues

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 62 / 87

Page 32: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Constantes e Tipos Enumerados de Dados

Uma constante em Java tem de ser definida no âmbito de uma classe,como um dos seus atributos e declarada como static final.Exemplos:

I static final int N=100;I static final float PI= 3.1415;I Por convenção, o nome de uma constante é todo em maiúsculas.I Só existe uma cópia de um atributo estático de uma classe,

independentemente do número de instâncias que possam ser criadas.Um atributo que seja do tipo enumerado, enum, apenas pode tomaros valores de um conjunto de valores especificado.

I Sintaxe:[modificador] enum <nome> {val0, val1, ..., valN-1};o modificador pode ser public, private ou protected, ou vazio.

I Exemplo:public enum Dia {SEG, TER, QUA, QUI, SEX, SAB, DOM};

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 63 / 87

Exemplo do uso de tipos enumerados

Classe que exemplifica o uso de uma variável do tipo enumerado pararepresentar dias da semana:

O output que se obtém é:

Inicialmente d ee SEGDepois passou para QUA

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 64 / 87

Page 33: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Objectos genéricos em Java

Em Java, só temos referências a objectos e 8 tipos básicos de dados.Em Java, todos os objectos são casos particulares de um tipo maisgeral chamado Object.Object permite a utilização de variáveis capazes de conter umareferência para qualquer tipo de objecto.

O objecto t fica com a capacidade de se referir a qualquer coisa (tipomais geral).A redução do âmbito do tipo Object para um outro mais específico,obriga a fazer uma conversão de tipos (type-cast).

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 65 / 87

Wrappers para tipos primitivos

Os objectos genéricos permitem definir classes genéricas, i.e.I classes que podem conter qualquer tipo de objectos.

Por exemplo, podemos pensar numa classe que represente uma listaque possa conter qualquer objecto Java.

Contudo, isso impede que se tenha nessa lista valores do tipoint ou de outro tipo básico.

Para ultrapassar esta dificuldade, o Java fornece classes especiais(wrapper classes) que encapsulam em objectos os tipos primitivo.Exemplos:

I classe Integer – cada objecto contém um intI classe Boolean – cada objecto contém um booleanI etc.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 66 / 87

Page 34: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Wrapper classes (cont.)

Wrapper Class Construtor Método acessoByte Byte(byte v) byte byteValue()

Short Short(short v) short shortValue()Integer Integer(int v) int intValue()

Long Long(long v) long longValue()Float Float(float v) float floatValue()Double Double(double v) double doubleValue()

Character Character(char v) char charValue()Boolean Boolean(boolean v) boolean booleanValue()

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 67 / 87

Wrapper classes (cont.)

O Java 5.0 escondeu o uso das wrapper-classes, simplificando a formacomo se lidam com objectos numéricos, Number (e.g. Integer, Float, ...)

Permite conversões implícitas, designadas por autoboxing, queconvertem um tipo básico num objecto NumberTambém permite o inverso, unboxing, i.e. sempre que for esperadoum tipo básico numa expressão, converte automaticamente o objectoNumber nesse tipo.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 68 / 87

Page 35: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Exemplo: autoboxing e Unboxing

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 69 / 87

A classe ArraysA implementação de vectores em Java tem por base a classe Arraysque integra o pacote java.util.o atributo length diz-nos a dimensão do vectoralguns métodos importantes da classe

copyOf(v,newSize) retorna uma cópia do v com tamanhonewSize

copyOfRange(v,i0,i1) retorna uma cópia da porção de v compreen-dida entre os indices i0 e i1

equals(v1,v2) retorna true se os dois vectores tiverem osmesmos elementos

fill(v,val) preenche todos os elementos do vector v como valor val

sort(v) ordena os elementos do vectortoString(v) retorna uma String com a representação do

vector vFernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 70 / 87

Page 36: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 1: Múltiplos Contadores

Problema 1: Escrever um método digitoMaisFrequente() que retorneo dígito que ocorre mais vezes num dado número.

Exemplo: o número 3435667323 contém:I 1 (2), 4 (3), 1 (4), 1 (5), 2 (6) e 1 (7)I digitoMaisFrequente(3435667323) retorna 3

se existir um empate, deve mostrar o menor dígito.Sugestão:

I usar um contador por cada dígito (vector com 10 contadores)I d=n%10 dá o dígito das unidades; n=n/10 retira dígito das unidadesI Exemplo 669260267

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 71 / 87

Problema 1: Múltiplos Contadores (solução)

Ver solução completa na página dos apontamentos:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 72 / 87

Page 37: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 2: Histogramas

Problema 2: Escrever um método void histograma(int notas[])que, recebendo como parâmetro um vector de classificações, dados comovalores inteiros, produza um histograma de estrelas (*) que indique onúmero de alunos que obtiveram uma determinada classificação (suporapenas os registos de 0 a 20.

Exemplo:I dados 12 13 12 17 14 14 18 15 13 15 12 15I deve produzir:

12: ***13: **14: **15: ***17: *18: *

Sugestão: solução parecida com anterior, mas com 21 contadores!Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 73 / 87

Problema 2: Histogramas (solução)

Solução completa nos apontamentos:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 74 / 87

Page 38: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 3: Vectores de ObjectosEm muitas situações, a informação que precisamos de guardar não setraduz por apenas um valor, mas sim por um conjunto de valoresagregados que caracterizam um objecto/entidade.

Exemplo simples: classe para representar um ponto no plano

Suponhamos que pretendemos ler n pontos no plano e determinarqual deles está mais próximo da origem. Como fazer?

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 75 / 87

Problema 3: Vector de Pontos

Leitura dos pontos para o vector:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 76 / 87

Page 39: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 3: Vector de Pontos

distancia a um ponto:

calcular mais próximo da origem:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 77 / 87

Prob 4: Cobrador de Impostos (Vector de Objectos)

Problema 4: Foram-lhe fornecidos dados sobre um conjunto de empresas,nomeadamente, para cada empresa, foi-lhe dada informação sobre:

O seu número de indentificação fiscal (NIF)O nome da empresaA sua área de actividade económicaO código da área de actividade económicaOs rendimentos declarados no último ano fiscal

A sua tarefa consiste em ler os dados e apresentar o total de rendimentospor cada área de actividade económica. A informação deve aparecerordenada por ordem crescente do código de área económica.Nota: ver solução na página dos apontamentos.

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 78 / 87

Page 40: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 4: Cobrador (classe Empresa)

Representar a informação sobre uma empresa como uma classe:

Devemos depois usar um vector de objectos desta classe:Empresa emp[]= new Empresa[N]

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 79 / 87

Problema 4: Cobrador (método main)No main() lemos os dados e escrevemos a solução:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 80 / 87

Page 41: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 4: Cobrador (método leDadosEmpresa)

A leitura de dados relativos a uma empresa é feita na classe Empresa pelométodo:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 81 / 87

Problema 5: Escrita de Números em Texto

Problema 5: Dado um número n, 0 <= n < 1000000, implemente ummétodo que escreva em texto o número.

Exemplos:I 100 = cemI 105 = cento e cincoI 1000 = milI 12345 = doze mil trezentos e quarenta e cincoI 10045 = dez mil e quarenta e cincoI 10000 = dez milI 10020 = dez mil e vinte

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 82 / 87

Page 42: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 5: Sugestões

Como lidar com números menores que 100, i.e. números com doisdígitos N = d1d2?Se d1 for 0?

I números de 0 a 9 i.e. temos strings de “zero” a “nove”I String unidades[]={"zero",...,"nove"};I indexamos o vector com o valor de d2

Se d1 for 1?I números de 10 a 19 i.e. temos strings de “dez” a “dezanove”I String dez_dezanove[]={"dez",...,"dezanove"};

Se d2 for 0?I temos números números 20, 30, ..., 90.I String dezenas[]={"","","vinte",...,"noventa"};

Caso geral com os dois dígitosI temos números números como 25, 33, ...I dezenas[d1] + " e " + unidades[d2]

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 83 / 87

Problema 5: método converte2()

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 84 / 87

Page 43: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 5: método converte3()

Como converter números menores que 1000?

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 85 / 87

Problema 5: método converte6()

Como converter números menores que 1000000?

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 86 / 87

Page 44: Introdução à Linguagem Java - FCUP · Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 2 / 87. Vantagens do Java linguagem OO relativamente pura portabilidade:

Problema 5: método main()

Leitura do input e escrita:

Fernando Silva (DCC-FCUP) Introdução à Linguagem Java Estruturas de Dados 87 / 87