You are on page 1of 137

Prof.

Daniel Oliveira

Conceitos de Algoritmos

Daniel Barbosa de Oliveira

Pág.: 1/137

Prof. Daniel Oliveira

Ilustrações

Figura 1 - Definição de algoritmo .......................................................................................................................... 11
Figura 2 - Arquitetura de Von Neumann............................................................................................................... 12
Figura 3 - Exemplo de instruções de máquinas ................................................................................................... 13
Figura 4 - Exemplo de um código em Assembly ................................................................................................... 13
Figura 5 - Processo de compilação ........................................................................................................................ 14
Figura 6 - Exemplo de um fluxograma .................................................................................................................. 15
Figura 7 - Fluxograma para cálculo da área de um retângulo .............................................................................. 16
Figura 8 - Exemplo de um fluxograma para determinação da maior idade ......................................................... 16
Figura 9 - Atribuição de variáveis em Fluxogramas .............................................................................................. 17
Figura 10 - Exemplo de fluxograma de cálculo de média nível Alto ..................................................................... 18
Figura 11 - Exemplo de cálculo de média detalhado ............................................................................................ 19
Figura 12 - Exemplo de um diagrama linear ......................................................................................................... 20
Figura 13 - Exemplo de sequência ........................................................................................................................ 20
Figura 14 - Exemplo de Estrutura condicional ...................................................................................................... 21
Figura 15 - Exemplo de Estrutura de repetição .................................................................................................... 21
Figura 16 - Exemplo de Case ................................................................................................................................. 22
Figura 17 - Exemplo de estrutura de dados .......................................................................................................... 29
Figura 18 - Definição de variável (Tonet,2004) ..................................................................................................... 30
Figura 19 - Processo de compilação de código fontes em Java ............................................................................ 33
Figura 20 - Arquitetura para execução do código Java ......................................................................................... 33
Figura 21 - Opções para obtenção do JDK ............................................................................................................ 34
Figura 22 - Opções de download do Eclipse ......................................................................................................... 35
Figura 23 - Tela de configuração de Workspace ................................................................................................... 35
Figura 24 - Tela inicial do Eclipse .......................................................................................................................... 36
Figura 25 - Ambiente do Eclipse para iniciar os trabalhos .................................................................................... 36
Figura 26 - Janela de perspectiva .......................................................................................................................... 37
Figura 27 - Outros tipos de perspectivas .............................................................................................................. 37
Figura 28 - Opção de troca de Workspace ............................................................................................................ 38
Figura 29 - Criação de um projeto Java ................................................................................................................. 38
Figura 30 - Selecionando o tipo de projeto no Eclipse.......................................................................................... 39
Figura 31 - Parâmetros inicias do projeto Java ..................................................................................................... 39
Figura 32 - Nome do projeto Java ......................................................................................................................... 40
Figura 33 - Tela de configuração final do projeto Java ......................................................................................... 40
Figura 34 - Package Explorer ................................................................................................................................. 41
Figura 35 - Usando o menu Show View ................................................................................................................ 41
Figura 36 - Criando uma nova classe..................................................................................................................... 42
Figura 37 - Parâmetros básicos para criação de classes ....................................................................................... 42
Figura 38 - Código inicial gerado pelo assistente de criação de classes ............................................................... 43
Figura 39 - Exemplo de código do primeiro projeto Java ..................................................................................... 43
Figura 40 - Janela de console com o resultado a execução do código ................................................................. 43
Figura 41 - Exemplo de código em Java ................................................................................................................ 44
Figura 42 - Exemplo de comentários de uma linha............................................................................................... 44
Figura 43 - Comentário de bloco........................................................................................................................... 44
Figura 44 - Método MAIN ..................................................................................................................................... 45
Pág.: 2/137

Prof. Daniel Oliveira

Figura 45 - Uso de chaves para delimitar blocos de código .................................................................................. 45
Figura 46 - Uso do ponto e vírgula para finalizar uma linha de código ................................................................ 45
Figura 47 - Exemplo endentação de código .......................................................................................................... 46
Figura 48 - Resultado da execução do exemplo de limites de valores para tipos numéricos .............................. 47
Figura 49 - Atribuição de valores .......................................................................................................................... 48
Figura 50 - Exemplo de erro com uso de variáveis não inicializadas .................................................................... 48
Figura 51 - Exemplos de compatibilidade de tipos ............................................................................................... 52
Figura 52 - Exemplo de falha entre conversão de tipos........................................................................................ 55
Figura 53 - Exemplo de tratamento de exceções.................................................................................................. 55
Figura 54 - Exemplo da classe Scanner ................................................................................................................. 58
Figura 55 - Uso do método next da classe Scanner .............................................................................................. 58
Figura 56 - Uso da classe Scanner ......................................................................................................................... 58
Figura 57 - Estrutura condicional .......................................................................................................................... 61
Figura 58 - Exemplo de expressão lógica com AND .............................................................................................. 64
Figura 59 - Exemplo de expressões relacionais com AND .................................................................................... 65
Figura 60 - Exemplo de operador OR .................................................................................................................... 65
Figura 61 - Tabela da verdade do operador AND ................................................................................................. 66
Figura 62 - Tabela da verdade do operador OR .................................................................................................... 66
Figura 63 - Loop pré-testados ............................................................................................................................... 73
Figura 64 - Loop pós-testado ................................................................................................................................ 74
Figura 65 – Array com 10 elementos .................................................................................................................... 83
Figura 66 - Representação de uma array multidimensional ................................................................................. 88
Figura 67 - Representação de uma matriz ............................................................................................................ 88
Figura 68 - Acessando posições dentro de um arranjo bidimensional ................................................................. 89
Figura 69 - Percorrendo uma array multidimensional .......................................................................................... 90
Figura 70 - Chamada de subprogramas ................................................................................................................ 94
Figura 71 - Analisando funções em Java ............................................................................................................... 95
Figura 72 - Exemplo de função com retorno em Java........................................................................................... 95
Figura 73 - Exemplo de passagem de parâmetros ................................................................................................ 97
Figura 74 - Passagem por valor ............................................................................................................................. 97
Figura 75 - Passagem por referência..................................................................................................................... 97
Figura 76 - Criando uma nova classe no Eclipse ................................................................................................. 103
Figura 77 - Tela de configuração para criação de uma nova classe .................................................................... 103
Figura 78 - Classe Livro ........................................................................................................................................ 104
Figura 79 - Classe Livro com seus membros ....................................................................................................... 104
Figura 80 - Usando a classe Livro ........................................................................................................................ 104
Figura 81 - Uso do operador ponto ..................................................................................................................... 105
Figura 82 - Método da Classe Livro ..................................................................................................................... 105
Figura 83 – Construtor ........................................................................................................................................ 107
Figura 84 - Classe NPC (inicial) ............................................................................................................................ 113
Figura 85 - Classe NPC com gets e sets ............................................................................................................... 113
Figura 86 - Classe NPC (Herança) ........................................................................................................................ 114
Figura 87 - Herança da classe Warrior ................................................................................................................ 115
Figura 88 - Classe Warrior ................................................................................................................................... 115
Figura 89 - Warrior é um NPC ............................................................................................................................. 115
Figura 90 - Delegate Constructor ........................................................................................................................ 115

Pág.: 3/137

............... Prof... 120 Figura 101 ..................................................................Classe Quadrado ..................... 116 Figura 92 ................................................Interface IFigura ............. 116 Figura 94 – Polimorfismo . 121 Figura 102 ..........................Sobrescrita como complemento de um método base...................................................................................................................................Referência aos métodos polimorfos .....................................................: 4/137 ...................Classe Circulo .................................. Daniel Oliveira Figura 91 ......................................... 119 Figura 97 ........................................................... 117 Figura 96 ........Métodos abstratos .................................................. 116 Figura 93 ............................................................. 119 Figura 98 .....................Uso das classes de stream para leitura ........................................................................................Diretiva @Override ............................................................................................................................................................................................................................................................................................................................................................................................Sobrescrita de método ................................................................. 120 Figura 100 ................................Não é possível instanciar uma classe abstrata..................... 117 Figura 95 .... 119 Figura 99 ........ 128 Pág..............................Classe abstrata ................................................................

. 114 Pág.......... 26 Quadro 5 ............Tipos de dados primitivos do Java ..................................................................................... 25 Quadro 4 ..... 46 Quadro 7 ........... 25 Quadro 3 ...: 5/137 ..Tipos de acesso aos atributos . Prof.................................................................................................................................................................................... 26 Quadro 6 ..............................................................................................................Operadores lógicos .................Operadores para tipos numéricos ...........................................................................................Comparação entre operadores ............ Daniel Oliveira Quadros Quadro 1 ........................................................................................................................................................................Operadores relacionais ....................................................................Símbolos para construção de fluxogramas .......................... 16 Quadro 2 ................................................................... 49 Quadro 9 ............. 48 Quadro 8 .........................................................................Tabela verdade ............................................Operadores aritméticos .............

........................................................................................................System..................................................... 78 Exemplo 39 – Exemplo do loop FOR descrente ...................................... 56 Exemplo 17 .... 84 Pág................................................... Daniel Oliveira Exemplos Exemplo 1 .....Estrutura do Loop While .... 67 Exemplo 29 ........................................................................Uso do comando printf ..Exemplo do IF com apenas uma linha............................................................Exemplo do loop do..........................................................................Uso do switch/case mais avançado ......................................................... 62 Exemplo 25 ................ 78 Exemplo 40 ..... 58 Exemplo 21 .................................................................................................Math Potência e raiz quadrada .............................................................................System.....................Exemplo de equalsIgnoreCase para comparação de string .................................................Math constantes ......................... 49 Exemplo 5 ..................................................Math Logaritimo ........Math: Números randômicos ............................................................................................System.........................Limites dos tipos numéricos.................. 47 Exemplo 2 .....................................While ...........................................................Exemplo de criação e inicialização de uma array..................... 50 Exemplo 8 .............................Cast ................................................... 68 Exemplo 30 ............................................................................................ 63 Exemplo 27 ...Math: Trigonometria ...............................................Exemplo de uso do switch / case ..................................... 69 Exemplo 31 ........................Exemplo de saída para console .......... 75 Exemplo 34 ................... 84 Exemplo 44 .......................................: 6/137 ............ 83 Exemplo 43 ................................................. 62 Exemplo 24 ............................................Valores absolutos e arredondamentos .................................................................................................Conversão de tipo para string .System................................................................ Prof.......Exemplo de métodos para conversão de string para tipos numéricos ...................... 76 Exemplo 37 ....................................... 52 Exemplo 11 ......... 76 Exemplo 36 ...................................................Exemplo do uso do comando break dentro de um loop ............................................Formas de inicializar uma array ...................................................... 56 Exemplo 18 .......................... 49 Exemplo 4 ......................................................................................................................................................... 51 Exemplo 10 ...................Uso do loop Do.........System...................................................Estrutura do Loop Do.................................................Estrutura IF clássica .... 74 Exemplo 33 .......................... 74 Exemplo 32 ...................................................... 54 Exemplo 14 ..............Exemplo de cast para operação de divisão ......................................................................................................... 77 Exemplo 38 ............. 50 Exemplo 6 .....................Mais um exemplo de uso do printf .................................................................................................................................... 57 Exemplo 20 .................................Uso de equals para comparação de strings ........................................................................................................................................................................ 78 Exemplo 41 ............................................Math Min e Max ..................................Exemplo do loop while ..................................................................................Exemplo de uso do Else .................... 59 Exemplo 22 ................................................................................................com ...................................... 61 Exemplo 23 .................................................................................... 64 Exemplo 28 ... 53 Exemplo 13 ....................................................................... 79 Exemplo 42 ................................................................................................................Exemplo e if/else aninhados ....while com loop while ....................Exemplo de saída para console .............................................................Exemplo um pouco mais completo com loop For fonte: http://www..........................Exemplo de acessar posições de uma arry por loop .........................................Exemplo do Loop Do..................Exemplo de uso de IF / Else encadeados ...................Declarando e inicializando uma variável. 51 Exemplo 9 ................................ 63 Exemplo 26 ....Exemplo de utilização de operadores com tipos numéricos ............................................................. 54 Exemplo 16 .....While ........................While.................................................Cast ....... 54 Exemplo 15 ........................................................................................................................................................................................................ 48 Exemplo 3 ................. 57 Exemplo 19 ........Exemplo de loop for com a variável de controle declarada fora do loop ...........java-samples... 53 Exemplo 12 ............................Exemplo do loop FOR ...................................... 75 Exemplo 35 .............. 50 Exemplo 7 ..Exemplo das rotinas da classe Scanner para obter dados numéricos ..............Uso de caracteres de escape para saída no console .................System...................................................

................................................: 7/137 ...............................Exemplo de uma rotina de ordenação de array...................................... Daniel Oliveira Exemplo 45 .. 84 Exemplo 46 .................Percorrendo uma array de char ...................................... Prof.... 85 Pág.......

......................................................................................................................................................................................................................................................................................................................................................................................................... 34 Obtendo o Eclipse e instalando .................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... 38 Variáveis .... 63 Aninhando a instrução if/else ................... 30 Atribuição ....................................................................... 29 Tipos de dados ....................................................................................................... 11 Algoritmos Computacionais ............................................................................................................. 2 Quadros .................................................................................................................................................................................... 23 Trabalhando com expressões ...................................................................................................................................... 61 A instrução IF........................................................ 49 Compatibilidade entre tipos ................................................................................................................................................................................................................................ 48 System............ 6 Introdução ....... 5 Exemplos ...................................................................................................................................... 44 Tipos numéricos .......................................................................................................................................................................................................................................................................................................................................... 56 Exercícios........ 60 Estrutura condicional ...................................... 25 Modularização de expressões e precedência de operadores ............... 30 Exercícios......... 67 Pág...................................... 37 Criando um projeto .................................................................Math .................................................. 28 Constantes ........................................................................................................................................................ 31 Java..................................................................................................... 62 A instrução Else .............................. 35 Perspectiva ....................................................................................................................................... 28 Estrutura de dados .................................................................................................................................... 36 Workspace ....................................................................................................................................................................................................................... 64 Usando operadores AND e OR ................................................................................................................................................................................................................ 61 Comparação de strings............................................................................. Daniel Oliveira Sumário Ilustrações ........................................................................................ 12 Fluxogramas .... 15 Exercícios.................................................................................................................................................................. 52 Interagindo com usuários .................................. Prof............................................................................................................................................................................................................................................................................................................................................................... 64 Declaração switch/case....................................................................................................................................... 29 Variáveis ........................................: 8/137 .................................... 32 Ambiente de desenvolvimento .............................................................................................................................................................................................................................................................

.......................................... 86 Arrays multidimensionais.. 122 Exercícios................................................................................................................................................................................................................................................................................................................................................................................................................. 91 Modularização................................................... 83 Exercícios.......................................................................................................................................Prof............................................................................................................................................................................................................................................................................................................................. 75 Loop For ........................................................................................................................................................................................................................................................................................................................................................................... 74 Loop Do................................................................................................: 9/137 ............................................................................................................................................................... 73 Loop While .......................................................................................................... 94 Definindo uma função ou método ........................................................... 100 Orientação a Objetos .............................................................................................................................. 119 Interfaces ............................................................................................................................................................................................................................ 113 Herança e polimorfismo............................................................................. 96 Funções retornando valores .........................................................................................................................While................ 114 Override ..... 95 Exemplo de uma função sem parâmetros ............................................. 99 Exercícios (Nível 2) ............................... 98 Exercícios (Nível 1) ..................................................... 118 Classes Abstratas e Interfaces ........................................................................................................................................... 109 Exercícios............... 88 Exercícios............................................................................................................................. 99 Exercícios (Nível 3) .............................................................................. 116 Polimorfismo .............................................................................................................................................................................. 80 Arrays ......................... Daniel Oliveira Exercícios.............................................................................................................................................................................................................................................................. 126 Trabalhando com arquivos ...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... 111 Encapsulamento............................. 101 Declarando uma classe ....................................................................................... 105 Exercícios........ 107 ArrayList .................................................................................................................. 96 Funções e parâmetros................................................................................................... 70 Estruturas de repetição.................................................. 106 Construtores ........................................................................................................................................... 77 Exercícios............................................................................................................................................ 120 Exceções e controle de erros ... 116 Exercícios..................................................................................................................................................................................................... 102 Métodos .................................................................................................................................................. 127 Pág...

.................................. 132 Anexos .................................................................................................................................................................................................................................................................................................................... 130 Exercícios de Revisão do Conteúdo de OO ........................ Daniel Oliveira Serializando objetos .................................................. Prof................................................................................. 134 Anexo B ..... 136 Referências................ 137 Pág.............................................................................................................................................................: 10/137 ...................... 134 Anexo A ................................................................................................................................................................

: 11/137 . em vários momentos no nosso dia a dia utilizamos algoritmos para realização de tarefas rotineiras. por exemplo: a troca de uma lâmpada.” (Cormen) Um algoritmo é uma sequência de passos logicamente organizados que realizam uma tarefa. um conjunto de passos computacionais que recebe uma entrada e gera uma saída.Definição de algoritmo No nosso dia a dia. Entrada Algoritmo Saída Figura 1 . constitui algoritmos. preparação de um café e etc. a troca de um pneu. Como por exemplo: a receita de um bolo. Daniel Oliveira Introdução “É qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores de entrada e produz algum valor ou conjunto de valores de saída. Na realidade. Sendo realizadas em um número finito de etapas. resultando em um conjunto de dados de saída. o uso de um determinado dispositivo ou aparelho. Basicamente todos os procedimentos que são constituídos por um conjunto de regras e operações muito bem definidas e ordenadas. De forma geral um algoritmo é um procedimento computacional que com um conjunto de dados de entrada realiza uma tarefa. a troca de um pneu furado. utilizamos o princípio de algoritmos com muita frequência. e.Prof. Algoritmo 1: Bolo de Cenoura Ingredientes: 2 cenouras grandes 1 xícara de óleo 2 xícaras de açúcar 4 ovos 2 xícaras de farinha de trigo 1 colher de sopa de fermento em pó 1 lata de leite condensado Pág. assim por diante. Ou seja.

que são representados por uma sequência de bits (zeros e uns). Todos os computadores e dispositivos computacionais tem uma estrutura bem parecida. Pág. Daniel Oliveira 4 colheres de chocolate em pó 2 colheres de sopa de margarina Modo de Preparo: 1. 5. 2. 3. o açúcar. Qualquer processador executa um conjunto específico de instruções denominado de linguagem de máquina.Prof. Despeje esse creme em uma vasilha e acrescente a farinha. 32 ou 64). Retire do forno e coloque a cobertura! Algoritmos Computacionais Um programa de computador nada mais é do que um algoritmo escrito em alguma linguagem de programação que passa por um processo de compilação ou interpretação que traduz os comandos da linguagem em instruções que o computador executa. execução de tarefas e processamento de dados. Coloque em uma forma untada por uns 30 a 35 minutos. Figura 2 .Arquitetura de Von Neumann A UCP ou unidade controladora é a parte mais importante do computador. 16. os ovos e o óleo até obter um creme. Todo processador tem um conjunto de instruções que ele pode realizar. Acrescente o fermento e misture.: 12/137 . Estas instruções são denominadas de código de máquina. Em. Bata no liquidificador as cenouras. Bata na batedeira por 4 minutos em velocidade alta. 4. Ela executa todos os cálculos. sua maioria são constituídos por:  UCP – Unidade Centro de Processamento  Memória  Dispositivo de entrada e saída Estes componentes citados são conectados pelo o que nós denominados de barramento. A quantidade desses bits é limitada ao tamanho do registrador principal do processador (8 bits. 6.

Daniel Oliveira Estas instruções são tarefas muito simples. maior será a quantidade desses endereços e consequentemente maior será o valor do endereço. copia o conteúdo dela para um de seus registradores internos. é “loteada” locais que são endereçados através de um número inteiro. Normalmente. Na Figura 4.Prof.Exemplo de instruções de máquinas Normalmente trabalha-se com uma linguagem denominada de Assembly ou linguagem de montagem. mas. É na memória que os dados que são armazenados. em um formato que seja humanamente legível (Figura 4) Figura 4 . A memória RAM (Random Access Memory – Memória de acesso aleatório). o tipo de processador influi em quanto de memória pode ser endereçado pelo mesmo. Figura 3 . assim sendo.Exemplo de um código em Assembly Outra parte importante dessa arquitetura é a memória. somar dois números e etc. Que é na realidade uma representação das instruções de máquinas. o processador acessa um posição de memória. este conjunto de instruções binárias (1s e 0s) é representado em um formato hexadecimal – ver Figura 3. temos na primeira coluna da esquerda o endereço de memória. transferir uma informação de uma posição da memória para o processador. A quantidade de memória endereçável por um processador pode ser calculada através da seguinte fórmula: 2(𝑄𝑢𝑎𝑛𝑡𝑖𝑑𝑎𝑑𝑒 𝑑𝑒 𝐵𝑖𝑡𝑠 𝑑𝑜 𝑃𝑟𝑜𝑐𝑒𝑠𝑠𝑎𝑑𝑜𝑟) Pág.: 13/137 . como por exemplo. Estes registradores irão conter o endereço de memória de uma determinada informação. realiza as ações e operações necessárias e retorna (se for o caso) a informação alterada para memória. Quanto mais memória a máquina possuir. Como vimos anteriormente os processadores tem o que chamamos de registradores.

hoje. chamado de compilação. é então. Este código então é otimizado e então transformado para em código de máquina dando origem ao programa executável ou biblioteca.294. Este código fonte passa por um processo de tradução para linguagem de máquina. temos a tendência de imaginar que os computadores se resumem a apenas aos dispositivos de entrada e saída. Assim. ainda faltam alguns ajustes. Por exemplo. O código fonte passa por um processo que analise se escrevemos as “palavras” da linguagem de forma correta e na ordem correta (vamos ver mais a frente que as palavras de uma linguagem de programação.: 14/137 . Evidentemente. pois. o código fonte ter sido validado. Após. Já um processador de 64bits consegue endereçar até 16 Terabytes. Mesmo que a máquina apresente mais memória RAM. é necessário a existência de compiladores específicos para cada tipo de arquitetura. com o uso de telas de touch isto mudou. Além da memória temos os dispositivos de entrada e saída de dados. Figura 5 .967. Na Figura 5. qualquer dispositivo que possa receber dados e exibir dados. Nos últimos anos estes dispositivos têm evoluído e novas formas desse tipo de dispositivo têm surgido. transformado no que se chama em código intermediário. Para nós. denominadas de alto nível. mas. Primeiro é criado o nosso código fonte (em uma linguagem de alto nível). seres humanos. Este código intermediário é quase a linguagem de máquina. Ou seja. que podem ser:  Monitor  Teclado  Mouse  Impressoras Ou. um programa de computador nada mais é do que a codificação de um algoritmo que contém instruções para que um computador realize alguma tarefa. As instruções escritas nessas linguagens são chamadas de código fonte. sendo.Processo de compilação Pág. Utilizamos para isto linguagens. á através dos mesmos que interagimos com os computadores. não escrevemos os programas em linguagem de máquina ou instruções de máquina. Daniel Oliveira Por exemplo um processador de 32 bits: 232 = 4. Um ponto que deve ser realçado é que o processo de compilação e criação de código sempre esta ligado a uma determinada arquitetura. vemos de forma geral o processo de compilação. o processador simplesmente não conseguirá endereçar todos os endereços disponíveis.296 bytes ou 4Gbs.Prof. são os seus comandos). até alguns anos atrás os monitores eram considerados dispositivos apenas de saída.

: 15/137 . para indicar as diversas ações (instruções) e decisões que devem ser seguidas para resolver o problema em questão. Operação. aonde é apresentado apenas os principais. Processamento Decisão Pág. Os Fluxogramas ou Diagramas de Fluxo são uma representação gráfica que utilizam formas geométricas padronizadas ligadas por setas de fluxo. temos um exemplo de fluxograma para o cálculo de uma raiz quadrada. existe outra forma de representação dos algoritmos (uma forma mais visual e mais simples de entendimento para iniciantes ou leigos). que são os fluxogramas. Figura 6 . Na Figura 6.Exemplo de um fluxograma Símbolo Descrição Símbolo Descrição Início/Fim Direção do Fluxo Entrada de Dados Repetição Atribuição. Como se pode notar utilizam-se figuras para indicar os passos do algoritmo a ser executado no fluxo. Daniel Oliveira Fluxogramas Além das linguagens de programação (nosso principal foco).Prof. Os símbolos utilizados na construção de um fluxograma podem ser visto no Quadro 1.

como ficaria um fluxograma para cálculo da área de um retângulo? Largura e Inicio Largura * Altura Fim Altura Àrea Figura 7 .Prof. por exemplo: Pág.Símbolos para construção de fluxogramas Esta forma de representação dos algoritmos é de grande utilidade para exemplificar e demonstrar os passos necessários para a construção dos nossos algoritmos. Por exemplo. Daniel Oliveira Imprimir / Saída Quadro 1 . Dentro da representação dos fluxogramas utilizamos uma seta () para indicar o armazenamento da informação na variável.Fluxograma para cálculo da área de um retângulo Outro exemplo seria como determinar se uma pessoa é maior ou não de idade? Inicio Idade Idade >= 18 Não SIM Maior de idade Menor de Idade Fim Figura 8 . Para isto utilizamos o que nós chamamos de variáveis (vamos abordar este conceito mais a frente).: 16/137 .Exemplo de um fluxograma para determinação da maior idade Em muitas situações queremos guardar o resultado de alguma operação para ser utilizado ou testado mais a frente no fluxograma.

que possível. e. Inicia-se com uma ideia geral.Atribuição de variáveis em Fluxogramas De forma geral.Prof. de cima para baixo e da esquerda para a direita 3) É incorreto e proibido ocorrência de cruzamento das linhas de fluxo Por exemplo. os fluxogramas são excelentes ferramentas para avaliação do fluxo de informação de um sistema. então aumenta-se o detalhamento 2) Os fluxogramas devem ser desenvolvidos sempre. Daniel Oliveira Inicio N1  Nota N1 N2  Nota N2 M (N1+N2)/2 M >= 5 Sim Reprovado Aprovado Fim Figura 9 . devemos levar como procedimentos: 1) Os diagramas devem feitos e quebrados em níveis.: 17/137 . um fluxograma de cálculo de média final: Pág. Para se desenvolver um diagrama correto.

Prof. se faz necessário. Vamos agora. Não é possível entender pontos como: quantas notas irão compor a média. aumentar o nosso detalhamento. qual a fórmula de cálculo da média e como se determinar a aprovação? Então. detalhar o processo de obtenção das notas: Inicio Obter N1 Obter N2 Calcular média e determinar aprovação Fim Pág.Exemplo de fluxograma de cálculo de média nível Alto O fluxograma da imagem anterior está em nível muito elevado. Daniel Oliveira Figura 10 .: 18/137 .

Daniel Oliveira Ainda temos que detalhar como a média é calculada: Inicio Obter N1 Obter N2 M  (N1 + N2) /2 Determinar aprovação Fim Agora precisamos detalhar como é feita a determinação da aprovação: Inicio Obter N1 Obter N2 M  (N1 + N2) /2 SIM M >= 5 Não Aprovado Reprovado Fim Figura 11 .Exemplo de cálculo de média detalhado Pág.: 19/137 .Prof.

sendo que cada elemento tem apenas um único predecessor e um único sucessor é conhecido como digrama linear .Figura 12. mostrando assim a hierarquia em que as ações deverão ser realizadas. Nesse tipo de lógico temos elementos que simbolizam a sequência de ações.Exemplo de um diagrama linear Já digramas construídos para boa parte dos sistemas de processamento de dados. Figura 12 . condições de execução e repetição ou laço. Daniel Oliveira Um diagrama de fluxo aonde os elementos são executados de cima para baixo (top-down). vemos o exemplo de representação gráfica de uma sequência.Prof. Figura 13 .: 20/137 .Exemplo de sequência Já na Figura 14. Na Figura 13. Pág. vemos a representação de estrutura condicionais. temos o que chamamos de lógica estruturada. Nela temos a ordem em que processos devem ser executados. Aonde dependendo dos testes lógicos realizados (verdadeiro ou falso) o fluxo de execução do fluxograma é desviado.

Daniel Oliveira Figura 14 . temos as chamadas estruturas condicionais.Exemplo de Estrutura de repetição Em situações aonde temos vários testes condicionais aninhados (como por exemplo a seleção de uma opção em um menu). Figura 15 . ver abaixo.: 21/137 . podemos utilizar uma estrutura denominada de case (ver abaixo) Pág.Prof. Nelas um conjunto de ações são repetidas até que alguma condição impeça ou pare a repetição.Exemplo de Estrutura condicional Além das estruturas condicionais.

independentemente de sua utilização como unidade em processo maior. possível. Se.: 22/137 . Pág.Prof. a modularização deve ser desenvolvida em diferentes níveis. A técnica deve ser utilizada é a chamada: Modularização.Exemplo de Case Evidentemente não podemos descrever todo um sistema em seus detalhes. Daniel Oliveira Figura 16 . Para isto precisamos realizar as seguintes etapas: 1) Decompor um diagrama em partes independentes 2) Dividir um problema complexo em problemas menores e mais simples 3) Verificar a correção de um módulo de blocos. ou até mesmo uma rotina. em apenas um único diagrama. Partimos de um visão geral do problema identificando os sistemas que irão compor a solução. para cada sistema quais os programas que o irão compor e para cada programa quais serão seus módulos.

: 23/137 . 7) Elabore um algoritmo que leia as variáveis C e N respectivamente código e número de horas trabalhadas de um operário. Quando o número de horas excederem a 50 calcule o excesso e pagamento armazenando-o na variável E. 3) Monte um fluxograma e um pseudocódigo capaz de resolver o cálculo da área de um trapézio qualquer. dados como entrada. Desenvolva o algoritmo que a partir a entrada da cor o software mostre o preço. a média final é dada pela média aritmética de três notas. 6) Desenvolva um algoritmo capaz de verificar se uns números inteiros. Área do trapézio = (Base Maior + Base Menor) x Atura / 2 4) Em uma loja e CD´s existem apenas quatro tipos de preços que estão associados a cores.00 5) Desenvolva um algoritmo capaz e encontrar o menor dentre 3 números inteiros quaisquer dados pelo teclado. Calcula o valor de x. No caso da recuperação a nota necessária para passar é dada por 10 – Média + 2 e na prova final é dado por 10 – Média.Prof. x e. Escrever “ O valor de x é ”. sendo que ax+b=0 d.00 Vermelho 40. é par ou ímpar.00 Azul 15. b c. Assim os CD´s que ficam na loja não são marcados por preços e sim por cores. E calcule o salário sabendo-se que ele ganha R$ 10. Senão escrever “Não há zero” f. A loja está atualmente com a seguinte tabela de preços Cor Preço Verde 10. E a mesma tem o seguinte esquema de avaliação: Desenvolva um algoritmo que a partir da entrada das três notas mostre a situação do aluno. mostre também quanto o aluno irá precisar para passar. Fim de programa 2) Em uma escola. caso contrário zerar Pág.00 Amarelo 30. Se a é diferente de 0 então i. Daniel Oliveira Exercícios 1) Dados os passos de cálculo abaixo montar um fluxograma para o mesmo a. No caso do aluno em recuperação e prova final. Ler a. Início de programa b.00 por hora.

00.4 as indústrias do 1º e 2º grupo são intimadas a suspenderem suas atividades. Daniel Oliveira tal variável.05 até 0.: 24/137 .25. O índice de poluição aceitável varia de 0.Prof.5 todos os grupos devem ser notificados a paralisarem suas atividades. Faça um algoritmo que leia o índice de poluição medido e emita a notificação adequada aos diferentes grupos de empresas. A hora excedente de trabalho vale R$ 20. Pág. No final do processamento imprimir o salário total e o salário excedente. se o índice atingir 0. se o índice crescer para 0. 8) A secretária de Meio Ambiente que controla o índice de poluição mantém 3 grupos que são altamente poluentes do meio ambiente. Se o índice sobe para 0.3 as indústrias do 1º grupo são intimadas a suspenderem suas atividades.

Exemplo: 2   3  5  3  1  (2/3+(5-3))+1= Tradicional Computacional Cada linguagem de programação tem um conjunto de operadores para a construção de expressões aritméticas ou relacionais. Daniel Oliveira Trabalhando com expressões Para a construção de Algoritmos todas as expressões aritméticas devem ser linearizadas. Por exemplo. aonde são realizadas comparações. Eles são relacionados no Quadro 4. colocadas em linhas. a expressão 1+1 é uma expressão aritmética que resultará em um valor. As expressões relacionais são aquelas que o resultado é um valor lógico (verdadeiro ou falso – true ou false). Vale a ressalva que não serão os mesmos para todas as linguagens.Prof. ou seja. que atuam apenas sobre os valores lógicos. Conjunção E (and) RETORNA VERDADEIRO SE AMBAS AS PARTES FOREM VERDADEIRAS.Operadores relacionais Nos quadros acima temos as representação dos operadores aritméticos e relacionais utilizados nas principais linguagens de programação. Pág.expoente) Módulo (resto da divisão) % Quadro 2 . Além desses operadores ainda existem os operadores lógicos. É importante também ressalvar o uso dos operadores correspondentes da aritmética tradicional para a computacional.Operadores aritméticos OPERADORES RELACIONAIS OPERADORES Maior > Menor < Maior ou igual >= Menor ou igual <= Igual = Diferente <> Quadro 3 . Já a expressão 1 > 2 (o valor 1 é maior do que 2?) é uma expressão relacional. existem variações.: 25/137 . OPERADORES ARITMÉTICOS OPERADORES Adição + Subtração - Multiplicação * Divisão / Divisão Inteira \ Potência ^ ou Exp (base.

Tabela verdade Alguns exemplos de expressões lógicas: Pág.Prof. Disjunção Exclusiva XOU RETORNAR FALSO SE AMBOS OS LADOS FOREM IGUAIS E VERDADEIRO CASO (XOR) CONTRÁRIO NÃO (not) INVERTE O ESTADO.Operadores lógicos No quadro abaixo temos alguns exemplo do uso desses conectivos Os operadores lógicos atuam sobre os valores lógicos da seguinte forma (Quadro 5): A B A E B A OU B NÃO (A) A XOR V V V V V F F V F F V F V F V F V V V F F F F V F Quadro 5 . DE VERDADEIRO PASSA PARA FALSO E VICE-VERSA. Quadro 4 . Daniel Oliveira Disjunção OU (or) BASTA QUE UMA PARTE SEJA VERDADEIRA PARA RETORNAR VERDADEIRO.: 26/137 .

Prof.: 27/137 . Daniel Oliveira Vamos ver alguns exemplos de uso utilizando pseudocódigo: Se (salario > 180) e (salário < 800) Então Escrever 'Salário válido para financiamento' Senão Escrever 'Salário fora da faixa permitida para financiamento' FimSe Se (idade < 18) ou (idade > 95) Então Escrever 'Você não pode fazer carteira de motorista' Senão Escrever 'Você pode possuir carteira de motorista' FimSe Se (idade > = 18) e (idade < = 95) e (aprovado_exame = 'sim') Então Escrever 'Sua carteira de motorista estará pronta em uma semana' Senão Escrever 'Você não possui idade permitida ounão passou nos testes' FimSe Pág.

proporcionando maior compreensão e definindo prioridades para resolução da mesma. Daniel Oliveira Mas algum exemplos de operações lógicas: Para A = Verdadeiro.  Operadores Lógicos na seguinte ordem: NAO. As estruturas de dados e algoritmos são muito ligados.Prof. assim como a escolha dos algoritmos em geral depende da representação e da estrutura dos dados (ZIVIANI.  Operadores Relacionais: = . E. Assim: ((2 + 2)*4 +8)/ 2 = 12 é diferente de 2 + 2*4 +8/ 2 = 14 Além do fato do uso dos parênteses deve ser levada em conta a precedência dos operadores na resolução das expressões aritméticas.  Soma e Subtração: +. Não se pode estudar estruturas de dados sem considerar os algoritmos associados a elas.: 28/137 . as expressões abaixo fornecem os seguintes resultados: Modularização de expressões e precedência de operadores A modularização é a divisão da expressão em partes. /.< . OU.  Multiplicação e Divisão: *. Pág. Em expressões computacionais usamos somente parênteses “( )” para modularização. Estrutura de dados “Uma estrutura de dados é um meio para organizar e armazenar dados com objetivo de facilitar o acesso e as modificações” (Cormen. B = Falso e C = Falso.<=.>= .> . -.1999). A lista abaixo relaciona os operadores de maior precedência para os de menor precedência:  Parênteses e Funções  Operadores Aritméticos na seguinte ordem:  Potenciação: ^.2002).<> .

são os números. No lado de fora dessa caixa temos uma etiqueta com um identificador e o conteúdo da caixa é o valor dessa variável (que poder ser alterado diversas vezes). Podemos caracterizar uma variável como sendo uma caixa com conteúdo. Como o próprio nome mostra. Variáveis O conceito de variável é muito importante para a elaboração de algoritmos e os programas. ou seja. as linguagens de programação simplificam esse processo associando aos endereços de memória nomes ou identificadores fornecidos pelos programadores. variável no tempo. Pág. São valores fixos (não variáveis).Exemplo de estrutura de dados Constantes As constantes são valores (ou informações. dados) que não variam com o tempo. Daniel Oliveira De uma maneira bem informal podemos definir um programa de computador ou um software como sendo a união entre um algoritmo e uma estrutura de dados. Internamente os computadores acessam a memória através de endereços numéricos. letras. Uma variável é um espaço de memória do computador que é reservado para armazenar as informações ou dados utilizado pelo programa de computador.Prof. Como exemplo. Toda variável tem um nome ou identificador. Na solução de problemas através de algoritmos devemos também determinar qual a estrutura de dados será utilizada. palavra e etc.: 29/137 . para facilitar (para nós humanos) a referência à mesma. Figura 17 . as variáveis tem seu valor não constante.

como iremos ver mais a frente existem outros símbolos para indicar a atribuição.1999). um valor de tipo lógico (verdadeiro ou falso). Estes tipos são os vetores. Números. Tipos de dados Em linguagens de programação os dados têm certas características e uma das mais importantes é o seu tipo. ou seja. ou um agregado de valores de tipos diferentes (ZIVIANI. Quando realizamos uma ação de atribuição estamos “colocando” a informação no endereço de memória referenciado. Na ação de atribuição é importante saber se a informação que queremos armazenar na variável é compatível com a mesma. Ainda.: 30/137 . é só variável que "recebe" algum conteúdo. Como foi visto no conteúdo de fluxogramas utilizamos uma seta () para indicar esta ação. uma letra (caractere). Por exemplo. matrizes e outros.Prof. ou uma constante. quais operações poderão ser realizadas. é possível o chamamos de casting. O tipo do dado define a forma a armazenamento e representação da informação. o valor é indivisível. Atribuição Atribuição é a ação de armazenar ou passar valor para um variável.Definição de variável (Tonet. Mas. Os tipos de dados determina o conjunto de valores possíveis que uma variável ou expressão pode assumir. ou. também. Por exemplo: Ex. textos. Daniel Oliveira Figura 18 .: nota1 + nota2  valor – Esta instrução está incorreta e não poderá ser realizada Pág. um número inteiro é um tipo simples. Nesse momento o tipo de dado é analisado e caso não seja possível a ação não poderá ser realizada. Os tipos estruturados em geral definem uma coleção de valores simples. são tipos simples. Os tipos de dados podem ser simples. mudança do tipo de dado da informação para um tipo de dado compatível. datas e outros tem uma forma peculiar de ser armazenado e representado pelos computadores. ou seja. não é possível ter um cálculo por exemplo. Uma observação importante a ser feita em relação a atribuições é que na parte esquerda (a que vai "receber" algo) não pode haver nada além da variável. E.2004) Cada linguagem de programação tem suas próprias regras para a criação de identificadores. recebendo alguma coisa.

Escreva as expressões na forma de computacional b(3 x ) a. (6<8) ou (3>7) = c.Resolva as expressões lógicas a.9))/u-89^(1/2)= b.  3  2a 1  6 x  (2 y ) 3 e. ae  2  c 2 x 2  (3 x) ( x 1) x 1 b.Escreva as expressões em formato tradicional a.(8^(2/3))^(1/2) h. Daniel Oliveira Exercícios 1. 2h    4h(3  h)    3x  2b  4a 2  2 f 3 d.Prof. (5>=6) ou (6<7) ou não (a+5-6=8) {sabendo-se que A=5} e. não (2^3 < √16 ou 15\2 < 10) b.: 31/137 .  a  bc 2. Não (2<3) = d.  39 2 2x  u 3 f. 10%4 < 16%3 g. 23+5/((7*a)/47)^(2/x)= c. a+b+(34+exp(e. (12*x)/(36-9^x)^2= 3. 15\7 >= 27 % 5 Pág. (34>9 e 5+u = 34) ou (5=15/3 e 8>12) {sabendo-se que u=29} f. 2+8%7 >= 6.   2 x2 22 k  45  c.

consoles de gerenciamento de TVs (receptores de TV digital) e impressoras. ambiente para construção de soluções para dispositivos móveis e embarcados em equipamentos como: celulares. de forma diferente é uma linguagem altamente portável entre plataformas. otimizada para ser executada em TVs e consoles de gerenciamento de TVs. que é a tradução do bytecode para a linguagem de máquina do ambiente hospedeiro.2011):  Java SE – Java Standard Edition. sem a necessidade de rescrita ou recompilação. para cada sistema operacional existe uma máquina virtual própria que realizar a segunda etapa do processo de execução do código. Colocando assim. tablets. Desde soluções empresariais até tablets e celulares. conjunto de soluções para desenvolvimento corporativo.  JavaFX – nova tecnologia para desenvolvimento de aplicações RIA  Java Card – Tecnologia java utilização de aplicações que irão ser executadas em smartcards e outros equipamentos com capacidade de memoria e processamento reduzidos. Daniel Oliveira Java É uma linguagem de programação desenvolvida pela Sun Microsystem. Mas.class  Interpreta e executa programas Java O processo de “criação” de códigos executáveis em java passa por duas etapas: uma primeira etapa aonde o código escrito Java é traduzido (compilado) para uma linguagem intermediária (bytecode). A máquina virtual Java é responsável pela execução dessa linguagem intermediária. versão para a disponibilização de soluções para desktops e servidores. Java hoje em dia está presente em vários dispositivos e soluções. o grande objetivo do desenvolvimento do Java foi à portabilidade. a internet em outro patamar com informações dinâmicas e páginas com recursos que ainda não se havia visto até então. mas. Ou seja.  Java ME – Java for Micro Edition. Abaixo segue uma lista das principais tecnologias Java (Oracle. que posteriormente foi comprada pela Oracle.  Java EE . A partir de 1991 que o Java passou a ser “visto” pelo público em geral quando a Netscape anunciou que seu navegador iria suportar o Java para a execução de códigos (applets). Ver Figura 19.Java Enterprise Edition.  Java TV – Plataforma Java ME.: 32/137 . Pág. Mas como isto é possível? Isto é possível devido à existência da JVM (Java Virtual Machine):  Máquina imaginária  Emulada por software em máquina real  Código armazenado em arquivos *.Prof. o mesmo código sendo executado em diferentes sistemas operacionais. PDAs. A sintaxe do Java é baseada no C/C++.

class JVM Execução do Interpreta o código Byte Code Figura 19 . Quando por exemplo.Prof.: 33/137 . A JVM traduz que este comando para uma ou mais instruções para o sistema operacional hospedeiro (lembre-se vai existir uma JVM para cada sistema operacional que irá executar as aplicações Java). A linguagem Java é 100% orientada a objetos. nesse texto não iremos levar isto em consideração e iremos nos ater apenas a uma programação estruturada (não orientada a objetos).Arquitetura para execução do código Java O uso de uma máquina virtual foi sem dúvida nenhuma um grande avanço para a criação de soluções portáveis e multi-plataforma. e daí para frente é com SO. temos uma visão conceitual do nível de abstração do código em Java em relação ao hardware aonde esse mesmo código será executado.java xxx. queremos exibir uma mensagem de texto no console. Daniel Oliveira Compilador JDK Código Fonte: Java Byte Code xxx. JVM Sistema Operacional BIOS Hardware Figura 20 . Pág. mas. simplesmente iremos chamar o comando apropriado no Java.Processo de compilação de código fontes em Java Na Figura 20.

facilitando a integração de novas linguagens e funcionalidades ao IDE. linkeditor. Evidentemente. Ambiente de desenvolvimento Um componente muito importante para o desenvolvimento de programas de computador é o ambiente de desenvolvimento. mas. Uma das linguagens que se pode desenvolver é o Java através do JDT (Java Development Tooling). teste e distribuição dos aplicativos. Com o passar do tempo foram sendo criados ambientes integrados.: 34/137 . acompanha várias ferramentas e documentação necessária para isto.Opções para obtenção do JDK Bem. pois. O primeiro JDK é voltado para instalação de máquinas aonde iremos desenvolver soluções Java. Há 20 anos eram necessários vários outros programas para realizar a compilação do arquivo executável: compilador. esta é uma explicação bem simplificada. montador e etc.eclipse.html ) Ambiente de desenvolvimento:  jdk: Java Development Kit (Figura 21) Ambiente de produção:  jre: Java Runtime Environment Figura 21 . O Eclipse trabalhar com plug-ins. Já o JRE é indicado para ser instalado em ambientes aonde iremos apenas executar as soluções construídas. Daniel Oliveira A JVM é obtida ao se “instalar” o Java do site da Oracle (http://www.org/). os puristas que me perdoem.com/technetwork/java/javase/downloads/index. aonde através de uma interface amigável é possível a compilação. Vamos utilizar uma IDE de livre distribuição que o Eclipse (http://www.Prof. O eclipse é uma framework para integrar diferentes tipos de aplicações. Pág.oracle. inicialmente é o suficiente. Estes ambientes ficaram conhecidos com IDE (Integrated Development Environment). existem dois tipos de distribuição do Java: JDK e o JRE.

Você deverá ver a tela da Figura 23 para configuração do chamado Workspace. Pág. Daniel Oliveira Um usuário sempre trabalha no workbench. Figura 22 .Prof.: 35/137 .Tela de configuração de Workspace Como o próprio nome já diz. mas. Note uma vez instalado podemos incluir novos recursos e até mesmo linguagens suportadas a IDE através do recurso de instalação de extensões na mesma. A perspectiva é uma coleção conhecida como "views e editores" que contribuem com ações especiais para o menu e a toolbar. você deverá uma tela como esta na Erro! Fonte de referência não encontrada. Obtendo o Eclipse e instalando Na Figura 22. a parte "visível" da plataforma(GUI). nessa tela (Figura 23) irá indicar para o Eclipse o local de trabalho. A perspectiva escolhida determina a aparência atual do workbench. aonde a IDE irá manter nossos códigos fontes. Uma vez criado o Workspace. você deverá descompactar o arquivo no local aonde quiser e deverá localizar o arquivo eclipse. vemos a opção para baixar a versão desejada do Eclipse. parâmetros de configuração e outras informações de trabalho. apenas um fica ativo por vez.Opções de download do Eclipse Realizado o download. Figura 23 .. Que deverá ser uma pasta.exe (para ambiente Windows) e executá-lo. Podem-se ter vários Workspaces.

Figura 25 . Prof.Tela inicial do Eclipse Na Figura 25Erro! Fonte de referência não encontrada.: 36/137 . Pág. Daniel Oliveira Figura 24 . pode-se definir a configuração das janelas e views de acordo com o tipo de projeto ou com as configurações que melhor se adequem ao seu gosto. ou seja. temos o ambiente o Eclipse pronto para ser utilizado para o desenvolvimento.Ambiente do Eclipse para iniciar os trabalhos Perspectiva O Eclipse tem o conceito de perspectivas.

vemos o caminho no menu do Eclipse que possibilita a troca de workspace. informações de configuração e outros.Prof. o que fará com que o Eclipse se re-inicie. que o Eclipse irá utilizar para cada usuário.Outros tipos de perspectivas Workspace O workspace ou espaço de trabalho é o local aonde serão armazenados os arquivos fontes. será pedido que você informe qual o local do Workspace a ser utilizado (só é permitido utilizar um workspace por vez).Janela de perspectiva 2. Escolha 'Window -> Open Perspective' no menu principal: Figura 26 . Na Figura 28.: 37/137 . Daniel Oliveira Para abrir uma nova perspectiva no seu worbench faça: 1. Na primeira vez que se executa o Eclipse. Escolha 'Other' para ver todas as perspectivas instaladas: Figura 27 . Pág. arquivos compilados.

: 38/137 .Criação de um projeto Java Pág. Daniel Oliveira Figura 28 . Em algumas configurações do Eclipse a opção Java Project pode não estar disponível. então selecione a opção Other e na janela que irá aparecer digite com campo de texto: Java Project – selecione a opção conforme a Figura 30. Figura 29 .Opção de troca de Workspace Criando um projeto Na Figura 29. temos o caminho para criação de um projeto Java no Eclipse.Prof.

Daniel Oliveira Figura 30 .Parâmetros inicias do projeto Java Pág. deverá ser exibida para informações dos parâmetros iniciais do projeto Java. iremos utilizar a JRE padrão instalado nas máquinas de trabalho.: 39/137 . Na janela de novo projeto Java devemos informar o nome do projeto no campo de texto Project Name – Este nome irá ser exibido na árvore de projetos (ver Figura 32).6. No caso do exemplo (Figura 31). Informado este dados deve-se selecionar o botão Next. selecione o botão Next). Na mesma tela podemos informar para qual versão da JRE iremos trabalhar. exercícios e etc. estamos com versão 1.Prof. a janela da Erro! Fonte de referência não encontrada.Selecionando o tipo de projeto no Eclipse Uma vez selecionado o tipo de projeto Java (se você estiver na janela como da Figura 30. Nos exemplos. Abaixo do nome do projeto pode-se ver a local físico do projeto do disco. Figura 31 .

Pág. Daniel Oliveira Figura 32 . Na aba Source vemos como será a estrutura do projeto (esta mesma estrutura estará replicada fisicamente em disco no Workspace). Figura 33 .Tela de configuração final do projeto Java Depois que o projeto é criado podemos ver a sua estrutura do Package Explorer(Figura 34). temos a tela final de configuração do nosso projeto Java.: 40/137 .Prof. Nas demais abas têm opções mais avançadas que vão além do exigido nesse texto e vamos deixar para um segundo momento. Selecionando o botão Finish para finalizar a criação do projeto.Nome do projeto Java Na Figura 33.

Prof.Usando o menu Show View Para finalizar a criação do primeiro projeto java. Figura 35 .java (todo e qualquer programa em Java tem que ter pelo menos uma classe).Package Explorer Caso o Package Explorer não esteja sendo exibido vá até: Window -> Show View. e selecione o Package Explorer(Figura 35). devemos criar um arquivo . No package Explorer.Figura 36: Pág. Nessa opção de menu podemos exibir todas as principais janelas do Eclipse. selecione o nó src e com o botão direito do mouse selecione . Não vamos agora entrar em por menores sobre a estrutura da classe criada. Daniel Oliveira Figura 34 . vamos abordar isto mais a frente.: 41/137 .

Prof. Daniel Oliveira

Figura 36 - Criando uma nova classe

Após a seleção da opção de uma nova classe será exibida a janela da Figura 37, aonde deve-se levar em conta
(nesse primeiro momento) apenas as informações marcadas de vermelho. Informa-se o nome da classe e
selecione a caixa de criação do método Main. Selecione o botão Finish para finalizar o assistente de criação de
classes.

Figura 37 - Parâmetros básicos para criação de classes

Após a finalização do assistente de criação de classes, a janela do editor irá ser exibida com o código inicial da
classe. Mais a frente vamos olhar com mais detalhe este código(Figura 38).

Pág.: 42/137

Prof. Daniel Oliveira

Figura 38 - Código inicial gerado pelo assistente de criação de classes

Para executar o seu projeto tecle CTRL+F11, o Eclipse irá exibir o processo de compilação e nada será exibido na
tela de console, pois, ainda não colocamos nenhum código que realize alguma tarefa interessante.

Na janela do editor altere o código colocando a linha de código em destaque na Figura 39. Note que o código
deve ser escrito exatamente como está no exemplo. A linguagem Java é case sensitive ou seja faz distinção
entre maiúsculas e minúsculas.

Figura 39 - Exemplo de código do primeiro projeto Java

Selecione as teclas CTRL+F11 e veja o resultado na janela de console do Eclipse como na Figura 40.

Figura 40 - Janela de console com o resultado a execução do código

Pág.: 43/137

Prof. Daniel Oliveira

Variáveis

Anteriormente falamos sobre tipos de dados e a definição do que são variáveis. Bem, vamos agora ver estas
definições dentro de um programa em Java.

Antes de tudo, precisamos entender a estrutura básica de um programa Java.

Figura 41 - Exemplo de código em Java

No inicio do nosso código de exemplo temos a declaração import, este comando é responsável por indicar ao
compilador Java aonde ele deverá “procurar” pelos comandos utilizados no código (uma definição bem inicial).
A classe Scanner (responsável pela captura das informações digitadas no teclado) é definida dentro do pacote
util que está dentro do pacote java – veja a definição e uso de pacotes no Anexo A . Se, não informamos o
import correto o compilador irá apresentar um erro, pois, não será possível localizar a definição da classe
Scanner.

Em java temos duas formas básicas para criar comentários:

1) Comentários de apenas uma linha utiliza: // . Por exemplo, Figura 42:

Figura 42 - Exemplo de comentários de uma linha

2) Comentários de várias linhas ou bloco utiliza o conjunto: /* */ - Figura 43

Figura 43 - Comentário de bloco

Pág.: 44/137

é o ponto de partida para execução do nosso código pela máquina virtual Java. próprio assistente de criação de classes do Eclipse cria esta estrutura (ver Figura 37).” como terminador de instrução.Método MAIN começarem a codifica fora do método main. na linha acima temos a definição do chamamos de método (mais uma vez este conteúdo está fora do escopo desse texto). para não ficarmos totalmente sem uma explicação podemos resumir este trecho como:  public – esta palavra chave indica que a classe a ser definida poderá ser acessada por qualquer outro código que necessite chama-la ou seja e de acesso público  class – como esperado esta palavra chave define que vamos criar uma classe e após esta palavra chave temos o nome da classe propriamente dito.” finaliza uma idéia. Figura 46 . definem ações que as classes podem realizar – comportamento dos objetos.Uso de chaves para delimitar blocos de código Outra questão importante na codificação do Java (herança do C/C++) é uso do caractere “. Em Java o “. Após a criação da classe temos o caractere “{“. Este é o método principal (main do inglês). Todos nossos programas aqui terá que ter este método. É uma fonte de erro muito comum para os alunos Figura 44 . em poucas palavras.: 45/137 . no Java todo bloco de código deve ser envolvido entre um conjunto de “{“ e “}”. Um método.Uso do ponto e vírgula para finalizar uma linha de código Pág. prestem muita atenção no local em que o seu código será introduzido. mas. Figura 45 . Não é objetivo do texto abordar orientação a objetos. para cada “{“ temos que ter um correspondente “}”. Daniel Oliveira Avançando pelo código vemos a declaração de uma classe: public class CMain. temos a seguinte declaração: public static void main(String[] args) O que vem a ser isto? Bem. Como iremos trabalhar com uma abordagem não orientada a objetos (um sacrilégio!) todo nosso código vai estar sempre localizado dentro do método MAIN (ver Figura 44). Isto irá poupar muita dor de cabeça. Dentro da classe criada no exemplo tem mais coisas “estranhas”. Ou seja.Prof.

byte Inteiro de 8 bits. palavras e etc.483. As variáveis são usadas para armazenar informações durante o processamento de programas. Serve para a armazenagem de dados alfanuméricos – armazenamento de um único caractere. Quadro 6 . Tipo Descrição boolean Pode assumir o valor true ou o valor false char Caractere em notação Unicode de 16 bits. float Representa números em notação de ponto flutuante normalizada em precisão simples de 32 bits em conformidade com a norma IEEE 754-1985. O menor valor positivo representável por esse tipo é 1. short Inteiro de 16 bits. Daniel Oliveira Se olharmos a Figura 45 e compararmos com a Figura 46 podemos ficar em dúvida: Por que a instrução if não tem “.483. Os valores possíveis cobrem a faixa de -2-15=-32.Prof. O menor valor positivo representável é 4.147.Tipos de dados primitivos do Java No exemplo abaixo temos um código que irá exibir os valores limites dos tipos de dados numéricos em Java.Exemplo endentação de código Depois de tudo isto dito. Uma boa prática (isto não é uma regra) é a endentação do código através do uso de espaços e tabulações. Pode assumir valores entre -2.Figura 47. Pode assumir valores entre -128 a 127.: 46/137 . Isto facilita a leitura e entendimento do código . O Java usa nove tipos diferentes de tipos de dados - Quadro 6.40282347E+38 double Representa números em notação de ponto flutuante normalizada em precisão dupla de 64 bits em conformidade com a norma IEEE 754-1985.94065645841246544e-324 e o maior é 1. podemos retomar ao assunto de variáveis.647. long Inteiro de 64 bits em notação de complemento de dois.767 int Inteiro de 32 bits. frases. como no quadro acima: Pág.” – outras instruções de bloco (como os repetidores) tem o mesmo comportamento.” no final? A instrução if (com veremos mais frente) irá delimitar um bloco de código e por isso não utiliza o terminador “.147.7976931348623157e+308 String O tipo string não é um tipo primitivo mais se comporta como.648 a 2. Pode assumir valores entre -263 e 263-1. Este tipo é utilizado para armazenar cadeias de caracteres como nomes.40239846E-46 e o maior é 3. Figura 47 . Também pode ser usado como um dado inteiro com valores na faixa entre 0 e 65535.768 a 215-1=32.

MIN_VALUE + "\nMaior Double: " + Double.Limites dos tipos numéricos Figura 48 .MIN_VALUE + "\nMaior Long:" + Long.Prof.Atribuição de valores.MAX_VALUE + "\nMenor Short Int: " + Short.MAX_VALUE). por exemplo: Ex. int i.out.: 47/137 .MIN_VALUE + "\nMaior Float: " + Float. } } Exemplo 1 .MAX_VALUE + "\nMenor Long: " + Long.Resultado da execução do exemplo de limites de valores para tipos numéricos A declaração de uma variável em Java. como no exemplo da Figura 49 .MAX_VALUE + "\nMenor Float: " + Float. Para atribuirmos um valor a uma variável usamos o operador “=” (ou igual simples).MAX_VALUE + "\nMenor Double: " + Double.MIN_VALUE + "\nMaior Int: " + Integer. => Declara uma variável do tipo inteira cujo o nome é i. Pág. sempre é feita através da seguinte estrutura: <TIPO> <NOME (IDENTIFICADOR>. Daniel Oliveira public class CMain { public static void main(String[] args) { System.MAX_VALUE + "\nMenor Int: " + Integer.println("Tipos de dados em Java: \n" + "\nMenor Byte: " + Byte.MIN_VALUE + "\nMaior Byte: " + Byte.MIN_VALUE + "\nMaior Short Int: " + Short.

-. divisão e módulo. Daniel Oliveira Figura 49 . multiplicação. % Adição. <=. | Operadores lógicos E. /. +=.Operadores para tipos numéricos Pág. /=. um lixo qualquer) . >. subtração. apenas separamos um espaço de memória para seu uso. Incremento e decremento ~ Operador lógico de negação &. } Exemplo 2 . OU Quadro 7 . mas.Atribuição de valores Na primeira linha temos a declaração da variável e na segunda linha temos a chamada inicialização da variável (a primeira vez que ela recebe algum valor). *. *=.: 48/137 . != Operadores de igualdade e diferença <.Exemplo de erro com uso de variáveis não inicializadas O processo de declaração e inicialização pode ocorrer em apenas uma única linha: public static void main(String[] args) { int i = 10. divisão e módulo. multiplicação.Prof. Isto é devido ao fato de que quando declaramos uma variável. %= Operadores de atribuição com adição. -=. qualquer que seja o valor que já exista nesse local ainda permanece lá (ou seja. short. subtração.Declarando e inicializando uma variável Tipos numéricos Com os tipos numéricos em Java: tipos inteiros (byte. -. ++.Figura 50. int e long) e tipos de ponto-flutuante (float e double) podemos realizar todas as operações: Operação Descrição = Operadores de atribuição ==. Em Java não podemos “trabalhar” com uma variável sem antes inicializa-la. >= Operadores de desigualdade +. Figura 50 .

public class ComprimentoCirculo { public static void main(String[] args) { float raio = 2.println(comprimento).  Logaritmo. Daniel Oliveira O Java. assim como outras linguagens tem operadores que simplificam a escrita.out. No Java estas operações são definidas dentro de uma classe especial chamada de Math.  Arredondamentos e Valores Absolutos. // resultado = 23 ( -(-23) ) resultado %= m. long m = 12L.Exemplo de utilização de operadores com tipos numéricos System.  Potências e Raízes. Nela as operações são categorizadas da seguinte forma:  Máximo e Mínimo. Constantes A classe Math possui duas constantes que são o Π (pi) e E (base de logaritmos naturais ou neperianos) cada uma com o valor de 3. // resultado = 84 (60 mais 24) resultado /= m.  Trigonometria.Math constantes Pág.PI. } } Exemplo 4 .718281828459045.  Números Randômicos.4f.141592653589793 e 2.Comparação entre operadores Abaixo mais um exemplo de código abaixo: public class CMain { public static void main(String[] args) { byte j = 60. respectivamente. double comprimento = 2 * raio * Math.System. 12) } } Exemplo 3 . // resultado = 60 (0 mais 60) resultado += k. short k = 24. int l = 30. Não existe nenhum ganho de desempenho no uso deles e sim redução de escrita. Prof. Operador simplificado Operação equivalente x += 5 x=x+5 x -= y x=x-y x *= 2 x=x*2 z /= 4 z=z/4 Quadro 8 .: 49/137 .Math Além desses operadores evidentemente existem outras operações (mais complexas) que podem ser realizadas com tipos numéricos. // resultado = 11 (resto de 23 div. // resultado = -23(7 menos 30) resultado = -resultado. // resultado = 7 (84 dividido por 12) resultado -= l. long resultado = 0L. System. resultado += j.

println("Resultado 2: " + Math.1f) e log (1+0. 15.System. System.1f).Prof. System.out. public class MenorMaior { public static void main(String[] args) { float precoProdutoA[] = { 11. na base de 10 e a soma do número mais 1.out.System.log1p(nr)).out.min(precoProdutoB[0]. } } Exemplo 6 . Daniel Oliveira Máximo e Mínimo Como o título já sugere. Ou seja. Tais métodos são:  log (número) .println("1 MB tem " + Math.12f }. Esse método retorna um resultado mais confiável se o número em questão for muito próximo a 0 ou um número fracionado.out.  pow (base. } } Exemplo 7 .println("O menor preço do produto B é " + Math.pow(2.calcula o valor da constante de Euler (E) elevado ao expoente public class PotenciasRaizes { public static void main(String[] args) { System. 10) + " KB").: 50/137 .  log10 (número) .Math Potência e raiz quadrada Logaritmo Na classe Math encontramos funções para cálculo de logaritmo natual. 20 }.Math Logaritimo Arredondamentos e Valores Absolutos Formas de arredondar um de ponto-flutuante (float e double) transformando-o em um número inteiro e também como obter o valor absoluto de qualquer número. precoProdutoB[1])).calcula a raiz cúbica de um número  exp (expoente) . Esses métodos são max() e min().max(precoProdutoA[0].2f.sqrt(121) + " e a raiz cúbica de 1331 também é " + Math. precoProdutoA[1])).println("Resultado 1: " + Math.out. float precoProdutoB[] = { 19.log(nr+1)).logaritmo natural de um número na base 10  log1p (número) .logaritmo natural de um número somado a 1.println("O maior preço do produto A é " + Math.System. public class Exemplo { public static void main(String[] args) { float nr = 0. System.7f.1f. Pág.out.cbrt(1331)).calcula a raíz quadrada de um número  cbrt (número) .  sqrt (número) . System.Math Min e Max Potências e raízes Podemos fazer cálculos de potência e raízes com facilidade usando os métodos disponíveis em Math.println("A raiz quadrada de 121 é " + Math. expoente) . o resultado não é o mesmo entre os métodos log1p (0. System.calcula a potência da base elevada ao expoente.logaritmo natural de um número. } } Exemplo 5 . a classe Math de Java possui dois métodos que retornam o maior e o menor valor de seus argumentos.

floor(nr) + "\nArredondamento: " + Math.println("A distancia entre o " + ponto1 + " e o " + ponto2 + " é " + Math.  hypot (x .System.  cosh (ângulo) – cosseno hiperbólico.: 51/137 . etc)  ceil (decimal) . basicamente. a distância entre dois pontos fundamentada na fórmula » [sqrt (pow(x. } } Exemplo 9 .  toRadians (ângulo) .Valores absolutos e arredondamentos Trigonometria A maioria da funções da classe Math são trigonométricas.retorna o arredondamento aritmético do número decimal passado como parâmetro.round(nr)). 6. decimal retorna float positivo.ceil(nr) + "\nInteiro mais alto: " + Math.0 será 6.tangente  asin (ângulo) – arco seno  acos (ângulo) – arco cosseno  atan (ângulo) – arco tangente  sinh (ângulo) – seno hiperbólico. } } Exemplo 8 .este método retorna o valor decimal do parâmetro sem a parte fracionada.out. Daniel Oliveira  abs (número) . ponto2)).: 2.este método retorna o primeiro inteiro após o valor decimal.0 será 6. public class Exemplo { public static void main(String[] args) { float nr = -5.  round (decimal) . Realiza o truncamento do número.println("Absoluto: " + Math. public class Hipotenusa { public static void main(String[] args) { double ponto1 = 30. System.retorna o valor absoluto do mesmo tipo do parâmetro (ex. 2) + pow(y.1 será 2.2))]. 10.abs(nr) + "\nInteiro mais baixo: " + Math.8 será 11.retorna um valor aproximado de graus de acordo com o ângulo medido em raios.Math: Trigonometria Pág. Ex.  tanh (ângulo) – tangente hiperbólica.: inteiro retorna int positivo.out.  floor (decimal) .: 2.  toDegrees (raio) . Ex.seno  cos (ângulo) – cosseno  tan (ângulo) .75f. System. ângulo em radianos.1 será 3.  sin (ângulo) . 6. 10.8 será 10. ou.Prof. y) .hypot(ponto1.retorna um valor aproximado de radianos de acordo com o ângulo medido em graus.retorna o valor da hipotenusa. double ponto2 = 40.

o significa isto? Para constantes numéricas ou literais (o valor Figura 51 .  O limite superior.random(). requerem menos espaço de memória do que o int.println("O número randômico escolhido entre 5 e 10 foi " + Math. } } Exemplo 10 . ou alcance (range) será sempre o limite superior subtraído o limite inferior e depois multiplicado ao número randômico.Math: Números randômicos Compatibilidade entre tipos É muito comum pensarmos que todos os tipos numéricos são iguais no sentido do que armazenar. Como foi visto anteriormente. se quisermos que um número randômico sempre fique entre 5 e 10.round(limiteInferior + nrRandomico * alcance)). procederíamos da seguinte maneira: 1. 3. pois. Tendo isto em conta. então 10 será nosso limite superior. Mas.System. Bem. No exemplo ao lado (e isto já foi usado anteriormente). int limiteSuperior = 10. Para conseguirmos um valor limite ou um alcance (comumente chamado de range) delimitado. public class Exemplo { public static void main(String[] args) { int limiteInferior = 5. Daniel Oliveira Números Randômicos O método random() retorna um valor double em 0.limiteInferior. na declaração da variável j. se tenho um tipo de dados inteiro simples (int) o espaço de memória separado para armazenar este valor pode ser utilizado para armazenar valores do tipo short e byte. Essas operações são simples e podem ser resumidas da seguinte maneira. Prof. uma vez que o double tem um limite de casas decimais. usei o valor 10L para inicializar a variável. Uma boa dica é sempre se perguntar se o tipo “cabe” dentro do outro.out. subtrairemos o limite superior com o limite inferior (10-5=5).  O limite inferior. não poderíamos armazenar um tipo long dentro do espaço reservado para um int ou qualquer tipo menor do que o mesmo. Como temos ambos os limites (inferior e superior) devemos criar um alcance (range).Exemplos de compatibilidade de tipos constante é um valor que não se altera e valores Pág. ou valor inicial (start value) será sempre somado ao número randômico. Para obtermos isso.0 e 1. isto é devido ao fato de as variáveis são posições de memória do computador e a mesma é limitada.: 52/137 . O maior número possível é 10. O menor número possível é 5.0 (deve-se levar em contar que não é uma quantidade infinita de números. Por exemplo. cada tipo numérico tem um limite de informação que pode ser armazenada. System. int alcance = limiteSuperior . portanto ele será nosso start value ou limite inferior. double nrRandomico = Math. devemos fazer pequenas operações matemáticas. 2.

// Erro f = (float)d. Mas. é colocar na frente da variável o nome do tipo (entre parênteses) para o qual deseja-se converter o conteúdo da variável : public class Exemplo { public static void main(String[] args) { double d = 3. Se. Ex. na linguagem para isto:  Constantes inteiras l ou L – ex. // OK } } Exemplo 11 . //OK i = j.: 32I ou 32L  Float: f ou F.: 53/137 .213. j = i. aquela em que informamos de forma explícita qual conversão o compilador deverá realizar. Existe também a chamada conversão implícita. ocorrerá um truncamento do número se a divisão não for Pág. ou seja.Cast Dica: Os tipos em Java e o comportamento da linguagem em relação pode gerar uma situação inusitada quando trabalhamos com a divisão numérica. long j. Para alterarmos este comportamento padrão do compilador podemos utilizar sufixos pré-definidos. ou seja. quando estamos trabalhando com variáveis? A forma mais usual. public class Exemplo { public static void main(String[] args) { int i = 10. f = d. Ex. ao se atribuir uma variável inteira de 32bits a uma variável inteira longa de 64 bits – aplicando a regra de que um tipo “cabe” dentro do outro fica mais fácil para entender que se for o inverso teremos que fazer uma conversão explícita. só será alterado se o código fonte for alterado) precisamos indicar ao compilador qual tipo de dado deverá ser utilizado para armazenar o valor na memória (lembre-se que os tipos de dados determinam entre outras coisas o espaço de memória reservado para o valor).: 32d ou 32D O uso de sufixos é muito útil em relação a valores que são fixos ou escritos diretamente no código.Apenas de conteúdo de J for inteiro de 32 Bits } } Exemplo 12 . float f. Prof.: 32f ou 32F  Double: d ou D. Por padrão toda constante inteira (números inteiros) são armazenados com int e todos os números com partes fracionárias são armazenadas com double. Daniel Oliveira informados diretamente no código fonte é um exemplo. em uma operação de divisão ambos os operandos forem inteiros o resultado da operação também será inteiro. Por exemplo. Conversões implícitas ocorrem principalmente quando existe alto nível de compatibilidade entre os tipos.Cast Este tipo de conversão é também conhecido como sendo conversão explícita. //Erro i = (int)j. //OK . aquela aonde o compilador realiza a conversão da “melhor forma possível”.

é possível. somar um valor numérico o que é feito: o System.println( Double.println( Float. como por exemplo: String. ao se str = str + 5. na Figura 53.Figura 52. Este tipo de erro é chamado de exceção ou exception (não é escopo desse texto abordar este assunto – isto é está ficando muito frustrante!).parseByte(str) ).Conversão de tipo para string então é realiza a concatenação.out. E o inverso.println( Integer.out.parseInt(str) ). System.parseFloat(str) ). podemos ter a seguinte situação: O operador “+” quando está envolvido com public class Exemplo { public static void main(String[] args) { tipo alfanumérico realiza uma operação de String str = "1001". System.Prof. System. é possível utilizar o conteúdo de uma variável string como sendo um valor numérico (isto será muito utilizado quando estivermos desenvolvimento programas que obtenham valores digitados pelo usuário)? Sim.out. Nesse caso teremos um erro em tempo de execução e o programa irá ser abortado . // Saída: 10015 } valor numérico sofre uma conversão } implícita para um valor alfanumérico (o inteiro 5 vira o caractere 5 no exemplo) e Exemplo 14 . } } Exemplo 15 . Pág. concatenação e não de adição. Veja o exemplo: public class Exemplo { public static void main(String[] args) { int i = 1.5 } } Exemplo 13 .out.Exemplo de métodos para conversão de string para tipos numéricos O que ocorreria se o conteúdo da variável str for incompatível em alguma conversão. System.out. temos um exemplo de como tratar de forma elegante este tipos de erros (existe muito mais conteúdo para isto. se os operandos forem de tipos diferentes o resultado será do tipo de maior precisão ou tamanho.parseLong(str) ). mas. Então.Exemplo de cast para operação de divisão Quando trabalhamos com tipos alfanuméricos. System.println(i / (double)j). agora não é o momento). int j = 2.out.println( Byte.println( Long.parseDouble(str) ). System. // Resultado = 0.out. Mas.out.: 54/137 . Daniel Oliveira inteira. // Resultado = 0 System.println(str). mas nem sempre é possível a conversão direta para isto teremos que utilizar algumas funções: public class Exemplo { public static void main(String[] args) { String str = "100".println(i / j).

: 55/137 .Exemplo de falha entre conversão de tipos Figura 53 . todos os erros que ocorram dentro de um bloco try (tentativa) é capturada por um bloco catch e o erro é informado através de um objeto do tipo Exception. e simples. Daniel Oliveira Forma bem geral.Exemplo de tratamento de exceções Pág.Prof. Figura 52 .

char letra = 'J'. Como a documentação do Java (ORACLE. System.Prof. nosso foco são aplicativos de console. por isso o escrevemos dessa forma: System.println ("Valor:" + inteiro). public class Exemplo { public static void main(String[] args) { System.out. System.out.Exemplo de saída para console Tanto para o método print ou println podemos passar qualquer tipo de variável que o mesmo irá realizar a conversão para o tipo String e exibir na saída.out. float decimal = 0.out.  println(<<texto>>): Imprime o texto e gera uma quebra de linha. No Java podemos construir aplicativos de janela. no nosso caso (o que irá abordar todo este texto) iremos utilizar as rotinas de saída no console. Como o próprio nome deixa claro. Normalmente utilizando em aplicações padrões.out. a classe out é responsável por rotinas de saída.println. Quais são as principais rotinas para impressão na console:  print(<<texto>>): Imprime o texto sem gerar um nova linha.out.: 56/137 . applets (para páginas html) e Web. Ficando aberto e pronto para o uso. System. } } Exemplo 17 . mas. Um próximo comando print ou println irá continuar da nova linha. System.Exemplo de saída para console Podemos ainda informar (como parte do texto a ser exibido) caracteres especiais que serão interpretados pelos comandos print e println da seguinte forma:  \n .print("o método ").print("usando ").println ("Valor:" + letra). System. Daniel Oliveira Interagindo com usuários Uma parte importante dos programas é entrada e saída de dados.print("print").pula uma linha Pág.5f.println("Saída Padrão "). } } Exemplo 16 .out.out. public class Exemplo{ public static void main(String[] args) { int inteiro = 200. Um próximo comando print irá continuar da posição de onde este parou. System.println ("Valor:" + decimal). Como pode ser percebido nos exemplo anteriores o principal comando para saída (na tela de console) é o: println – este comando está dentro da classe out que está no pacote System.2012) diz: fluxo padrão de saída.

System.out. para cada marcador desse deve haver uma variável ou valor (listado após a string) para ser colocado nessa posição (placeholder).Prof. dentro dessa string temos marcadores especiais que são inicializados com caractere %. Os placeholders tem o seguinte formato: %[flags][width][.123). System.printf("Formato padrão de ponto flutuante negativo: %. 1234567. 1234567.cria uma tabulação (o mesmo que apertar a tecla TAB)  \b . Este método utiliza do que chamamos de placeholders ou espaços reservados.out.printf("Ponto Flutuante com virgulas: %. 1234567. -1234567.123).out. System. 3).out.out. // cursor no início da linha } } Exemplo 18 . -1234567.retorna o cursor um caractere  \r . para isto deve ser utilizado o método printf – imprimir formatando.f\n".print("prof.123).2f\n% . System.print("Algoritmos I:\t").retorna o cursor ao início da linha public class Exemplo{ public static void main(String[] args) { System.printf("Alinhando valores positivos e negativos:\n"). 3. Daniel Oliveira\n"). //pula uma linha System.123).2f\n".printf("%d %(d %+d %05d\n".out.f\n".printf("% .print("Sinistro!\r").(f\n". Exemplo 19 .123.precision]conversion  Flags: o '-' : justificado a esquerda o '^' : caixa alata o '+' : valor sinalizado o '0' : força zeros a direita ou esquerda  Width: comprimento do número  Precision: precisão do número – casas decimais  Conversion: o 'd': inteiro o 'o': octal o 'x': hexadecimal o 'f': notação decimal para ponto-flutuante o 'g': notação científica o 'a': hexadecimal com expoentes o 'c': caractere o 's': string Pág. Daniel Oliveira  \t . 3. Veja o exemplo: System.out.out. -1234567. System.123). // cria uma tabulação System..Uso de caracteres de escape para saída no console É possível ainda aplicar algum tipo de formatação na saída de valores numéricos.printf("Formato Padrão de ponto flutuante: %f\n".printf("Formatação de ponto flutuante negativo: %. System.out.: 57/137 .out..Uso do comando printf O primeiro parâmetro passado para a função é uma string. -3.

printf("x = %2$f y = %1$g\n". Figura 56 .Mais um exemplo de uso do printf Além da saída precisamos de uma forma de obter as informações dos usuários.Uso do método next da classe Scanner Quando se digita o Enter. Para isto vamos trabalhar com uma classe especial que é Scanner. é necessário sempre a introdução da declaração import como na linha 1. c).5. b. a. System. System.printf("a = %3$d b = %1$x c = %2$o\n". Na linha 5 temos a construção padrão de uma variável scan que é do tipo Scanner (classes definem novos tipos!) e em seguida temos um novo comando: new – de forma bem direta. y = 33. Na Figura 54.out.out. b. Na linha 7 temos a declaração de uma varável do tipo String (variável Nome) que recebe o resultado da rotina next.Uso da classe Scanner Pág. x. a. double x = 27. todo os texto digitado é passado para a variável Nome e na linha 8 o seu conteúdo é impresso na no console . Exemplo 20 .out.printf("a = %d b = %x c = %o\n". Daniel Oliveira o 'b': valor lógico "true" ou "false". Ao executar esta linha de código será exibido um cursor no console e o usuário poderá digitar o que desejar até que pressione a tecla ENTER – ver Figura 55. b = 15. temos um exemplo da utilização da classe Scanner.75.: 58/137 . c). System. c = 255. Prof. Como esta classe está definida dentro do pacote util que por sua vez está definido no pacote java. este comando é usado apenas com classes para criar os Figura 54 . a linha 5 será utilizada como uma “receita de bolo” e sempre a construiremos dessa forma.Exemplo da classe Scanner objetos (vou parar por aqui!). Figura 55 . y). Mais um exemplo utilizando o printf como saída: int a = 5.

System. obtendo as informações digitadas e tenta converter para o tipo especifico que necessitamos. String Nome = scan. temos ainda outros para os tipos byte.out.out. //Obter um double System. import java.print("Sua altura:"). informações sobre como utilizar JOptionPane. } } Exemplo 21 .println(Nome).nextDouble(). double altura = scan.out. int Idade = scan.Prof.: 59/137 .nextInt().util. public class Exemplo{ public static void main(String[] args) { Scanner scan = new Scanner(System.out. //Obter um valor inteiro System.nextLine().println(altura).out. //Obter uma frase inteira System. System.Exemplo das rotinas da classe Scanner para obter dados numéricos Além das rotinas acima.print("Sua idade:"). long.in).print("Informe seu nome:").out. System.println(Idade). Pág. Veja no Anexo B. Daniel Oliveira E quando necessitarmos de obter valores numéricos? Classe Scanner tem rotina para isto.*. caso não seja possível um erro irá ocorrer (uma exceção).

: 60/137 . banana. 2) Realizarei uma viagem de vários dias em meu automóvel.). e por fim. com estes dados. em média. Faca um programa que calcula a conta e. O programa deve calcular a velocidade média em km/h. 5) A conversão de graus Fahrenheit para Celsius é obtida pela fórmula abaixo. Você poderia fazer um programa que me desse. a segunda tem peso 3 e a terceira tem peso 5.Prof. Faça um algoritmo que leia um valor em graus Centígrados e imprima seu correspondente em graus Fahrenheit. e YY é a velocidade média. por litro de gasolina? 3) Faça um programa que leia o nome de um piloto. Também vou somar toda a gasolina que comprar para o carro. Lembre-se dos 10% do garçom. Daniel Oliveira Exercícios 1) Faça um programa que leia três valores inteiros. Para isto. o número elevado a potência fracionária 2/3.00 mais R$ 3. cada refrigerante custa R$1. quantos km fiz. A primeira nota tem peso 2. P(x1. e calcule e exiba a sua média ponderada. 11) Faça um programa que receba o valor do quilo de um produto e a quantidade de quilos do produto consumida calculando o valor final a ser pago. tendo como dados de entrada dois pontos quaisquer no plano. e depois ao chegar.y2). 6) Fazer um programa que leia um número inteiro e mostre o seu triplo. Pág. A fórmula que efetua tal cálculo é: 8) Elaborar um algoritmo que lê 2 valores a e b e os escreve com a mensagem: "São múltiplos" ou "Não são múltiplos". e gostaria de saber a quilometragem média por litro de gasolina. sabendo que a será informada a quantidade de pessoas.50 por tipo de cobertura pedida (queijo. quanto que cada um deve pagar.80 e uma pizza mista grande custa R$25. etc. Uma turma vai à pizzaria e pede uma determinada quantidade de refrigerantes e uma pizza grande com uma determinada quantidade de coberturas.y1) e P(x2. um segundo valor que é o preço do produto e retorne o troco a ser dado. 4) Em uma pizzaria. uma distância percorrida em km e o tempo que o piloto levou para percorrê-la (em horas). anotarei a quilometragem no velocímetro ao sair de viagem. a sua raiz cúbica. escreva a distância entre eles. onde XX é o nome do piloto. sua metade. e exibir a seguinte frase: A velocidade média de XX foi YY km/h. presunto. 7) Construa um algoritmo que. 9) Desenvolva um algoritmo que receba o valor de raio e calcule a área e comprimento da circunferência 10) Faça um programa que receba um valor que é o valor pago.

} } } Exemplo 22 .Estrutura IF clássica Nesse exemplo temos uma estrutura clássica do comando if. é necessário verificar se o número informado é positivo ou não.Exemplo 22). sempre dependente de uma condição lógica: verdadeiro ou falso. vamos examinar o fluxograma da Figura 57 .Estrutura condicional A instrução IF No Java a estrutura condicional mais simples utiliza apenas um comando if (“se” em inglês . Exibe mensagem de Calcula raiz erro Iremos utilizar estruturas condicionais sempre quadrada real quando for necessário realizar um ação ou não realizar de acordo com um teste de condições que resultarão em verdadeiro ou falso. por exemplo."). O teste lógico realizado é se o conteúdo da variável “i” é igual a cinco: i == 5.Prof.out. public class Exemplo{ public static void main(String[] args) { int i = 5. Dependendo do resultado da pergunta dentro do Obter valor losango o nosso algoritmo tomará uma caminho ou outro. Daniel Oliveira Estrutura condicional Normalmente qualquer algoritmo apresenta algum tipo de condição para a sua execução.: 61/137 . Não podemos calcular a raiz real de qualquer número. Estruturas condicionais impõem caminhos Sim >= 0 ? Não alternativos aos algoritmos.Estrutura condicional aonde temos uma rotina que irá calcular a raiz real Cálculo de Raiz Real de um número.println("Valor igual a 5. if (i == 5) { System. mas. Pág. O operador relacional para teste de igualdade no Java (e em várias linguagens baseadas no C) é o chamado double equal ou igual duplo (==) e não o igual simples (=) que é o operador de atribuição. Fim Exibe resultado Figura 57 .

Exemplo do IF com apenas uma linha Resumindo. if (Cor.: 62/137 ."). e. Para comparações não sensíveis a caixa deve ser usado o método equalsIgnoreCase. Repararam que não “. veja o exemplo abaixo: public class Exemplo{ public static void main(String[] args) { Scanner scan = new Scanner(System. este operador poder ser utilizado para todos os tipos de dados vistos até agora com exceção da String. ele diferencia maiúscula de minúsculas. Sendo que essa instrução pode ser apenas uma única linha de código (nesse caso o conjunto de {} é opcional) ou bode ser um bloco com várias linhas de código. System. O método equals é sensível a caixa.Uso de equals para comparação de strings No exemplo anterior comparamos o conteúdo da variável Cor com o valor “azul”. com inclusive outras instruções condicionais.in). Pág. } } } Exemplo 24 .print("Minha cor preferida também é o azul.next(). Podendo esta instrução ser apenas uma linha ou um bloco (delimitado pelo para de {}) de código.equals("azul")) { System.println("Valor igual a 5. como em Java todo bloco de código é iniciado com um abre chaves “{“ e finalizado por um fecha chaves “}”. depois do teste lógico temos um bloco de código.print("Informe uma cor"). if (i == 5) System.out.out. public class Exemplo{ public static void main(String[] args) { int i = 5. Comparação de strings Vimos que o operador de teste de igualdade é o “==”. então a instrução seguida ao comando será realizada. } } Exemplo 23 . Daniel Oliveira O teste lógico do if vem logo em seguida ao comando e entre parênteses. se o teste lógico do comando if for verdadeiro.Prof.").out. ou seja. Deve-se ser usado o método equals para realizar a comparação entre strings. String Cor = scan.” no comando if? Na realidade o comando if é formado pelo teste lógico e caso este teste for verdadeiro uma instrução é executada.

Pág.*.print("Minha cor preferida também é o azul.out.print("Minha cor preferida também é o azul.print("A cor escolhida não foi o azul!")."). public class Exemplo{ public static void main(String[] args) { Scanner scan = new Scanner(System.next().out.: 63/137 .next().").equalsIgnoreCase("azul")) { System. a linha de comando ou código de bloco (aqui vale os mesmos parâmetros da instrução if) será executada se a condição for falsa. as instrução if.Exemplo de equalsIgnoreCase para comparação de string A instrução Else Bem. pode ser utilizada sem a instrução else.util. if (Cor. System. } } } Exemplo 26 .Exemplo de uso do Else A instrução else sempre deverá ser utilizada em conjunto da instrução if.equalsIgnoreCase("azul")) { System. String Cor = scan. public class Exemplo{ public static void main(String[] args) { Scanner scan = new Scanner(System. } else { System.print("Informe uma cor"). e se a condição de teste da instrução if for falsa? Caso seja necessário uma ação nessa situação existe a declaração else (“senão” em inglês).out.out. import java. if (Cor.print("Informe uma cor").in).*. Prof. Se a instrução else for usada em conjunto com a instrução if.in). Mas.util. Daniel Oliveira import java. } } } Exemplo 25 . System. String Cor = scan.out.

Como ficaria a expressão para este teste? Figura 58 . } } Exemplo 27 .println("Você informou o número 1. veja o exemplo. Daniel Oliveira Aninhando a instrução if/else Após uma instrução if ou else podemos ter uma linha de comando ou um bloco de comandos. System. podemos ter uma instrução seguida da outra.: 64/137 . Para a construção de expressões lógicas com mais de um termos temos que usar os chamados conectivos lógicos:  Operador AND = &&  Operador OR = || Vamos imaginar um algoritmo que receba um número inteiro e verifica se o mesmo é maior ou igual a 10 e menor ou igual a 100.print("Informe um inteiro entre 1 e 3:"). else System.").Prof.*.out.").nextInt().").in). if (Numero == 1) System.Exemplo de expressão lógica com AND Pág. int Numero = scan. else if (Numero == 3) System.out. Como as instruções if são também comandos.out.out. import java.println("Você informou o número 2.Exemplo e if/else aninhados Usando operadores AND e OR O expressão de teste da instrução if pode ser simples (como foi visto nos exemplos anteriores) ou pode ser resultado de uma expressão bem mais complexa.println("Você informou o número 3. else if (Numero == 2) System. public class Exemplo{ public static void main(String[] args) { Scanner scan = new Scanner(System.println("Número inválido.out.util.").

Daniel Oliveira Figura 59 .Exemplo de operador OR Pág.Exemplo de expressões relacionais com AND Vamos alterar o algoritmo para indicar se o número indicado é igual a 10 ou 100: Figura 60 .: 65/137 .Prof.

Tabela da verdade do operador AND Abaixo temos a tabela da verdade para o operador OR: Figura 62 .Prof.Tabela da verdade do operador OR Pág.: 66/137 . Daniel Oliveira Abaixo temos a tabela da verdade para o operador AND: Figura 61 .

print("Operação inválida"). Nessa estrutura Pág.print("Opção 4 selecionada"). System.out.nextInt(). System.println("Menu").out.Prof. System. é indicado o uso da estrutura switch/case. } else { if (opcao == 2) { System.Opção 1").Opção 4").out. Daniel Oliveira Declaração switch/case O uso de if/else encadeados pode ser bem confuso para se manter o código fonte. Para situações como esta.out. mais intricado e difícil de entender o código fica.*. vamos desenvolver um algoritmo que simule um menu de uma aplicação: import java.print("Opção 1 selecionada").Exemplo de uso de IF / Else encadeados No exemplo acima é fácil notar que à medida que a quantidade de opções aumenta.Opção 3").println("\t 4 .: 67/137 .print("Opção 2 selecionada").println("\t 2 . } else { System.out.print("Opção 3 selecionada"). } else { if (opcao == 4) { System. int opcao = scan.util.out. } else { if (opcao == 3) { System.in).out.Opção 2").out.out.out.print("Informe uma opção:").out.println("\t 3 . if (opcao == 1){ System. public class Exemplo{ public static void main(String[] args) { Scanner scan = new Scanner(System. System. System. } } } } } } Exemplo 28 . System.println("\t 1 . Por exemplo.

case 4: System. byte e char 2) Não é possível o uso de expressões booleanas (lógicas) no switch. break.print("Informe uma opção:").print("Opção inválida!"). Além das palavras chaves switch e case.out.print("Opção 4 selecionada. omitirmos um break. então.out. case 2: System.*. Este comando indica que o processamento do switch deve ser interrompido e a execução do código deverá continuar a partir da primeira linha após o final do switch.Opção 2"). System. case 3: System.  default – este seria o comando else dessa estrutura e é opcional.out. import java. por exemplo.Exemplo de uso do switch / case Duas coisas tem que ser consideradas ao usar o switch: 1) O switch trabalha apenas com os tipos primitivos: int.println("\t 3 .Prof. Se. } } } Exemplo 29 . break. default: System. Se o valor da variável de teste do switch não corresponder a nenhum case.util. System. System.out. System.out.out. int opcao = scan.println("\t 2 .out."). o comando case imediatamente após será executado (mesmo que o conteúdo da variável não execute este case).Opção 1").println("Menu"). se houver um default definido.nextInt().Opção 4").Opção 3"). Pág.in).: 68/137 .println("\t 1 .print("Opção 2 selecionada. levando-se em conta se o ano é bissexto ou não. switch(opcao) { case 1: System."). o código dentro do default é executado.println("\t 4 . ainda compõe esta estrutura:  break – usado dentro do bloco de código do case. System. short.print("Opção 3 selecionada.").out. public class Exemplo{ public static void main(String[] args) { Scanner scan = new Scanner(System. Daniel Oliveira um teste de igualdade é realizado em uma variável (switch) e para da possível valor dessa variável (case) é realizado uma ação. No Exemplo 30.print("Opção 1 selecionada. break.out.").out. temos um algoritmo mais complexo que para determinar a quantidade de dias do mês. break. System.out.

break.").out. } System.println("Número de dias = " + numDays). Daniel Oliveira import java.util.print("Informe um mês:"). System. } } Exemplo 30 .print("Informe um ano:").: 69/137 . System. default: System.in). int numDays = 0. break. break. public class Exemplo{ public static void main(String[] args) { Scanner scan = new Scanner(System. case 2: if ( ((ano % 4 == 0) && !(ano % 100 == 0)) || (ano % 400 == 0)) numDays = 29.out.out.*. int ano = scan. else numDays = 28.println("Mês inválidos. break.Uso do switch/case mais avançado Pág. case 4: case 6: case 9: case 11: numDays = 30.nextInt(). int mes = scan.Prof. switch (mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31.out.nextInt().

construa um algoritmo que calcule seu peso ideal.25 27. 5.743. e seu ano de nascimento (o programa deve funcionar corretamente para qualquer que seja o ano atual). 2. senão. utilizando as seguintes formulas:  Para homens: (72. Faça um programa que receba o valor do salário de uma pessoa e o valor de um financiamento pretendido. “reprovado” ou “recuperação”. e indique o carro que teve maior velocidade média. Sabendo que a velocidade média é a razão entre a distância percorrida e o tempo levado para percorrê-la. o desconto e salário líquido.: 70/137 . após os descontos do imposto de renda.81 Isento Acima de 1. Caso o financiamento seja menor ou igual a 5 vezes o salário da pessoa. faça um programa para ler as distâncias que cada carro percorreu e o tempo que cada um levou.743. se média maior igual a 7 e menor igual a 10. se média maior igual a 5 e menor que 7. Leia um nome e duas notas dadas a um aluno e imprima: nome.81 até 2.372.  Recuperação. Daniel Oliveira Exercícios 1.  Aprovado. que será calculado da seguinte maneira: Salário Imposto Dedução Até 1. o programa escreverá depois a frase "Obrigado por nos consultar. o programa deverá escrever "Financiamento Concedido". Dois carros percorreram diferentes distâncias em diferentes tempos. Tendo como dados de entrada a altura e o sexo de uma pessoa.7 * Altura) .92 Acima de 2. de acordo com as regras abaixo:  Reprovado. Leia um salário bruto e imprima o salário bruto.5% 548. Faça um programa que leia o nome e idade de duas pessoas e imprima o nome da pessoa mais nova. 6.1 * Altura) .7 7." 3. média e “aprovado”. escreverá "Financiamento Negado".Prof.82 Pág. se média maior igual a zero e menor que 5. Faça um programa que verifique se um número é impar. 4.58  Para mulheres: (62.25 15% 205.44. Independente de conceder ou não o financiamento.372.

12. A loja Constrói em Partes produz dois tipos de hastes: cobre e alumínio. Considere os seguintes códigos:  001: Parafuso. verificar a tabela abaixo. Fazer um algoritmo para ler o tipo de consumidor (‘I’.  002: Porca. 13. Daniel Oliveira 8. O desconto dado dependerá da quantidade de hastes compradas. ‘C’ ou ‘R’). e calcular e imprimir qual será o valor pago.77 ∗ Consumo – 22 10. tem-se a<b+c. b<a+c e c<a+b.00. R – Residencial. Faça um programa que receba 2 valores e retorne o maior entre eles. Faça um programa que receba 3 valores que representarão os lados de um triângulo e verifique se os valores formam um triângulo e classifique esse triângulo como: a. Escaleno (3 lados diferentes).  Para qualquer outro código indica: Diversos. Cada haste de cobre é vendida por R$ 2. e cada haste de alumínio é vendida por R$ 4. Faça um programa que receba 4 valores e retorne o menor entre eles. conforme tabela abaixo.Prof. Isósceles (2 lados iguais). Tipo de Consumidor Cálculo Industrial 0.00. C – Comercial. Lembre-se que: Em qualquer triângulo.68 ∗ Consumo + 34 Comercial 0. Pág. b.37 ∗ Consumo + 45 Residencial 0.: 71/137 . 11. Fazer um algoritmo para ler a quantidade comprada de cada tipo de haste e imprima o total pago.  003: Prego. Uma empresa de energia elétrica trabalha com 3 tipos de consumidores: I – Industrial. Equilátero (3 lados iguais). Utilize a estrutura if para fazer um programa que retorne o nome de um produto a partir do código do mesmo. Quantidade comprada (duas hastes juntas) Percentual de descontos Abaixo de 5 0 Entre 5 e 15 10 Entre 16 e 20 15 Acima de 20 20 9. c. Para calcular o valor pago. a quantidade de energia consumida.

32 1324 6. sabendo-se que o tempo máximo de duração do jogo é de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte. a.37 0987 5. Um vendedor necessita de um algoritmo que calcule o preço total devido por um cliente. Ponderada com pesos 3. Um banco concederá um crédito especial aos seus clientes.32 7623 6. Escrever um algoritmo que lê a hora de início de um jogo e a hora do final do jogo (considerando apenas horas inteiras) e calcula a duração do jogo em horas. usando a tabela abaixo.4 3 c. Aritmética b.Prof. variável com o saldo médio no último ano.45 17. a opção escolhida pelo usuário e calcule a média. Um usuário deseja um algoritmo onde possa escolher que tipo de média deseja calcular a partir de três notas.: 72/137 . Faça um algoritmo que leia as notas. O algoritmo deve receber o código de um produto e a quantidade comprada e calcular o preço total. Faça um algoritmo que leia o saldo médio de um cliente e calcule o valor do crédito de acordo com a tabela abaixo. Harmônica: 𝐻 = 1 1 1 ( + + ) 𝑁𝑜𝑡𝑎1 𝑁𝑜𝑡𝑎2 𝑁𝑜𝑡𝑎3 16. Mostre uma mensagem informando o saldo médio e o valor do crédito. Código do Produto Preço unitário 1001 5. Saldo médio Percentual De 0 a 200 Nenhum crédito De 201 a 400 20% do valor do saldo médio De 401 a 600 30% do valor do saldo médio Acima de 601 40% do valor do saldo médio 15.3. Pág. Daniel Oliveira 14.45 6548 2.

os loops indeterminados a sua execução é realizada enquanto uma determinada condição for verdadeira. Já. desta forma o código contido dentro do corpo do loop poderá nunca ser executado caso a condição resultar em um valor falso. o desenvolvimento de um algoritmo que irá ordenar uma lista de números inteiros.Loop pré-testados Pág. As estruturas de repetição são formadas por duas partes lógicas: condição(expressão lógica) e o corpo (conjunto de código que é executado a cada iteração) do loop.: 73/137 . Condição Executa o corpo do Sim verdadeira ? loop Não Figura 63 . Chamamos de iteração a cada vez que a estrutura de repetição é executada. Por exemplo. Os loops indeterminados podem ser classificados de duas formas:  Pré-testados  Pós-testados Os loops pré-testados (ver Figura 63) verificam a condição antes de qualquer coisa.Prof. Será necessário percorrer vários elementos dessa lista várias vezes até finalmente a mesma esteja ordenada da forma como queremos. A condição é testada a cada iteração para verificar se é necessária a execução do código contido no corpo do loop ou não. Daniel Oliveira Estruturas de repetição Em muitas situações é necessário que nossos algoritmos repitam uma ou mais vezes um conjunto de instruções. Os loops podem ser categorizados da seguinte forma:  Indeterminados  Determinados Nos loops determinados é possível saber quantas vezes ocorrerá à repetição.

Prof.print("x : " + x ). enquanto uma determinada condição for verdadeira execute o corpo do loop. System.Estrutura do Loop While O termo while vem do inglês que traduzido é enquanto. a sua estrutura básica é: while(<Condição lógica>) { ///Comandos } Exemplo 31 . x++.Loop pós-testado Loop While Este é um tipo de loop do tipo pré-testado indeterminado.out. Executa o corpo do loop Sim Condição verdadeira ? Não Figura 64 . Ou seja. Assim. while( x < 20 ){ System. Daniel Oliveira Os loops pós-testados (Figura 64) verificam a condição após a execução do código contido no corpo do loop.print("\n").Exemplo do loop while Pág.out.: 74/137 . } } } Exemplo 32 . public class Exemplo{ public static void main(String[] args) { int x= 10. nesse tipo de loop o corpo do loop é executado pelo menos uma vez.

. } } } Exemplo 33 . Dica: Além do teste de parada retornar um valor falso.out. Exemplo 34 . Bastando para isto utilizar o comando break dentro do corpo do loop. temos a estrutura desse loop. eles podem simplesmente nunca parar e entrar no que chamamos de loop infinito.print("\n").print("x : " + x ). bastando para isto que a condição de teste de parada sempre seja verdadeira. public class Exemplo{ public static void main(String[] args) { int x= 10. Daniel Oliveira Analisando o Exemplo 32. System.. temos um código que irá imprimir na tela os valores da variável x de 10 até 19 (Por que não 20? Veja a condição de teste do loop. Ver Exemplo 33.).Estrutura do Loop Do. Pág. while( x < 20 ){ System.Exemplo do uso do comando break dentro de um loop Qual seria o resultado da execução do exemplo anterior? Loop Do..While Se traduzirmos do inglês as palavras Do e While temos: Faça e Enquanto. Se. Dica: Loops indeterminados tem uma característica que pode ser perigosa. x++. Este é um loop indeterminado (já vimos anteriormente qual o significado desse termo) e pós-testado. Prof. Ao ser executado este comando dentro do corpo do loop a execução do loop é para imediatamente e o a primeira linha imediatamente após o loop é executada. if (x % 2 == 0 && x >= 12) break.out. do { //Comandos }while(<Condição lógica>). no exemplo anterior a linha de código que incrementa a variável x por omitida o loop nunca irá parar. Faça alguma coisa (o código dentro do corpo do loop) enquanto alguma coisa for verdadeira (a condição lógica). podemos realizar uma parada “forçada” da execução do loop.While No Exemplo 34.: 75/137 ..

2 public class Exemplo{ 3 public static void main(String[] args) { 4 int conta = 0.*.print("Você informou " + conta + " números. } } Exemplo 35 . Daniel Oliveira É fácil notar que nesse loop que o código no seu interior é executado pelo menos uma vez.While Pág. if (valor > 0) { conta++. Aqui temos um código que irá conter quantos inteiros maiores do que zero o usuário informou. temos um código que irá imprimir números de 10 a 19 no console. public class Exemplo{ public static void main(String[] args) { int x= 10.Prof.util.print("x : " + x ).out. 5 Scanner scan = new Scanner(System. Vamos analisar um exemplo um pouco mais complexo (ver Exemplo 36).print("Informe um inteiro positivo e zero para encerrar:"). System. do{ System.Exemplo do Loop Do. 8 System.while e vice versa.valor. valor = scan.out.. }while( x < 20 )..While No Exemplo 35. Este tipo de loop é muito útil em situações aonde queremos garantir que o código no interior do loop seja executado pelo menos uma vez."). Dica: Na realidade tudo que fazemos com o loop while podemos fazer com loop do..out.print("\n").Uso do loop Do.out. 9 } 10 } Exemplo 36 . x++. Este exemplo faz a mesma coisa que o Exemplo 32. 1 import java. } 7 }while( valor != 0 ).nextInt().in)..: 76/137 . 6 do{ System.

while com loop while Quais são as diferenças entre os dois exemplos? Loop For Até agora vimos loops categorizados como indeterminados. if (valor > 0) { conta++.").nextInt(). while ( valor != 0) { System.out.*. já este o loop for tem a seguinte estrutura: for(inicialização. o teste lógico resultar em um valor falso o loop é encerrado.util. public class Exemplo{ public static void main(String[] args) { int conta = 0. aqui temos uma variável de controle do loop que deverá ser inicializada. Por que foi necessário inicializar a variável conta para zero? 3. } } Exemplo 37 . valor = scan. Se. Pág. Daniel Oliveira A execução do loop é encerrada quando o usuário informa o valor zero. Ainda nesse exemplo vamos analisar o seguinte: 1. (linha 6).print("Informe um inteiro positivo e zero para encerrar:"). a cada iteração do loop será feito um teste lógico com ela e também a cada iteração esta variável irá sofrer uma alteração do seu valor..print("Você informou " + conta + " números.: 77/137 .valor = 1.Prof. Scanner scan = new Scanner(System. O que ocorrerá se for informado um número inteiro negativo? Vamos reescrever o código do exemplo anterior utilizando agora o loop while: import java. atualização) { //Comandos } A estrutura desse loop é bem diferente dos demais.out.Exemplo do loop do. Expressão lógica.in). } } System. O que ocorreria se a declaração da variável conta fosse feita dentro do corpo do loop? 2.

} Exemplo 40 . E. Prof.i>=0. assim.: 78/137 . } Exemplo 39 – Exemplo do loop FOR descrente Em todos os exemplos vistos até agora com Loop for. não poderá ser acessada fora do bloco.i>=0.out. nada impede que seja utilizada uma variável já declarada. x++){ System. System.out.print("A variável i é visivel fora do loop:" + i).Exemplo de loop for com a variável de controle declarada fora do loop Pág. } } } Exemplo 38 .i--) { System.i--) { System.print("x : " + x ).println(i). for(i=10. Daniel Oliveira public class Exemplo{ public static void main(String[] args) { for(int x = 10. temos um código que irá imprimir os valores de 10 a 19.out.print("\n").out. esta variável só será “visível” dentro do corpo do loop.Exemplo do loop FOR No Exemplo 38. } System. a variável de controle é declarada e inicializada dentro da declaração do loop. reescrevendo o exemplo anterior: public static void main(String[] args) { int i. Podemos também utilizar a estrutura do loop for para gerar contagens inversas.println(i).out. for(int i=10. x < 20. partindo de um valor superior ir decrementando a variável de controle até atingir o limite inferior desejado – veja Exemplo 39. Mas.

Prof. Daniel Oliveira

Vamos a um exemplo um pouco mais complexo:

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);
int num;
boolean isPrime = true;
System.out.print("Informe um número inteiro:");
num = scan.nextInt();

for(int i=2; i < num/2; i++) {
if((num % i) == 0) {
isPrime = false;
break;
}
}

if(isPrime)
System.out.println("Primo");
else
System.out.println("Não primo");

}

Exemplo 41 - Exemplo um pouco mais completo com loop For
fonte: http://www.java-samples.com

Pág.: 79/137

Prof. Daniel Oliveira

Exercícios

1) Construa um algoritmo que calcule o fatorial de um número inteiro positivo.

2) Codificar o algoritmo para imprimir os N primeiros números naturais pares

3) A conversão de graus Fahrenheit para centígrados é obtida pela fórmula C = 5/9 (F-32). Escreva um
algoritmo que calcule e escreva uma tabela de graus centígrados em função de graus Fahrenheit que
variem de 32 a 212 de 1 em 1. A tabela deverá ser semelhante à mostrada abaixo:
Graus Fahrenheit Graus Celsius
32 0

33 0.6

34 1.1

... ...

212 100

4) Escrever um algoritmo que calcule a média obtida por uma turma de "n" alunos na primeira prova
do semestre, onde o valor de n será informado pelo usuário.
5) Escrever um algoritmo que, dada uma sequência de valores inteiros e positivos, determine qual é a
média aritmética dos valores pares. O valor 0 (zero) indica o término dos dados de entrada, ou seja,
o programa termina quando for informado o valor 0(zero).
6) Codifique o algoritmo que leia dois números inteiro e positivo e apresente o resultado do
primeiro número elevado ao segundo número (exemplo: 24 = 2*2*2*2 = 16). Não utilizar o método
pow do package Math.
7) Escrever um algoritmo que lê um valor n e outro valor m, e calcula a tabuada de n de 1 até m.
Exemplo: Supor que o usuário informe os seguintes valores: n=8 e m=12. Então tem-se:
1x8=8
2 x 8 = 16
...
. . .
12 x 8 = 96

8) Fazer um algoritmo para calcular a soma de todos os múltiplos de 7 entre 100 e 500.
9) Faça um algoritmo que imprima os números inteiros decrescentes compreendidos entre 100 e 10.
10) Faça um algoritmo que imprima a tabuada do número 5 da seguinte maneira:
5x0=0
5x1=5
5x2=10
...
5x10=50

11) Faça um algoritmo que imprima a soma dos números ímpares compreendidos entre 10 e 100.

Pág.: 80/137

Prof. Daniel Oliveira

12) Codificar o programa abaixo, para que determine os valores de y, tal que y = (3+2x+6x²)
/(1+9x+16x²) para x variando de 1,0 até 5,0 em intervalos de 0,1 unidades

13) Faça um algoritmo que imprima o valor de S da seguinte série:

1 2 3 4 30
S     
60 58 56 54 2

14) Faça um algoritmo que imprima o valor de H da seguinte série:

1 3 5 7 99
H     
1 2 3 4 50

15) Faça um algoritmo que leia um número inteiro e positivo N e imprima o valor de S da seguinte série:

S = 1 + 1/2 + 1/3 + ... + 1/N

16) Faça um algoritmo que imprima a soma dos 20 primeiros termos da serie abaixo, onde o
denominador representa o fatorial do número.
100 99 98 97
   
0! 1! 2! 3!

17) Programa para calcular e imprimir o volume e o raio da esfera com o raio variando de 1 a 10 usando
a estrutura de repetição

18) Escreva um algoritmo para ler 2 valores (se o segundo valor informado for ZERO, deve ser lido
um novo valor, ou seja, para o segundo valor não pode ser aceito o zero – exibindo uma
mensagem de erro) e imprimir o resultado da divisão do primeiro pelo segundo.

19) Faça um algoritmo que leia a altura de 10 pessoas e imprima média destas alturas. Imprima
também quantas alturas maiores que 1.60 e quantas menores que 1.30.

20) Faça um algoritmo que leia os dados de cada empregado: nome, salário por dia e número de dias
trabalhados de uma firma de 10 empregados. Imprima o salário total a ser pago aos empregados e
a média dos salários.

21) Faça um algoritmo que leia a altura e o sexo de 100 pessoas e imprima:
- Quantos homens e mulheres foram medidas;
- Quantos homens acima de 1,70;
- A média das alturas das mulheres.

22) Codifique um algoritmo para determinar o maior número em N números diferentes dados.

23) Codifique um algoritmo para calcular e imprimir o menor dentre N valores lidos.
Pág.: 81/137

Prof. Daniel Oliveira

24) Faça um programa de que determinar quais números são primos entre os inteiros 1 e N. Aonde N
será informado pelo usuário.

25) Codificar um algoritmo que simule o jogo de adivinhação: o jogador 1 escolhe um número entre 1
e 10; o jogador 2 insere números na tentativa de acertar o número escolhido pelo jogador 1.
Quando ele acertar, o algoritmo deve informar que ele acertou o número escolhido pelo jogador 1
em x tentativas (quantidade de tentativas do jogador 2).

26) Supondo que a população de um país A seja da ordem de 98.000.000 de habitantes, com uma taxa
anual de crescimento de 3,5% e que um país B tenha uma população de
aproximadamente 200.000.000 habitantes com uma taxa anual de crescimento de 1,5%.
Escreva um algoritmo que calcule iterativamente, quantos anos serão necessários para que a
população do país A, ultrapasse ou iguale a população do país B, mantidas as taxas
de crescimento.

27) Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Dada a
massa inicial, em gramas, fazer um programa que determine o tempo necessário para que a massa
se torne menor que 0,5 grama. Escreva o massa inicial, a massa final e o tempo em horas, minutos
e segundos.

Pág.: 82/137

Prof. Daniel Oliveira

Arrays

Array ou arranjo é uma estrutura de dados que contém em seu interior um número fixo de valores e de mesmo
tipo. O tamanho de uma array é determinado no momento da sua criação e permanece constante após a sua
criação. São objetos que representam um agrupamento contínuo de posições de memória, sendo que o tipo dos
elementos contidos em uma array pode ser um tipo primitivo ou não - Figura 65.

Índice do
primeiro
elemento

0 1 2 3 4 5 6 7 8 9

Comprimento da Array é de 10 elementos

Figura 65 – Array com 10 elementos

Cada item dentro de uma array é chamado de elemento, e cada elemento de uma array é acessado através de
um índice. Sendo que o elemento inicial é indicado pelo índice zero – ver Figura 65.

1. int[] anArray;
2. //Alocando uma array com 10 elementos
3. anArray = new int[10];

4. //Inicializando a array
5. anArray[0] = 100;
6. anArray[1] = 200;
7. anArray[2] = 300;
8. anArray[3] = 400;
9. anArray[4] = 500;
10. anArray[5] = 600;
11. anArray[6] = 700;
12. anArray[7] = 800;
13. anArray[8] = 900;
14. anArray[9] = 1000;

Exemplo 42 - Exemplo de criação e inicialização de uma array

No Exemplo 42, temos um código que declara uma array (linha 1) , na linha 3 temos a alocação da array e a
partir da linha 5 a 14 temos o código aonde inserimos os elementos nas posições indicadas pelos índices.

É possível perceber que para declarar uma array é no formato: tipo[] – o conjunto “[]” indica que estamos
declarando uma array. Cada conjunto deste refere-se a uma dimensão da array. As arrays de apenas uma
dimensão têm também um nome especial: vetor.

Outros exemplos de declaração de arrays:

Pág.: 83/137

 boolean[] anArrayOfBooleans É possível também colocar o conjunto de colchetes na frente do nome da variável da array. 1000 }. 600. 500. int[] anArray = new int[10]. anArray[0] = 100. temos um loop do tipo for para percorrer uma array inicializando seus elementos.i++) { anArray[i] = i.length – esta propriedade especial da array retorna a quantidade de elementos dessa array. for(int i=0.  double[] anArrayOfDoubles.out.  long[] anArrayOfLongs. Prof. 200. 300. anArray[1] = 200.  float[] anArrayOfFloats.Formas de inicializar uma array Intrinsicamente o uso de array está vinculado ao uso de estruturas de repetição para percorrer os elementos de uma array . Exemplo 43 .length. int[] anArray = new int[10]. char[] myArray = { 'a'. 400. for (int i = 0. temos outras formas de declarar e inicializar uma array.i<anArray. na declaração do loop for temos algo interessante: anArray. 900.Percorrendo uma array de char Pág. 700. No Exemplo 43. i++) { System.Exemplo 44. temos um código que declara e inicializa uma array de char e a percorre exibindo seus elementos na tela. int[] anArray2 = { 100. } Exemplo 45 .length.  short[] anArrayOfShorts. anArray[2] = 300. } Exemplo 44 . assim: int anArray[].: 84/137 . 800.Exemplo de acessar posições de uma arry por loop No exemplo anterior. i < myArray. 'c' }. Mas.println(myArray[i]). No Exemplo 45. Daniel Oliveira  byte[] anArrayOfBytes. 'b'.

Prof.Exemplo de uma rotina de ordenação de array  A rotina do exemplo anterior é aplicável em qualquer situação ou conjunto de números? Pág. j < nums. nums[i] = nums[min]. j++) { if (nums[j] < nums[min]) { min = j. Daniel Oliveira Abaixo temos outro exemplo.length. tmp = nums[i].round(Math.length.println(nums[i]).length. //indice do menor elemento //Busca o menor elemento d i-ésima posição até o fim da array for(int j = i. } } // realiza a troca entre os elementos double tmp.out. i < nums. for(int i = 0. } for(int i = 0.: 85/137 . i++) { nums[i] = Math. } for(int i = 0. } Exemplo 46 .length.random( ) * 100). i < nums. i < nums. i++) { int min = i. nums[min] = tmp. que utilizando um algoritmo simples ordena uma array com 10 elementos aleatórios: double[ ] nums = new double[10]. i++){ System.

30. Calcular o valor médio . Caso o elemento não exista no vetor informe ao usuário.: 86/137 . Em seguida conte quantos elementos são negativos e informes ao usuário. imprimi-la na ordem inversa à da leitura. 6) Leia um vetor de 10 elementos e em seguida ache a posição do elemento m (dado pelo usuário) no vetor. o segundo com o penúltimo. calcule e mostre a quantidade de números negativos e a soma dos números positivos desse vetor 5) Solicite ao usuário n números inteiros (onde n também é fornecido pelo usuário). etc. calcule e mostre: a. Para finalizar será digitado zero na altura. até o décimo com o décimo primeiro. o maior e a média dos valores informados. 11) Dada uma seqüência de n números. guarde os em um vetor e em seguida imprima-os na tela. troque o primeiro elemento com o último. Imprima as duas maiores alturas. 8) Leia um vetor com 20 elementos. seu programa deverá exibir o menor. elemento a elemento. A seguir. b. d. Caso o elemento não exista no vetor informe ao usuário.60 e quantas menores que 1. peça para que ele digite um n menor. guarde-os em um vetor e em seguida imprima-os na tela. a menor. c. Imprima também quantas alturas maiores que 1. Quais os números pares.Prof. 2) Leia um vetor de 10 elementos e em seguida ache a posição do elemento de valor m (dado pelo usuário) no vetor. em um terceiro vetor. Quais os números ímpares. Pág. 10) Faça um algoritmo que leia a altura de moças inscritas em um concurso de beleza. Após obter os N números. Caso o n fornecido pelo usuário seja maior que o tamanho máximo do vetor. utilizando a seguinte fórmula:  x  x  N 1 2  i N 1 Seguir os seguintes passos: 1. 9) Faça um programa que obtenha N números (podem ser inteiros ou não). A quantidade de números pares. 12) Faça um algoritmo que leia a altura de 1000 pessoas e imprima a maior. 13) Fazer um algoritmo para ler 20 números reais e calcular e imprimir o desvio-padrão e a variância. 3) Faça um programa que carregue um vetor de seis elementos numéricos inteiros. 4) Faça um programa que carregue um vetor com dez números reais. a média destas alturas. Daniel Oliveira Exercícios 1) Solicite ao usuário 5 números inteiros. A quantidade de números ímpares. 7) Solicite ao usuário dois vetores de n números (n também é fornecido pelo usuário) e em seguida calcule a soma dos vetores.

calcule o seu produto escalar.21.377. Daniel Oliveira 2. Considerando cada vetor como sendo um conjunto. calcula-se a diferença entre xi e o valor médio . Calcula-se o quadrado dessa diferença. se I = 50. se I <> 1 e I <> 50. Para cada valor xi ... Para cada elemento desse vetor deverá ser cálculo do fatorial e o resultado deverá ser armazenado em outro vetor. que seja a intersecção entre os dois primeiros. 17) Vetor suavizado é uma técnica utilizada para cálculos de configuração de cores. Exemplo de valores da série: {1.89.1. Após isto imprima o conteúdo do vetor na tela.2. 6.233. Ler os valores do vetor V e calcular e imprimir o vetor suavizado S. Esta quantidade é a variância.34.8.: 87/137 . 16) Desenvolva um programa em Java que receba do usuário n números inteiros positivos (aonde n será informado pelo usuário) e os armazene em um vetor. que seja a união dos dois primeiros. 4. conforme regra abaixo. (O produto escalar de dois vetores v1 e v2 é dado por: produto = v1[0]*v2[0]+ v1[1]*v2[1]+. para 50 elementos reais.144.crie um terceiro vetor. Encontra-se a soma das diferenças dos quadrados. 14) Dados dois vetores de n elementos. 15) Leia 2 vetores com 10 elementos cada. Divide-se este resultado pelo número de valores (N).3..13. Depois imprima cada um dos elementos de cada vetor. e um quarto. +v1[n]*v2[n]). S[I]=(V[I-1]+V[I]+V[I+1])/3. S[I]=(V[I-1]+V[I])/2. S[I]=(V[I]+V[I+1])/2. 3. se I = 1. Este novo valor é o desvio-padrão. Tome a raiz quadrada deste resultado. 5..55.Prof.} Pág.. 18) Construa um algoritmo que preencha um vetor com N elementos (aonde N será informado pelo usuário) utilizando a série de Fibonacci.5.

Muitas vezes. Utiliza-se um par de colchetes ([]) para cada dimensão a ser incluída na matriz...: 88/137 . Imagine que cada elemento de um vetor seja outro vetor. Por exemplo: int minhaMatriz [][] = new int [3][5]. mas. Arranjo Multi 0 0 1 .. N N Figura 66 . arranjos com mais de uma dimensão são na realidade arranjos de arranjos – ver Figura 66. também denominados de vetores. N 1 0 1 . e. eles podem ter estruturas bem diferenciadas.Prof. Mas. 0 1 . Pág.... assim como os vetores. N .Representação de uma matriz A declaração de uma matriz utiliza também os colchetes. Ou seja. Na Figura 67. e cada elemento desse vetor seja também outro vetor. assim por diante. temos a representação uma array com 3 linhas (vetor de três de elementos) e 5 colunas (cada elemento do vetor de 3 elementos é um arranjo com cinco elementos).. Figura 67 . Daniel Oliveira Arrays multidimensionais Até agora vimos arrays de apenas uma única dimensão. podemos ter os chamados arranjos de várias dimensões. arranjos multidimensionais são associados a matrizes.Representação de uma array multidimensional Quando o arranjo armazenado em cada elemento tem a mesma quantidade de elementos podemos ter uma estrutura que é associada a uma matriz..

Daniel Oliveira Na linha de código acima. Pelo fato de arrays multidimensionais sejam arranjos de arranjos.4}}.Prof. Os valores do inicializados são agrupados por linha entre chaves. • Cria um array de inleiros b com dois elementos (determinados pelo número de inicializadores de array aninhados) que representam as linhas do array bidimensíonal. podemos ter estruturas bem mais flexíveis: int[][] b = {{1.2}.{3.{3.4. Sendo que teremos um arranjo de 3 elementos (linhas) e cada arranjo alocado nesse arranjo será de 5 elementos (colunas).Acessando posições dentro de um arranjo bidimensional Como os arrays unidimensionais. os arrays multidimensionais podem ser inicializados na sua declaração: int[][] Matriz = {{1. O compilador conta o número de inicializadores de array aninhados (representado por conjuntos de chaves dentro das chaves externas) na declaração de array para determinar o número de linhas no array Matriz.: 89/137 . temos o seguinte: uma array de inteiros (todos os elementos de todos arranjos nessa array deverão ser inteiros). • O array da linha O (zero) é um array unidimensional com dois elementos (1 e 2) • E o array da linha 1 é um array unidimensional com três elementos (3. • Cada elemento de b é uma referência a um array unidimensional de variáveis int.5}}.4 e 5) Pág.2}. Cada elemento no array a é identificado por uma expressão de acesso ao array da forma: a [ linha ] [coluna]: Figura 68 .

temos um código mostrando uma forma de percorrer agora estes arranjos. Figura 69 .Percorrendo uma array multidimensional Pág.: 90/137 . são arranjos de arranjos. Daniel Oliveira No Figura 69.Prof. Reparem que para cada “dimensão” extra temos uma estrutura de repetição aninhada dentro de outra – mas uma vez.

Da diagonal principal d. 6) Faça um algoritmo que gere a seguinte matriz: 111111 122221 123321 123321 122221 111111 7) Faça um algoritmo que leia uma matriz 4x9 de inteiros. Da coluna 2 de M c. exiba o resultado. quais os elementos de A que estão repetidos e quantas vezes cada um está repetido.6) e um valor A e multiplica a matriz M pelo valor A. Deverá ser exibido as duas matrizes originais. 10) Escrever um algoritmo que lê uma matriz M(12. Daniel Oliveira Exercícios 1) Elaborar um algoritmo que lê uma matriz M(6. Escreva a matriz assim modificada. multiplique cada linha pelo elemento da diagonal principal daquela linha. Da linha 4 de M b.13) e divida todos os 13 elementos de cada uma das 12 linhas de M pelo maior elemento em módulo daquela linha. a matriz de soma e a matriz de multiplicação. Troque. Escrever a matriz lida e a modificada.: 91/137 . Escrever cada elemento repetido com uma mensagem dizendo que o elemento aparece X vezes em A. a linha 5 com a coluna 10. A seguir.Prof. 11) Faça um programa em java tenha a saída como da imagem: Pág. 3) Escrever um algoritmo que lê uma matriz A(5. Mostre a matriz após as multiplicações. 8) Faça um algoritmo que leia uma matriz 50x50 de números reais.5) e a escreva. a linha 2 com a linha 8 b. calcule e mostre a soma das linhas pares da matriz. a seguir: a. 9) Faça um programa que leia duas matrizes 3x3 e realize a soma da duas e a multiplicação das mesmas. 5) Faça um algoritmo que calcule a média dos elementos da diagonal principal de uma matriz 10 X 10 de inteiros. a coluna 4 com a coluna 10 c.5) e calcula as somas: a. 2) Escreva um algoritmo que lê uma matriz M(5. Verifique. a seguir.10) e a escreve. De todos os elementos da matriz M Escrever essas somas e a matriz. 4) Escrever um algoritmo que lê uma matriz M(10.

Como a figura: Pág.: 92/137 . Daniel Oliveira 12) Suponha que você tenha uma array como da imagem abaixo: Faça um programa em Java que irá produzir a transposição da mesma.Prof.

Por exemplo: Os jogadores. a cada iteração de forma alternada o jogador deverá indicar a posição a ser preenchida pelo “X” ou “O”.: 93/137 . Daniel Oliveira 13) Faça um programa em Java que permita que dois usuários jogue o Jogo da Velha. sucessivamente até termos um vencedor. Exemplo. de sequência de ações: Pág. E.Prof. de maneira. assim. alternada deverá informar um número de 1 a 9 (representando cada posição da array).

” Os algoritmos podem ser agrupados em: Módulos. temos a principal estratégia da divisão das tarefas para que cada parte menor possa ser resolvida.Chamada de subprogramas Um subprograma especial é a função. Vamos olhar um código já conhecido (Figura 71).Prof. Após seu término. “Subprograma é um programa que auxilia o programa principal através da realização de uma determinada sub-tarefa. rotinas. Esta tarefa da “divisão” de algoritmos mais complexos em algoritmos menores que irão resolver o problema é denominada de sub-algoritmos. Daniel Oliveira Modularização A medida que evoluímos no estudo dos algoritmos e no desenvolvimento programas iremos nos deparar com problemas mais complexos. Deve-se compreender que a chamada de um subprograma simplesmente gera um desvio temporário no fluxo de execução. Uma função executa alguma tarefa. Ao se utilizar subprogramas temos como vantagens:  Redução de complexidade  Identificação de erros facilitada  Reutilização  Manutenção mais simples  Expansibilidade Os Subprogramas são chamados dentro do corpo do programa principal como se fossem comandos. na imagem temos uma linha em destaque. a execução continua a partir do ponto onde foi chamado. A forma como construímos nossos algoritmos até agora não permite que seja construído soluções mais complexas e de fácil manutenção e expansão. É um código que não é nenhuma novidade para nós. Quando temos um problema complexo para resolver. podendo ou não retornar algum valor. Pág. Inicio SubPrograma 2 SubPrograma 1 Processo Principal Fim Figura 70 . sub-rotina ou subprogramas.: 94/137 . Em Java as funções ou procedimentos são denominados de métodos (nas próximas unidades vamos entender o porquê de tal nomenclatura). Agora podemos chamar o print por método print.

mas neste momento daremos ênfase a apenas alguns deles:  public: Indica um método que pode ser acessado por qualquer classe (mais uma vez este termo surge. Agora vamos analisar outra porção do nosso código (Figura 72). assim como as linguagens de programa c-like. Existem vários modificadores. Retorna o valor da potência de uma base (primeiro valor passado ao método) a um expoente (segundo valor passado para o método). mais a frente vamos estuda-lo) que enxergue aquele no qual o método foi escrito.Exemplo de função com retorno em Java Nesse outro exemplo. Em resumo. não é necessário criar um objeto para invocá-lo.pow). Definindo uma função ou método Java. Pág. tem um formato bem particular para definir suas funções e métodos: <modificador> <retorno> <nome> (<argumentos>){ } <modificador>: caracteriza o método quanto à visibilidade e qualidade. Este método retorna algo.  static: Indica que o método pode ser invocado a partir do nome da classe. ou seja.Analisando funções em Java O método print é o exemplo de função que não retoma nenhum tipo de valor e sim recebe um valor para executar a sua rotina (depois vamos entender esta passagem de valores para as rotinas). Figura 72 . significa que o método se comporta como do tipo protected. Por exemplo. Daniel Oliveira Figura 71 .: 95/137 .  protected: Indica um método que pode ser acessado apenas por classes pertencentes ao mesmo pacote ou por subclasses  private: Indica que o método só pode ser invocado dentro da própria classe onde ele foi escrito. um método pode receber um conjunto de valores (chamados de parâmetros) e pode retornar um valor. vemos o método pow do pacote Math (logo vamos chamá-lo por outro nome). Se não houver modificador. os métodos da classe Math (Math.Prof.

O escopo de uma variável indica até aonde uma variável é “visível” ou acessível. nenhum valor).println("A+B=" + (a+b)).print("Informe A:").nextInt().. nesse caso o tipo de retorno é void. <argumentos>: indica a lista de argumentos que serão passados como parâmetros para o método.print("Informe B:"). em uma classe pode haver mais de um método com o mesmo nome. Inclusive nada.indica qual tipo de retorno da função. a ordem ou a quantidade dos parâmetros sejam diferentes. Veremos isso com mais detalhes mais à frente. } Notem que no método principal Main. <nome>: Deve obedecer às mesmas regras que os identificadores de variáveis. string.nextInt(). Observe que.out. que os tipos. System.out.. Como ela não recebe nenhum parâmetro (ou seja. se uma função ou método necessitar de um valor externos a ela para realizar sua tarefa? A solução para esta questão é passarmos este(s) valor(es) para a função através de seus parâmetros. chamamos a função somar. .out. mesmo que função receba nenhum parâmetro. qualquer tipo de dado (mesmo aqueles que iremos criar!). int a = s. Isto no Java é obrigatório. simplesmente a chamados pelo seu nome seguida de um “()”. podendo ser int. Eles devem obedecer a seguinte sintaxe: <tipo> par1. System.. Daniel Oliveira <retorno> . para isso. Funções e parâmetros Precisamos recordar um conceito importante do início desse material – escopo. System. } public static void Somar(){ Scanner s = new Scanner(System. float. Vamos rever o exemplo anterior: Pág. Os parâmetros são variáveis ou valores que podem ser transferidos do método chamador para o método chamado. <tipo> parn Exemplo de uma função sem parâmetros Vamos analisar o código abaixo: public static void main(String[] args) { Somar(). bastando. Eles são responsáveis pela comunicação entre os métodos.Prof.: 96/137 . double. <tipo> par2.in). char. int b = s. Então.

Quando a passagem é feita por valor.Prof.Passagem por referência Pág. Assim. mesmo que o parâmetro sofra alterações dentro do código da função. Veja o exemplo: Figura 75 . Figura 74 .Passagem por valor No entanto. quando fazemos uma passagem por referência. Daniel Oliveira Figura 73 . o valor é copiado do método chamador para o parâmetro da função.Exemplo de passagem de parâmetros Existem duas formas para se estabelecer esta comunicação ou passagem de parâmetros: passagem por valor ou referência.: 97/137 . não é o valor que é copiado para o parâmetro e sim o endereço de memória do código chamador para o chamado (já conversamos sobre isto antes!). o valor original permanece intacto.

: 98/137 . i<=num. } Por exemplo. i<num. soma=0. Ao ser encontrado um comando return – a função para seu processamento e retorna ao código chamador! Mais um exemplo: função que receba três números inteiros: a. b e c. } return soma. onde a é maior que 1. uma função que verifica se um número é primo ou não: static boolean primo (int num){ for (int i=2. i++){ if (num%i==0) return false. } Nesse caso a chamada à função muda um pouco: public static void main(String[] args) { int f = fatorial(5). Bastando para isto declararmos as funções indicando o tipo de seu retorno: static int fatorial (int num){ int i. int c){ int i. } Pág. i <= c. Assim. fat = 1. for (i=b. e sua imediata finalização. independentemente da posição dentro da função. Daniel Oliveira Este “fenômeno” não ocorrerá apenas com vetores. } return true.Prof. } O que é importante ressaltar nesse ultimo exemplo é o seguinte: retorno da função. A função deve retornar a soma de todos os inteiros entre b e c que sejam divisíveis por a (inclusive b e c) para o programa principal. for (i=1. static int somaDiv (int a. i++){ if ((i % a) == 0) soma += i. int b. também irá ocorrer com outros tipos de dados que iremos trabalhar mais à frente! Funções retornando valores As funções podem retornar valores (desde valores primitivos até objetos complexos). return fat. i++) fat = fat * i. depende do comando return.

Esqueça a questão dos anos bissextos e considere sempre que um mês possui 30 dias. 6.7*h)-58 b. Cada ponto é um par ordenado (x. E para cada aluno o seu programa deverá perguntar o Nome. meses e anos.7 5.3 e 4). Faça uma função que receba a data de nascimento de uma pessoa (Dia. Desenvolva um programa que pergunte ao usuário a quantidade de alunos. Um usuário deseja um programa onde possa escolher que tipo de média deseja calcular a partir de 3 notas. construa uma função que calcule seu peso ideal.1*h)-44. E. Entrar com o dia e o mês de uma data e informar quantos dias se passaram desde o início do ano. Exercícios (Nível 2) 1. Deve-se utilizar funções para esta tarefa. Nota 2. Pág. 2. 4. Construa um programa para calcular a distância entre dois pontos do plano cartesiano. a opção escolhida pelo usuário e calcule a média: aritmética ou ponderada (com pesos 3. Nota 1. 3. Estes valores deverão ser armazenados em vetores. utilizando as seguintes fórmulas: a. Mês e Ano) e informe a idade da pessoa em Dias. C) e passe para uma função que calcule a seguinte expressão: 𝑅+𝑆 𝐷= 2 . Para mulheres: (62. Para homens: (72. B. Elabore uma função que dada à idade de um nadador classifica-o em uma das seguintes categorias: Infantil A = 5 . Daniel Oliveira Exercícios (Nível 1) 1.y). Faça um algoritmo que leia as notas. Escreva um algoritmo que leia três números inteiros e positivos (A. Desenvolva um programa aonde o usuário irá informar duas notas e a sua rotina irá retornar a média das duas. Faça um software para calcular quantas ferraduras são necessárias para equipar todos os cavalos comprados para um haras. 5.7 anos Infantil B = 8-10 anos Juvenil A = 11-13 anos Juvenil B = 14-17 anos Adulto = maiores de 18 anos 4.Prof. 𝑎𝑜𝑛𝑑𝑒 𝑅 = (𝐴 + 𝐵)2 𝑒 𝑆 = (𝐵 + 𝐶)2 2.: 99/137 . ao final o programa exiba a relação de nomes com notas e respectivas médias. Tendo como dados de entrada a altura e o sexo de uma pessoa (M masculino e F feminino). 7. Alterar a rotina de cálculo de fatorial para a construção de uma função que receba um inteiro positivo e retorne seu fatorial 3. Reescrever o programa de conversão de Celsius para Fahrenheit para que a rotina de conversão seja uma função chamada pelo processo principal.

At = b e h     g h i   c f i  3. utilizando métodos. Este programa deve ser modularizado. Faça um programa.: 100/137 . por extenso. Faça um programa que leia o salário e o cargo de um funcionário e calcule o novo salário. Pág. Calcule e imprima o mês. que leia uma matriz (LxC) de inteiros. Se o cargo do funcionário não estiver na tabela. deve haver um método menu (mostra o menu na tela e retorna à opção do usuário) e um método para cada tipo de transformação (faz a transformação e apresenta na tela o resultado). ele deverá. utilizando métodos. ou meses. ou seja. utilizando métodos.Prof. Mostre o salário antigo. o maior elemento de cada uma das linhas e o menor elemento de cada uma das colunas. armazenando o resultado das somas em um vetor. a matriz e os dois vetores. respectivamente. Faça um programa. multiplique cada elemento da matriz pela soma da linha e mostre a matriz resultante. conforme a tabela abaixo. o novo salário e a diferença. Daniel Oliveira 6. Implemente um programa. que carregue uma matriz 7X7 de números inteiros e crie dois vetores de sete posições cada um e que contenham. no final. 5. receber 40% de aumento. A seguir. minutos e segundos e para transformar hora. Código Cargo Reajuste 101 Gerente 10% 102 Engenheiro 20% 103 Técnico 20% Exercícios (Nível 3) 1. minutos e segundos em segundos. Este programa deverá mostrar a matriz no final bem como sua transposta: a b c a d g  A= d e f  . logo. 2. então. que carregue uma matriz 10X20 com números inteiros e some cada uma das linhas. Uma empresa concederá um aumento de salário aos seus funcionários. Faça um programa para transformar segundos em hora. Faça um programa. Escreva. 4. variável de acordo com o cargo. utilizando métodos. que deverá carregar uma matriz 2X12 que representa a temperatura máxima e a mínima na Grande Vitória durante cada mês do ano de 2015.

na planta temos as definições de como será a casa. Este modelo ou padrão. uma descrição. Veja um breve histórico desse modelo:  1967: Simula . Devido as características do modelo OO muito código extra era gerado pelo compilador para poder implementar as funcionalidades do paradigma. Ano de Edição e etc.Prof. Mas. Uma classe nada mais é do que um modelo. Quando construímos a casa a partir desse modelo temos então um objeto. nos primeiros nos e até década. vem desde da década de 70 do século XX. o modelo de programação procedural (aquele voltado apenas ao desenvolvimento de códigos baseados em chamadas a procedimentos ou funções) dominava. Assim. nem sempre foi assim. Ou seja: “Um objeto é uma instância de uma classe” A classe define a estrutura de um objeto. Editora.: 101/137 . com o avanço da capacidade computacional e principalmente das técnicas de compilação e IDEs o modelo OO começou a ser popularizado.introduz os primeiros conceitos de OO  1972: Smalltalk  1980: C++ linguagem híbrida. E. Esta visão representativa do modelo de um objeto se chama classe. Autores. não surgiu nos últimos anos. as linguagens orientadas à objetos eram associadas a programas pesados e de baixa performance. Define quais informações serão armazenadas nesse objeto. O modelo de orientação a objetos tem como base a construção de programas baseando-se em algo muito simples e que nós interagimos no dia a dia: Objetos! Vamos imaginar que iremos construir um programa para controle de bibliotecas. Pág. derivada da linguagem C  1983: Ada criada para uso militar nos EUA  1984: Eilffel primeiras características formais de OO  1986: Object pascal  1995: JAVA . Quando o conceito da orientação à objetos surgi. define quais ações este objeto poderá realizar. como: Titulo. através de uma classe poderemos ter vários objetos sendo instanciados ou construídos. e.Linguagem puramente orientada a objetos  1995: Várias linguagens agregando conceitos de OO No parágrafo anterior dá para se notar a importância do Java no processo de popularização desse modelo. Gosto de associar classes a uma planta de uma casa. o maior ponto de expansão do modelo foi a criação do Java. Após a introdução do C++. sim. Mas. Daniel Oliveira Orientação a Objetos O paradigma de orientação a objetos não é algo novo. daí vem o significado da palavra paradigma. domina quase totalmente todas as linguagens de programação modernas. temos as características da casa. a primeira ação é apontar quais seriam os principais entes envolvidos nesse sistema? Livros! Um livro tem um conjunto de características que o definem e o descreve.

. Sendo assim qualquer porção do nosso código fonte pode referenciar a nossa classe. Inicialmente teremos dois tipos de modificadores de acesso:  public – Indicando que a nossa classe ou qualquer membro pertencente a classe é de acesso público. Como vimos anteriormente a classe é uma estrutura que irá combinas dados e funções. logo: <CLASSE> <NOME VARIÁVEL>.. logo. define-se um novo tipo de dado. Então. <NOME VARIÁVEL> = new <CLASSE>(). Daniel Oliveira “Uma classe é o agrupamento lógico de dados e funções em um pacote” Esta definição é também muito utilizada para classes. se faz necessário a alocação de um espaço de memória que possa comportar esta estrutura (Já vimos outros tipos de dados que precisam da mesma coisa! Quais?). Ele executa o construtor da classe. quando definimos uma classe. mais importante ainda. A tarefa de alocar este espaço de memória e informar para o nosso programa em qual endereço de memória o nosso objeto estará localizado (lembrem-se. Nós iremos abordar este assunto um pouco mais a frente. Ao se declarar uma variável do tipo de uma classe não significa que já podemos utilizar a variável.Prof. Um modificador de acesso diz ao compilador como será a visibilidade e o acesso a classe por outras partes do nosso código fonte (vamos utilizar muito estes modificadores mais a frente). O operador new é extrema importância nesse processo. Ele é responsável pela determinação de quanto de memória será necessário para conter o objeto. } Para se declarar uma classe em Java. ao definirmos uma classe estamos também definindo um novo tipo de dado. Mas. ao se definir uma classe. o processo ainda não está acabado.  private – Indica que o membro da classe só pode ser acessado dentro da classe. é o operador NEW. Poderemos declarar uma variável do tipo da classe que criamos.: 102/137 . Este modificador de acesso implementa um dos principais conceitos do OO: encapsulamento. E. utilizamos primeiramente um modificador de acesso. uma vez instanciada a classe passamos a ter objetos!). Ou seja. Pág. Um outro detalhe importante. interagir com o sistema Operacional e solicitar esta quantidade de memória. Declarando uma classe Como podemos declarar uma classe em Java? <modificador> class <nome>{ . é que o operador new executa uma função muito especial que pertence à classe. estamos definindo uma estrutura heterogênea que irá combinar dados e funções.

campos ou métodos – cada um desses membros será abordado mais à frente. } Após o modificador de acesso temos a palavra-chave <class> esta palavra chave determinar para a nós o tipo de estrutura que será construída. O nome da classe segue o mesmo padrão e regras de nomeação das variáveis. <modificador> class <nome>{ <modificador> <tipo> <atributo1>. Em seguida precisamos informar o nome da classe. Uma classe pode conter atributos. uma classe..: 103/137 .... . Figura 76 . <modificador> <tipo> <atributon>.Prof.Criando uma nova classe no Eclipse Figura 77 . Normalmente temos por padrão sempre no utilizar termos substantivos ou substantivos. Daniel Oliveira Tudo que é definido dentro da classe é chamado de membro da classe.Tela de configuração para criação de uma nova classe Pág. .

Ainda.: 104/137 . temos então o esqueleto da nossa classe pronta para ser codificada Figura 78 . Note que não colocamos nenhum modificador de acesso para estes membros. as classes também são chamadas de tipos heterogêneos.Classe Livro com seus membros Na figura anterior temos o código da nossa classe livro com alguns membros.Classe Livro Todo o código que for inserido entre o conjunto de {} de chaves. será pertence à classe. no código fonte de exemplo vemos como acessar os membros de uma classe.Usando a classe Livro Notem como a definição de classe cria um novo tipo de dados. Sempre se faz o acesso aos membros de uma classe pelo nome da variável (objeto) da classe e ponto e o nome do membro da classe. campos ou fields. Nesse caso. Vamos agora criar alguns membros para esta classe: Figura 79 . Para isto utilizamos o chamado operador ponto “.Prof.”. Como então utilizar esta classe? Figura 80 . Pág. Como indicado na Figura 78. Daniel Oliveira Após uso das telas Figura 76 e Figura 77. Por isso.

Por exemplo. virar à Direita. estados.Uso do operador ponto Os campos que compõe as caracteristicas da classe Livro são denominados de atributos. Métodos nada mais são do que funções. na Figura 82. e receber ou não parâmetros.Método da Classe Livro Pág. na vida. Bem como. Prof. ” Temos aqui outra definição muito importante para objetos. temos os atributos para definir as caracteristicas dos nossos objetos no código. Como os valores dos atributos podem mudar o seu estado também muda. uma classe Carro que irá representar um carro real em um simulador. Estado de um objeto reflete os dados que estão armazenados em seus atributos. Daniel Oliveira Figura 81 . parar. os métodos podem retornar ou não valores.: 105/137 . Por exemplo. “Os valores dos atributos de um objeto definem o seu estado. como funções. temos valores que definem as caracteristicas de objetos. Esta parte dinâmica do objeto é realizada através de seus métodos. Sabemos que um carro pode acelerar. Funções pertencentes a classe e acessíveis através de seus objetos. Figura 82 . virar à Esquerda. Assim. Métodos Os objetos podem realizar ações.

população (ex.Desenvolva uma classe que represente uma conta bancária. 5. Um método que retorne o país com menor população no continente. Uma variável privada que deverá conter o saldo da conta b. d.886) e a sua dimensão em Km2 (ex. Um método que retorne o comprimento do circulo 4.049). Um método que retorne a área do circulo d. f. e. Crie um método que retorne todos os países com fronteira 6. Um método “CoordenadaX” que retorne a coordenada X d. Um método “VerificarSaldo” que retorne o valor do saldo da conta 2. Retornar o valor do contador. Um método que retorne a dimensão total do continente. A classe deve oferecer métodos que devem: a. Um método “Sacar” que receba um valor double.: 106/137 . h. Forneça os seguintes membros de classe: a. b. Um método “CoordenadaY” que retorne a coordenada Y e. cada país mantém uma lista de outros países com os quais ele faz fronteira. Escreva uma classe que represente um país.946. Além disso. Um método que receba o valor do raio do circulo c. Zerar. Duas variáveis privadas que serão as coordenadas X e Y do ponto b.: BRA). Forneça os membros de classe a seguir: a. c. este valor deverá ser acrescido ao saldo da conta c. a. Um método “Depositar” que receba um valor double. Um método “Distancia” que receba um método do tipo Ponto e retorne a distância entre o objeto Ponto atual e o objeto Ponto passado como parâmetro. esta classe deverá ter: a. Um método que retorne o país de menor dimensão territorial no continente. Um método que retorne o país de maior dimensão territorial no continente. Incrementar. Crie uma propriedade para cada uma citada no enunciado b.767.: 8. Um método que retorne o país com maior população no continente. Um continente possui um nome e é composto por um conjunto de países.515. Escreva em uma classe Contador. nome (ex. c. Um método que permita adicionar países aos continentes. Um método que retorne a razão territorial do maior país em relação ao menor país. este valor deverá ser retirado do saldo da conta d. Pág. Um método que retorne à densidade populacional do continente. b.: 193. Desenvolva uma classe que represente um Ponto. Um método “AtualizarCoordenadas” que receba dois valores double.Prof. g. 3. Daniel Oliveira Exercícios 1. esta classe deverá ter: a. Uma variável privada para conter o Raio do circulo b. Um método que retorne à população total do continente. Um país é representado através dos atributos: código ISO 3166-1 (ex. Escreva em Java uma classe Continente. i. que encapsule um valor usado para contagem de itens ou eventos. uma para a coordenada X e outro para a coordenada Y c. Escreva em Java uma classe que represente um círculo no plano cartesiano.: Brasil).

não são visíveis em outras classes.y. ele terá os valores de suas coordenadas inicializadas com 0 (zero). E. } Dessa forma quando fizermos uma classe para utilização de um objeto Ponto teremos a seguinte situação: public class TestaPonto{ public static void main (String[] args){ Ponto p1 = new Ponto(). definiremos somente os atributos da classe. } } Ao criar o objeto p1 da classe Ponto. Neste momento. public class Ponto { private double x. é construído com o objetivo de inicializar seus atributos (não é obrigatório também inicializar todos os atributos).Prof. como o próprio nome diz é executado na construção do objeto. y. dentro da classe TestaPonto é impossível fazer referência a p1.: 107/137 .x ou p1. Figura 83 – Construtor No exemplo abaixo está uma classe chamada Ponto que irá definir as coordenadas x e y de um ponto no plano. pois seus atributos (x e y) são privados à classe Ponto. Assim. Pág. Um construtor. Daniel Oliveira Construtores Este método. podemos tomar ações que irão inicializar o nosso objeto. que não é obrigatório. ou seja.

deve conter apenas o nome da classe e os valores que deverão ser utilizados para inicialização das variáveis. } Ponto (){ this. Com o construtor já escrito. Ponto (double a.x = a. Ponto (double a. this. Os atributos de classe (x e y) devem ser identificados pela palavra this para diferenciá-los de qualquer outra variável local. this. desde que os argumentos passados sejam de tipos (ou classes) diferentes.x = 0. ao ser declarado.Prof. public class TestaPonto{ public static void main (String[] args){ Ponto p1 = new Ponto(3. Então. Pág. terá um erro sintático.: 108/137 .0). a declaração Ponto p3 = new Ponto().y = b. É possível criar mais de um construtor. this. agora. Mas. Ponto p2 = new Ponto(0.y = 0. o JAVA escolherá qual deles irá utilizar. y. a classe Ponto com um construtor: public class Ponto { private double x. Ponto p3 = new Ponto().x = a. y. não é possível mais criar um objeto sem passar nenhum argumento. public class Ponto { private double x. } } Com a classe Ponto escrita como acima. é possível escrever outro construtor que permita este tipo de comando. } } Um construtor. -1). de acordo com a chamada: public class TestaPonto{ public static void main (String[] args){ Ponto p1 = new Ponto(3. Daniel Oliveira Redefinindo. double b){ this. -1). um objeto da classe Ponto poderá ser criado com a inicialização imediata de suas coordenadas. ainda assim. } } Com esses dois construtores.y = b. double b){ this.

f. pois está passando dois valores inteiros e ao criar o p2.add(f2). System. O Java provê um conjunto de objetos para coleções de elementos dinâmicos e com alta performance. public class CMain { public static void main(String[] args) { ArrayList list = new ArrayList(). ArrayList Arrays são estruturas de dados interessantes. f. ele utilizará o primeiro construtor. podemos colocar qualquer objeto Java nessa coleção.add("Oliveira").add("Daniel"). public class CMain { public static void main(String[] args) { ArrayList list = new ArrayList(). list. System.out.setCargo("Estagiário").ArrayList.setMatricula(2). muito limitadas frente as necessidades do dia a dia. import java. mas.util. Funcionario f = new Funcionario(). } } Reparem que o método add.i++){ Funcionario o = (Funcionario)list. } Pág.getNome()).util. f. Daniel Oliveira Ponto p2 = new Ponto().add(f). a API Collections.out. list.size().Prof.setCargo("Diretor"). } } Quando for criado p1.: 109/137 . f. list.setNome("Daniel"). recebe um object – ou seja.ArrayList. Funcionario f2 = new Funcionario(). f2. f.i<list. O primeiro objeto seria o ArrayList: import java.println(o.println(list).get(i).setNome("Pedro"). ele utilizará o segundo construtor.setMatricula(1). list. } } Podemos percorrer a ArrayList assim: for(int i=0.

out. Pág.println(fo. System. dentro do escopo desse material as ArrayList irão ser e grande valia.getNome()). Mas. Ainda temos outras estruturas de dados mais complexas. Daniel Oliveira Ou Então: for (Object o : list) { Funcionario fo = (Funcionario)o.: 110/137 . } Evidentemente o assunto sobre collections não se esgota aqui.Prof.

e) Altere o método do item 2 para exibir também a média do aluno. 5) Crie uma classe chamada Complexos para efetuar operações aritméticas com números complexos. Subtração (a parte real do número a direita é subtraído da parte real do número a esquerda e a mesma coisa ocorre com a parte imaginária). construa também os métodos: a) Construtor => criará o vetor com o tamanho passado por argumento b) getTamanho c) getPonto para retornar o ponto da posição passada d) insere no final do vetor e) remove do vetor f) pesquisa ponto no vetor 4) Faça o exercício anterior usando um ArrayList. c. mês e dia. O método do construtor deverá verificar se o mês e o dia informados estão dentro de intervalos corretos. 6) Crie uma classe Date: i. 2) Com a classe criada no item 1. E. mês e dia ii. Dica: anos bissextos são que: são múltiplos de 400 ou são múltiplos de 4 e não são de 100.: 111/137 . Daniel Oliveira Exercícios 1) Crie uma classe seguindo as orientações: a) Crie uma classe Aluno que contenha dois atributos String: Nome e Matricula b) Crie um método nessa classe que exiba o Nome e a matricula do aluno c) Crie um novo atributo será um vetor de 2 posições de double. Crie um construtor sem parâmetros para a classe iii. Os números complexos têm o formato: parteReal + parteImaginária*i. Deverá ser criada três variáveis privadas para conter o ano. crie um programa que receba as informações e notas de N alunos. Além disso. Soma de dois números complexos (as partes reais são somadas juntas e imaginárias são somadas juntas) b. Pág. Crie métodos públicos para: a. sendo N informado pelo usuário. aonde = √−1 i.Prof. exiba estas informações no console. Deverá ter um construtor que receba o ano. será chamado Notas d) Crie um método que calcule a média das notas e retorne este valor. Crie um construtor para que essa classe possa ser inicializada ii. contendo os seguintes atributos: vetor de pontos (seu tamanho será determinado no construtor) e um atributo inteiro chamado nElem que indicará quantos elementos já foram armazenados no vetor. 3) Fazer uma classe VetorDePontos. f) Crie um construtor para a classe que receba como parâmetro a quantidade de notas e instancie o vetor de Notas com esta quantidade de elementos. Deverá ser criado um método privado que irá testar se os dados passados formam uma data válida.

Daniel Oliveira iii.: 112/137 . Por exemplo: . Adapte os métodos do item anterior para suportar agora esta nova configuração..X.. que ao invés de ter um vetor de LED (como no item anterior) tenha uma matriz quadrada de objetos do tipo LED. a) Faça um teste para verificar o funcionamento do vale refeição. Incremento para o próximo ano 7) Crie uma classe para modelar os funcionários do banco.X 10) Crie uma classe Painel2D.X. Defina nessa classe um atributo para armazenar o valor do vale refeição diário pago aos funcionários.Prof. a cor e o estado do LED) f) Crie um método Display que deverá exibir uma string composta por “. e use este parâmetro para criar o vetor com esta quantidade. b) Defina um método para reajustar o vale refeição diário a partir de uma taxa. a) Crie uma variável interna da classe que contenha o nome da cor do LED b) Crie um método que retorne a cor do LED c) Crie um construtor que receba como parâmetro a cor do LED d) Crie um método que retorne o estado do LED e) Crie um método Ligar que muda o estado do LED para ligado f) Crie um método Desligar que muda o estado do LED para Desligado 9) Crie uma classe Painel aonde: a) Contenha um vetor de objetos LED (criado no item anterior) b) Um construtor que receba como parâmetro a quantidade de LEDs do painel. O método deverá verificar se o índice está dentro do vetor. Crie um método NextDay que incrementa o dia de um verificando: d. Esta classe deverá ter uma variável privada booleana indicando o estado led (ligado ou não ligado). c) Faça um teste para verificar o funcionamento do reajuste do vale refeição 8) Crie uma classe que represente um LED. c) Crie um método Ligar. Este método deverá receber o índice (a partir de zero) para qual LED será ligado. O construtor dessa classe deverá receber um número inteiro que será a quantidade de linhas e colunas da matriz quadrada.. que receba o índice do LED a ser desligado. Tendo a mesma validação do item anterior. Crie um método Display para retornar uma string com a Data no formato: dia / mês / ano iv. e) Crie um Método Listar que deverá listar todos os LEDs (exibindo o índice. caso contrário deverá ser exibida uma mensagem de erro) d) Crie um método Desligar. Pág. Incremento para o próximo mês e.” ou “X” – aonde o ponto irá indicar o LED apagado e o X indica o LED acesso.

Logo. deve-se seguir este padrão para manter o código coeso e de fácil compreensão para todos que utilizem o mesmo padrão. Repare que essas são as iniciais do comando Generate Getters and Setters. E.: 113/137 . Dica: Criar getters e setters pode parecer um processo trabalhoso. Os prefixos utilizados no nome dos métodos (set ou get) não é uma regra. Para isto basta omitir a declaração do método set do atributo. pois. e sim. podemos definir o seguinte: Pág. No eclipse. Reescrevendo a classe: Reparem agora como a classe NPC foi reescrita. O processo do encapsulamento é a técnica de se expor os atributos das classes através de métodos. não irá resolver o problema. Daniel Oliveira Encapsulamento Imagine que estamos modelando uma classe que represente um NPC (Non-Playable Caracter) em jogo: Figura 84 . Selecionando esta opção você poderá escolher para quais atributos criar os métodos e clicar em Finish. vamos envolver esses dados (esconde-los) e somente expô-los através de métodos. tanto a releitura desses valores. agora. mas. Isto não é correto ou prudente! Como resolver este problema? A resposta é uma característica muito importante do OO – Encapsulamento.Classe NPC com gets e sets sua utilização. Prof. independente de quem esteja codificando a compreensão do código é facilitada. Reparem que agora que os campos life e xp foram alterados para privados (esconde-os do mundo externo). quanto a atualização dos valores é via métodos. mas. deverá ser resultado de um cálculo qualquer. E. Apenas expor os atributos diretamente. existem. um padrão. Agora vamos imaginar que em algum momento precisamos alterar a forma de obter cálculo do Vida ou Experiência do NPC. Um método de leitura (get) e um método de escrita (set). Sendo assim. Pois. ou seja. você pode fazer isso de forma muito produtiva utilizando o atalho Control + 3 e depois digitando setters. várias ferramentas que esperam que o código esteja dentro de um padrão para a Figura 85 . um representando o nível de vida do NPC e um segundo que representa o grau de experiência do NPC. é algo muito importante para o OO. o XP do NPC é um atributo somente leitura. por ser um padrão de código muito comum. assim. Padrões.Classe NPC (inicial) Nessa classe temos dois atributos. Teremos que rever todo o código que utilize esses atributos e criar novos atributos que tenham agora os novos valores. Podemos. as principais IDEs do mercado possuem atalhos e templates que nos ajudam a fazer isso. assim.

Vamos utilizar o conceito de herança! Em OO. Esta nova classe terá todas os atributos e métodos da classe NPC mas irá implementar alguns novos atributos e métodos. herança é a técnica de que uma classe herda todas as características (atributos e métodos) de uma outra classe. Pág. Daniel Oliveira Tipo de acesso ao Atributo Set Get Leitura / Escrita Sim Sim Leitura Não Sim Escrita Sim Não Quadro 9 . se. Vamos.Classe NPC (Herança) Na Figura 86 .Prof. em situações aonde podemos identificar este conceito ocorrendo. A classe genérica (Generalização) é herdada pelas classes especializadas (Especialização). agora. temos implementado alguns métodos que irão caracterizar algumas ações comuns aos NPCs. Como poderemos realizar isto? Copiar a estrutura do código de uma classe na outra? E. apenas os membros não privados. Então.Tipos de acesso aos atributos Herança e polimorfismo Vamos criar alguns métodos básicos em nossa classe NPC.Classe NPC (Herança). Este processo é também chamado de Generalização / Especialização. imaginar que termos uma nova classe de NPCs. se alterarmos a classe básica ou base ou também chamada de superclasse. veja: Figura 86 .: 114/137 . for necessária uma atualização? Teremos que revisar todas as classes que “copiaram” a estrutura da NPC? Não será necessário realizada nada disso. a alteração passa a valer para as classes descendentes. Sendo assim. sempre iremos buscar colocar os atributos e métodos genéricos e de uso geral na classe base e apenas implementar nas classes filhas as suas especificidades (especializações).

Daniel Oliveira Na classe ao lado. Reparem que o método espera que seja passado um tipo NPC. caso seja necessário. basta para isso que você o declare. Algo importante. é afirmar que a classe Warrior em última instância é também uma classe NPC.Prof. Mas. Figura 88 . Logo.Classe Warrior Na Figura 87. Em amarelo. utilizando o Eclipse. podemos ver a herança.Delegate Constructor Pág. vemos o processo de herança ocorrendo.Warrior é um NPC A classe Warrior poderá ter o seu construtor. e. é possível evocar o construtor da classe base também (Delegate Constructor): Figura 90 .: 115/137 . Figura 87 . Reparem a palavra chave extends – é com esta palavra que indicamos ao Java que a classe Warrior irá herdar todos os membros não privados da classe NPC. indicado pelas setas vermelhas temos os métodos e atributos herdados da classe NPC. temos o método implementado apenas na classe filha.Herança da classe Warrior Figura 89 . poderemos passar como parâmetro para o método Seek um objeto no tipo Warrior.

o novo método é assumido como sendo uma sobrescrita.Diretiva @Override Polimorfismo Vamos imaginar agora que precisamos que nossos NPC não mais se movam para uma posição apenas.Sobrescrita de método Assim. em algumas situações eles devem se mover para uma posição e com uma certa aceleração. mas. No entanto. e.Prof. teremos uma nova versão do FLEE na classe filha.: 116/137 . se existir o método na classe base. o método é encarado como sendo um novo método. podemos marcar os métodos que são sobrescritos nas classes filhas com o diretiva @Override. assim: Figura 91 . Daniel Oliveira Override Existem situações que iremos precisar ter uma versão sobrescrita de um método da classe pai na classe filha. Mas. Vamos criar um método move2 ? Certamente que não! Pág. O comportamento padrão é de caso não exista o método na classe base. esta diretiva diz para o compilador não compilar o código caso não exista o método a ser sobrescrito na classe base. pode existir situações que queremos ainda chamar o método da classe pai.Sobrescrita como complemento de um método base Opcionalmente. adicionar mais alguma coisa na classe filha: Figura 92 . Figura 93 .

Prof. o código que utiliza a versão antiga continua funcionando e o código que utiliza a nova versão irá simplesmente utilizá-la. Daniel Oliveira Para isto vamos utilizar o princípio do polimorfismo. Assim. poli – várias / morfo – formas – ou seja. vamos criar várias versões do mesmo método. Figura 94 – Polimorfismo Figura 95 .: 117/137 .Referência aos métodos polimorfos Pág.

Crie uma classe derivada CalculadoraCientifica que. Crie uma classe Figura. 5. Crie uma classe Painel que deverá conter um array de 4x4 elementos do tipo LED. baseados na medida x. De acordo com linha e coluna informados e o booleano passado o LED naquela posição deverá ser ligado ou não. Esta classe deverá ter dois métodos: Um método que irá ligar a lâmpada e outro método para desligar a lâmpada – ambos os métodos deverão alterar o valor da variável (privada) que controla o estado da lâmpada 6. ainda. String Nome e Sexo Sexo. Crie uma classe Animal. alta) 7. Heptagono e Octogono. moderada. que herda de Animal (criado como no item acima) e que possui o método Mamar(). 2. 3. Crie um construtor para fornecer o valor para esse campo. Crie dois métodos CalcularArea() e CalcularPerimetro() que (nas classes derivadas) retornarão os valores da área e do perímetro de uma figura regular. Comer() e Dormir() e as propriedades int Codigo. Dormir()) e uma propriedade (Nome). Esta classe deverá ter um método receba dois inteiros (linha e coluna) e um booleano. Quadrado. as classes Morcego (que possui o método Voar()) e Baleia (que possui o método Nadar()).Prof. Crie. Esta classe filha deverá ser chamada de Led. Desenvolva uma classe Lampada. derivadas de Mamifero. Crie uma classe Calculadora que faça as quatro operações básicas (soma. Circulo. Pentagono. Comer(). Esta array deverá ser exposta via uma propriedade e deverá ser criada e instanciada no contructor da classe. Pág. com um campo double x (privado). 4. Crie uma classe Pessoa que possui os métodos Acordar(). Crie as classes derivadas Equilatero. além das operações básicas. Crie uma classe filha da classe Lampada criada no exercício anterior. Hexagono. com três métodos (Acordar(). Sobrescreva o método ToString() de Figura. Crie duas classes (Homem e Mulher) que herdam de Pessoa. Daniel Oliveira Exercícios 1. Esta classe deverá ter uma propriedade booleana que irá indicar se a lâmpada (esta propriedade deverá ser somente leitura). Esta nova classe deverá ter uma propriedade indicando qual a sua cor e qual a intensidade em que está emitindo a luz (fraca. subtração. multiplicação e divisão). faça extração de raízes. Crie uma classe Mamifero.: 118/137 .

Classe abstrata Figura 97 .Métodos abstratos Com os métodos abstratos impomos a implementação dos mesmos nas classes filhas. Esta palavra chave marca a classe como não concreta ou abstrata public abstract class NPC { } Figura 96 .Prof.: 119/137 . Não basta apenas documentar este fato e sim é necessário o uso de alguma funcionalidade que não permita que uma classe seja concretizada ou instanciada. usamos ela como um modelo ou template para a construção das classes filhas. esta restrição não existe mais.Não é possível instanciar uma classe abstrata Apesar de não se pode instanciar uma classe abstrata. E. os desenvolvedores utilizando apenas as classes warrior e orc. Ressaltando que até o Java 8. Assim. public abstract double XP(). podemos utilizar os chamados métodos abstratos. public abstract class NPC { public abstract void Mover(). dando uma estrutura melhor. Em OO temos a palavra chave abstract. Esses métodos abstratos deverão ser implementados nas classes filhas. Dentro do nosso projeto ambas as classes são filhas da classe NPC. Obrigando assim. Daniel Oliveira Classes Abstratas e Interfaces Vamos imagina a seguinte situação. ao se desenvolver um jogo deve-se ter duas classes de NPCs: warrior e orc. não queremos que hipótese nenhuma a classe NPC seja instanciada ou concretizada. classes abstratas não poderiam ter métodos concretos. Pág. public abstract void Flee(). } Figura 98 .

medida = Medida.: 120/137 . public double getMedida(){ return medida.pow(getMedida().Classe Circulo Nas duas classes anteriores vemos uma estrutura muito semelhante.PI*Math. public class Quadrado { private double medida. Podemos implementar um método que receba cada uma das classes e então calcular sua área: Pág. Daniel Oliveira Interfaces Agora vamos imaginar que estamos construindo um programa que realize operações aritméticas sobre formas geométricas. } } Figura 100 . } } Figura 99 .Classe Quadrado public class Circulo { private double medida. } public void setMedida(double Medida){ this.medida = Medida. 2). public double getMedida(){ return medida. } public void setMedida(double Medida){ this. } public double getArea(){ return Math.Prof. } public double getArea(){ return getMedida()*getMedida().

} public void setMedida(double Medida){ this. E. que indique que qualquer classe que respeite ou implemente este contrato tenha um conjunto especifico de métodos? Este “contrato” é possível através do uso de interfaces. } public static void CalculaArea(Quadrado q){ q. public double getMedida(){ return medida. assim como nas classes abstratas definem uma estrutura. public interface IFigura { public double getMedida().setMedida(10).: 121/137 .println("Área:" + q.println("Área:" + c.setMedida(10). se agora precisamos de mais uma forma geométrica. } } Reparem que os métodos CalculaArea são praticamente idênticos. } public double getArea(){ return getMedida()*getMedida(). CalculaArea(b). } } Pág. vamos construir mais uma versão do método CalculaArea? Será que não existe uma forma de declaramos um “contrato”. } Figura 101 . public void setMedida(double Medida).out.Interface IFigura As interfaces. public double getArea(). Circulo b = new Circulo(). Daniel Oliveira public class CMain { public static void main(String[] args) { Quadrado a = new Quadrado().getArea()).Prof. } public static void CalculaArea(Circulo c){ c.getArea()). CalculaArea(a). System.medida = Medida.out. public class Quadrado implements IFigura { private double medida. System.

System.setMedida(10).println("Área:" + f..out.catch Pág. Daniel Oliveira Alterando agora nosso código: public class CMain { public static void main(String[] args) { Quadrado a = new Quadrado().: 122/137 . CalculaArea(a). Circulo b = new Circulo(). } public static void CalculaArea(IFigura f){ f..getArea()).Prof. Como tratar uma exceção sem que a mesma possa terminar a execução do programa? Usando um bloco try. } } Exceções e controle de erros Uma exceção representa uma situação que normalmente não ocorre e representa algo de estranho ou inesperado no sistema. CalculaArea(b).

} catch (Exception e) { System. } } public static void Div(int a.: 123/137 . mesmo quando ocorra algum tipo de erro e o bloco catch seja executado: try { // bloco try } catch (IOException ex) { // bloco catch 1 } catch (SQLException sqlex) { // bloco catch 2 } finally { // bloco que será sempre executado.0). pois o compilador checará se ela está sendo devidamente tratada. } } Compile o código e veja o resultado.println(e. Chamamos esse tipo de exceção de checked.println(a/b). } } O bloco finally. Para compilar e fazer o programa funcionar. O primeiro. } System. Um exemplo interessante é o de abrir um arquivo para leitura.txt"). é tratá-lo com o try e catch Pág.io. onde pode ocorrer o erro do arquivo não existir (veremos como trabalhar com arquivos em outro capítulo.out. diferente das anteriores. independente // se houve ou não exception e se ela foi tratada ou não } Um outro tipo.FileInputStream("arquivo. conhecidas como unchecked. obriga a quem chama o método ou construtor a tratar essa exceção. não se preocupe com isto agora): class Teste { public static void metodo() { new java. garante que um determinado código sempre seja executado.getMessage()). Daniel Oliveira Lançando exceções: public class CMain { public static void main(String[] args) { try { Div(1. temos duas maneiras que podemos tratar o problema.int b) throws Exception{ if (b == 0){ throw new Exception("Tentando dividir por zero!").Prof.out.

FileNotFoundException { new java. isto é.Prof. } É possível tratar mais de um erro quase que ao mesmo tempo: Com o throws: Ou então.io.: 124/137 . lança uma Exception.io. que está no presente do indicativo.txt"). Isto é bem diferente de throws. obrigando o outro método que vá utilizar deste de se preocupar com essa exceção em questão.out.txt").FileNotFoundException e) { System.io. Daniel Oliveira public static void metodo() { try { new java. Pág.FileInputStream("arquivo.FileInputStream("arquivo. e que apenas avisa da possibilidade daquele método lançá-la. public static void metodo() throws java. é delegar ele para quem chamou o nosso método. A palavra chave throw. } catch (java.io. passar para a frente. } } A segunda forma de tratar esse erro.println("Nao foi possível abrir o arquivo para leitura"). que está no imperativo.

Daniel Oliveira Sendo exception uma classe.Prof. Exemplo. criando assim nossas próprias Exceptions. podemos também criar classes filhas da mesma.: 125/137 . Pág.

4) Implementar um RadioRelogio. lançar uma exception. Uma classe abstrata Conta que tenha um atributo Saldo. Daniel Oliveira Exercícios 1) Crie uma interface chamada IArea – esta interface deverá conter um método que retorne um double e tenha como nome CalcularArea. segundo o diagrama simples apresentado abaixo. Crie dois objetos: ContaCorrente e ContaPoupanca que implementem esta interface e herdem da classe Conta. todos sem parâmetros e retornando String.Prof. A classe ContaCorrente deverá ter um outro atributo chamado LimiteChequeEspecial. o saldo for inferior a zero. Crie um método que receba objetos que implementem esta interface. na linguagem Java. 6) Crie uma exception personalizada para o exercício anterior. 2) Crie uma interface IConta que defina dois métodos: Sacar e Depositar – o primeiro retira valores do saldo de uma conta e o segundo deposita valores em uma conta. Crie uma classe ContatoTelefone e ContatoEmail que implemente esta interface. o saldo da mesma deverá levar em conta este valor. A classe RadioRelogio deve ter o seguinte construtor public RadioRelogio(Date horario) 5) Altere as classes do exercício 2 para verificar em caso de saque.getContato() e getTipo(). Triangulo e Círculo que implemente esta Interface.: 126/137 . Crie as classes Quadrado. Pág. 3) Crie uma interface chamada Contato com os métodos getNome().

System. sendo uma exceção do tipo checked.io. isr = new InputStreamReader(is). } catch (IOException e) { System.IOException.io.out.close(). O construtor de InputStreamReader pode receber o encoding a ser utilizado como parâmetro. Em todas as operações iremos trabalhar com bytes para isto. import java.println(e. Quando trabalhos com as classes de I/O diversos métodos lançam a exceção IOException. import java.io.FileInputStream. int b = is.getMessage()). import java.InputStream. import java. public class CMain { public static void main(String[] args) { try { InputStream is = new FileInputStream("arquivo. Para isto vamos utilizar a classe InputStreamReader. import java. public class CMain { public static void main(String[] args) { InputStreamReader isr = null. try { InputStream is = new FileInputStream("arquivo. } } } Para a leitura de dados em formato texto é necessário os bytes com enconding dado para o respectivo código Unicode. em fluxo de saída (OutputStream) se grava os dados. nos obriga a trata-la ou declará-la. } } } Pág. } catch (IOException e) { System.InputStream.io.FileInputStream.println(c).println(e.out.io.txt"). import java.txt").out. tal como UTF-8 ou ISO-8859-1.io. import java. isr.IOException.read(). Para a leitura de bytes de um arquivo vamos utilizar o objeto FileInputStream. socket de rede ou campo blob de banco de dados.read().getMessage()).io – utiliza-se as classes abstratas InputStream e OutStream para toda e qualquer operação.InputStreamReader. int c = isr. Para isto deverá ser informado o nome do arquivo (informado no construtor).: 127/137 . Daniel Oliveira Trabalhando com arquivos Em Java os principais objetos para se trabalhar com arquivos está no pacote java.Prof. Em um fluxo de entrada (InputStream) se lê os dados. se desejado. que seja relativa a um arquivo.io.

println(e. Figura 102 .io.FileInputStream.getMessage()). isr.Uso das classes de stream para leitura A padrão que é exibido na Figura 102. aumentando a performance da leitura das informações.readLine(). isr = new InputStreamReader(is).out.io.IOException.: 128/137 . Daniel Oliveira Ler um caractere é simples.txt"). } catch (IOException e) { System.io.io.BufferedReader. BufferedReader br = new BufferedReader(isr). System. import java.InputStreamReader. import java.close(). import java. try { InputStream is = new FileInputStream("arquivo. vamos ler todo o arquivo: Pág.println(s). agora vamos ler uma cadeia de caracteres. } } } Pode-se configurar o tamanho do buffer no construtor da classe. public class CMain { public static void main(String[] args) { InputStreamReader isr = null.out. para isto vamos utilizar o BufferedReader: import java.Prof. é chamado de Decorator Pattern. String s = br. No momento apenas lemos uma linha do arquivo. import java.io.InputStream.

OutputStreamWriter osw = new OutputStreamWriter(os).println(s). public class CMain { public static void main(String[] args) { InputStreamReader isr = null.close(). isr.Prof.newLine().println(e. BufferedWriter bw = new BufferedWriter(osw).txt").BufferedReader.out.println(e. } br.InputStreamReader. import java. import java.write("Daniel").io.readLine(). BufferedReader br = new BufferedReader(isr).out.InputStream. s = br. try { InputStream is = new FileInputStream("arquivo. //Primeira linha while (s != null) { System.FileInputStream. } catch (IOException e) { System. bw.getMessage()). bw. } catch (IOException e) { System.out.io. Daniel Oliveira import java. String s = br. import java. import java. bw.io.readLine().IOException. isr = new InputStreamReader(is).close(). } } } Pág.io.write("Oliveira").txt"). } } } De forma bem análoga podemos escrever em um arquivo: public class CMain { public static void main(String[] args) { try { OutputStream os = new FileOutputStream("saida. bw.close().io.getMessage()).: 129/137 .

f.setCargo("Diretor"). s. } public void setCargo(String cargo) { this. } } O processo de serialização é bem simples: import java. f.Prof. private String nome. } public void setNome(String nome) { this. FileOutputStream outFile = new FileOutputStream("funcionario. import java.FileOutputStream. public class CMain { public static void main(String[] args) { try { Funcionario f = new Funcionario().io.getMessage()). ObjectOutputStream s = new ObjectOutputStream(outFile).: 130/137 .nome = nome. Daniel Oliveira Serializando objetos Vamos agora armazenar nossos objetos em disco.matricula = matricula.IOException.io. } } } Pág.setNome("Danie Oliveira"). private String cargo.println(e.io.ObjectOutputStream.writeObject(f).Serializable.close().cargo = cargo. Seja a classe: import java. } catch (IOException e) { System. } public void setMatricula(int matricula) { this.out.io. } public String getCargo() { return cargo. Primeiro precisamos que nossos objetos implemente a interface: Serializable. f. } public String getNome() { return nome.ser"). public int getMatricula() { return matricula.setMatricula(1). import java. public class Funcionario implements Serializable { private int matricula. s.

import java. } catch (IOException e) { System.getMessage()). ObjectInputStream s = new ObjectInputStream(file).readObject().out.ser"). } } } Pág. System.out.out.println(o.out.Prof. System.close(). Daniel Oliveira Lendo agora um objeto serializado: import java.FileInputStream.out.getCargo()). s. } catch (ClassNotFoundException e) { System.println(e.getMessage()).IOException.io.: 131/137 .ObjectInputStream. import java.getMatricula()).println(e. System. Funcionario o = (Funcionario)s.io.io.println(o.getNome()). public class CMain { public static void main(String[] args) { try { FileInputStream file = new FileInputStream("funcionario.println(o.

4) Crie uma classe NPC.Y e Z (todas do tipo double) – representando as coordenadas do ponto 2) Crie uma classe Velocidade que terá as seguintes propriedades: VelocidadeX. VelocidadeY. Esta classe terá as seguintes propriedades: a. 7) Crie uma classe chamada Funcionario. Subtração .: 132/137 . Esta classe deverá ter três propriedades: X. Fugir – que deverá receber como parâmetro um objeto do tipo NPC é o método deverá alterar a posição do NPC para que este fique 10 unidades distante (em cada coordenada) da posição do objeto passado como parâmetro. Fava o override no método Dividir.Prof. da classe base. O primeiro deve aumentar o salário com uma taxa fixa de 10%. AceleracaoY. Dividir –realiza a divisão entre dois números c. Seguir – que deverá receber como parâmetro um objeto do tipo NPC e o método deverá igualar a posição do NPC com a posição do objeto passado como parâmetro. AceleracaoZ – todas do tipo double. Esta classe deverá ter os seguintes métodos: a. Multiplicação – realiza a multiplicação entre dois números. exemplificando o uso dos métodos e propriedades. Daniel Oliveira Exercícios de Revisão do Conteúdo de OO 1) Crie uma classe que representa um Ponto no espaço 3D.VelocidadeZ – todas do tipo double. 1) – somente leitura b. 3) Crie uma classe Aceleracao que terá as seguintes propriedades: AceleracaoX. testando a divisão por zero (retornando uma exceção caso isto possa ocorrer) e então chame o método da classe base. RaizQ – calcula a raiz quadrada de um número informado b. esta classe deverá ter os seguintes métodos: a. Mover – que deverá receber um parâmetro do tipo Ponto que irá indicar a nova posição do NPC b. c. 8) Crie uma classe Calculadora. 2) c. 3) 5) Na classe do ex. 9) Crie uma classe CalculadoraCientifica que herde a classe Calculadora do exercício anterior. O segundo deve aumentar o salário com uma taxa variável. Posicao – deve ser do tipo Ponto (Ex. Somar – realiza a soma de dois números informados b. 6) Crie um código de exemplo que utilize a classe do exercício 5. Velocidade – deve ser do tipo Velocidade (Ex. Aceleracao – deve ser do tipo aceleração (Ex. Defina dois métodos de aumento salarial nessa classe. 4 crie os seguintes métodos: a. 10) Crie uma classe CalculadoraFinanceira que herde de CalculadoraCientifica e que implemente os seguintes métodos: Pág. Potencia – recebe dois parâmetros (base e expoente) e retorna o número da base elevado ao expoente c.realiza a subtração entre dois números d.

CPF iii. Esta classe deverá ter: a. b.: 133/137 . Esta classe deverá ter os seguintes métodos: a. Daniel Oliveira a. DataNascimento v. 13) Crie uma classe CadastroEstendido. Endereco vii. Consultar – Método que recebe como parâmetro uma string que será o CPF e consulta a lista retornando (caso encontre) o objeto com o CPF correspondente. c. retornando qual seria o valor futuro do valor atual a taxa informada e no período informado. que informado um nome de arquivo realize a de- serialização do objeto e retorne o objeto CadastroEstendido Pág. EstadoCivil vi. Propriedades: i. ValorFuturo – Este método deverá receber um valor atual. Nome ii. Cidade 12) Crie uma classe Cadastro. Esta variável deverá ser instanciada no construtor da classe. verificando antes se já existe um objeto Pessoa com o CPF informado – se. Override do método Inserir. Faça uma pesquisa e implemente o cálculo de juros compostos. Um método estático Salvar que receba como parâmetro um nome de arquivo e um objeto do tipo CadastroEstendido que realiza o serialização do objeto. Bairro ix. Esta classe deverá ter: a. Numero viii. que herde da classe Cadastro do exercício anterior. passado como parâmetro b. uma taxa de juros e uma quantidade de meses. Remover – Método que recebe um CPF e remove o objeto Pessoa (caso encontre) com o CPF informado. c. 11) Crie uma classe Pessoa. já existir deverá ser lançada uma exceção informado do erro. Desafio: Crie um método estático Carregar. RG iv.Prof. Inserir – Método que insere um objeto Pessoa na lista. Esta classe deverá ter uma variável privada que será uma lista de objetos do tipo Pessoa.

iv Finish Pág.é a área de trabalho que pode conter vários projetos (aplicações).Java Project . iii Finish Criação do pacote: i Selecione o projeto que acabou de ser criado (janela Package Explorer à esquerda) ii Clique no botão “New Java Package” (ou selecione pelo menu: File .Project . 2º) Project . selecione a opção “Java” dentro do botão “Open Perspective” acima e à direita. Criação do projeto: i Clique no botão “New Java Project” (ou selecione pelo menu: File . Normalmente cada programa seu ficará num Package.Next) ii digite: ‘Programas Algoritmo I’ (primeira letra sempre em maiúsculo).uma classe escrita dentro de um arquivo. Criação do primeiro programa: Os seguintes passos mostram a criação do projeto.New . 3º) Package . pacote e classe. os primeiros programas são compostos por apenas uma classe.Prof.se não definido.agrupamento de classes afins . Normalmente. 4º) Class . respectivamente nos botões: Obs: se estes botões não aparecem. Daniel Oliveira Anexos Anexo A Hierarquia do Eclipse 1º) Workspace .New .Package) iii Digite: ‘exercicio01’ (primeira letra sempre em minúsculo). usa o pacote default .: 134/137 .é um espaço que pode conter um agrupamento de pacotes (package).

iii Como esta classe é de execução final então ela deve possuir o método main( ).New . para o nome da classe (primeira letra sempre em maiúsculo).Class) ii Em name digite: Principal. Para isto marque a caixa: public static void main (String[] args) iv Finish v Aparecerá o seguinte código: public class Principal { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } } Pág.Prof.: 135/137 . Daniel Oliveira Criação da classe: i Clique no botão “New Java Class” .Class (ou selecione pelo menu: File .

Pág.showInputDialog(null.parseInt(JOptionPane. Você tem " + age + " anos!"). String name = "". int age = 0. Para utilizar esta classe para obter informações é necessário o uso do método ShowInputDialog.showInputDialog(null. Daniel Oliveira Anexo B Uma outra forma de interagir com usuário (exibição de mensagens e obtenção de valores) é o uso da classe JOptionPane.Prof. "Informe a idade: ")). "Informe o seu nome: "). que diferentemente do scanner todas as informações são retornadas em string e devem ser convertidas para os tipos necessários.showMessageDialog(null. JOptionPane.swing. Para utilizar esta classe é necessário o seguinte comando de import: import javax. "Oi " + name + ".JOptionPane. Esta é uma classe que faz parte da biblioteca swing do Java (componentes visuais do Java). age = Integer.: 136/137 . name = JOptionPane.

Disponível em: < http://www.html>.ucs. ZIVIANI. 4.html.php. Acesso em: Janeiro. Disponível em: http://hotwork. Eclipse User Guide. 2004 ORACLE. Charles Eric. Thomas H. DEITEL. TAMASSIA.. Clifford. 916 p. RS: Bookman. 2002. Bruno. Algoritmos: teoria e prática. Estruturas de dados e algoritmos em Java.Tecnhnologies.net/hotwork/manual/eclipse/eclipse-user-guide. Cristian. Rio de Janeiro Campus. Roberto. São Paulo: Prentice Hall. Nivio. Java: como programar.sourceforge. Michael T. 2. Disponível em: http://dein. STEIN. Harvey M. 1999.. ed. 2004.: 137/137 . Acesso em: 16 Agosto de 2011. ISBN 9788535209266 DEITEL.2012 TONET. ed. 6. Acesso em: Janeiro. RIVEST. São Paulo: Pioneira.br/napro/Algoritmo/manuais/ManualVisualg.com/technetwork/java/index. 584 p.oracle.pdf. Acesso em: Mar..tiexpert. 2012 TIEXPERT. ISBN 8536300434 Néki. Daniel Oliveira Referências CORMEN. Disponivel em: http://www.. 267 p. Introdução aos Algoritmos. LEISERSON. ISBN 8522101744 Pág. Projeto de algoritmos : com implementações em Pascal e C. Ronald L.. ed. ISBN 9788576050193 GOODRICH. 2005. KOLIVER.Prof.net/programacao/java/math.Programação Java.. 1110 p. Oracle Technology Network for Java Developers. Porto Alegre. Paul J.