0% acharam este documento útil (0 voto)
4 visualizações70 páginas

Fundamentos da Programação em Java

O documento introduz os fundamentos da programação orientada a objetos utilizando a linguagem Java, abordando conceitos essenciais como variáveis, tipos de dados, estruturas de controle, loops, listas, dicionários e funções. Destaca a importância de dominar esses conceitos para a empregabilidade em programação e compara o uso de Java e Python em diferentes contextos. A unidade enfatiza a prática e a construção de uma base sólida em programação para o desenvolvimento de habilidades e oportunidades profissionais.

Enviado por

felipe.mram
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações70 páginas

Fundamentos da Programação em Java

O documento introduz os fundamentos da programação orientada a objetos utilizando a linguagem Java, abordando conceitos essenciais como variáveis, tipos de dados, estruturas de controle, loops, listas, dicionários e funções. Destaca a importância de dominar esses conceitos para a empregabilidade em programação e compara o uso de Java e Python em diferentes contextos. A unidade enfatiza a prática e a construção de uma base sólida em programação para o desenvolvimento de habilidades e oportunidades profissionais.

Enviado por

felipe.mram
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Fundamentos da Programação Orientada a

Objetos

UNIDADE 01

Aprendendo uma nova linguagem de programação: Java

Vamos conversar um pouco?

Olá, bem-vindo à programação orientada a objetos com Java!

Antes de começarmos com o material escrito, o que acha de já colocarmos a mão na


massa com uma videoaula? Vamos converter (portar) um projeto que foi escrito em
Python para Java usando um software chamado IntelliJ. Ao longo do material escrito
você verá mais informações sobre tudo o que faremos nesta videoaula. Portanto, não
ignore o material escrito que vem logo a seguir deste vídeo, beleza?
Códigos gerados durante o vídeo:

Código original em Python


Código portado para Java

Bom, é provável que você se enquadre nestes dois perfis:

1. Você já é uma pessoa que possui experiência em TI, mas que está procurando se
atualizar e conhecer um pouco mais dos fundamentos da computação.
2. Ou você é uma pessoa que não possui experiência em TI, e que começou a
aprender a desenvolver algoritmos na disciplina Raciocínio Computacional.

Independentemente do seu perfil, eu entendo que você já passou pela disciplina


Raciocínio Computacional e entende alguns termos e conceitos que usaremos nesta
disciplina. Alguns deles são:

Variáveis e constantes
Elas servem como "recipientes" que armazenam valores.
Elas nos permitem guardar informações temporariamente e
manipulá-las ao longo do programa.

Elas são amplamente utilizadas em qualquer projeto de


programação e em várias linguagens de programação nas
empresas. Imagine que você está desenvolvendo um
sistema de controle de estoque para uma empresa. Nesse
caso, você precisa utilizar variáveis para armazenar
informações como nome do produto, quantidade
disponível, preço etc.

Tipos de dados: números inteiros e decimais, textos


(Strings) e variáveis binárias (em Python:
int/float/String/bool)

Os tipos de dados são a base fundamental de qualquer


programa. Eles representam diferentes categorias de
informações que podem ser manipuladas e processadas.

Usamos tais tipos de dados em diferentes domínios da


programação. Por exemplo, em desenvolvimento web, é
necessário manipular Strings para exibir mensagens aos
usuários, armazenar dados de formulários e interagir com
bancos de dados. No campo da análise de dados, o
conhecimento sobre tipos numéricos e booleanos é crucial
para realizar cálculos, estatísticas e tomada de decisões
baseadas em condições.

Dominar os tipos de dados permite que você escreva


programas mais precisos, eficientes e flexíveis, além de
evitar erros comuns de manipulação de informações. Isso
torna você um candidato mais atraente para empresas que
valorizam a qualidade e a eficiência do código.
Estruturas de controle (ou de decisão, ou estruturas
condicionais): se/senão-se/senão (em Python: if/elif/else)

As estruturas condicionais são utilizadas para controlar o


fluxo de um programa e tomar decisões com base em certas
condições. Usamos if/elif/else para executar diferentes
blocos de código com base na avaliação dessas condições.

Ao dominar as estruturas condicionais, você se torna capaz


de criar programas que respondem de forma inteligente a
diferentes cenários. Isso é essencial em diversas áreas da
programação, como desenvolvimento de software, análise
de dados e criação de jogos.

A capacidade de utilizar estruturas condicionais permite


que você desenvolva programas mais interativos,
responsivos e adaptáveis. Por exemplo, em um aplicativo de
e-commerce, é possível utilizar if/elif/else para exibir
diferentes mensagens ou oferecer diferentes opções com
base no histórico de compras do usuário. Em um jogo, as
estruturas condicionais podem ser usadas para determinar
o resultado de uma ação do jogador com base em uma série
de condições.

Dominar as estruturas condicionais demonstra sua


habilidade em criar programas que são capazes de tomar
decisões lógicas e adaptáveis em diferentes cenários. Essa
é uma competência valorizada por empresas que buscam
desenvolvedores capazes de criar sistemas inteligentes e
funcionais.

Estruturas de repetição (ou loops): para/enquanto (em


Python: for/while)

São essenciais para executar tarefas repetitivas. Elas nos


permitem automatizar a execução de um bloco de código
várias vezes, o que é extremamente útil para processar
grandes quantidades de dados ou executar tarefas em série.

Imagine que você está desenvolvendo um programa para


calcular a média de notas de uma turma de estudantes.
Utilizando um loop, você pode percorrer todas as notas,
somá-las e calcular a média de forma automatizada,
poupando tempo e esforço.

Por isso, saber utilizar loops é uma habilidade valorizada no


mercado de trabalho, pois muitas tarefas envolvem
repetição de código.

Listas e dicionários

São estruturas de dados que nos permitem armazenar e


manipular coleções de elementos. Elas são fundamentais
para lidar com conjuntos de dados, como listas de contatos,
produtos em um carrinho de compras etc.

Com tais coleções você pode realizar operações como


adicionar, remover, buscar e percorrer os elementos de
forma eficiente. Essa habilidade é especialmente relevante
em áreas como desenvolvimento web, análise de dados e
desenvolvimento de aplicativos móveis, em que o
gerenciamento de informações é crucial.

Funções

As funções são blocos de código que podem ser reutilizados


em diferentes partes de um programa. Elas nos permitem
dividir tarefas complexas em partes menores e mais
gerenciáveis, facilitando a manutenção e o
desenvolvimento de software.

Ao dominar o conceito de funções, você pode criar suas


próprias bibliotecas de código reutilizável, economizando
tempo e esforço em projetos futuros.

As empresas valorizam programadores que possuem


habilidades em modularização e organização de código, o
que é alcançado pelo uso das funções.

Bom, espero que tenha entendido o porquê de termos apresentado esses conceitos
para você na disciplina Raciocínio Computacional. Afinal, dominar conceitos como
variáveis, loops, funções e listas é de extrema importância para a empregabilidade em
programação. Essas habilidades básicas são amplamente utilizadas em diferentes áreas
e projetos, e seu domínio irá torná-lo mais confiante e eficiente como um
desenvolvedor. Além disso, empresas valorizam profissionais com uma base sólida e
capacidade de resolver problemas utilizando esses conceitos.

Portanto, ao se aprofundar nessas áreas e praticar a implementação de exemplos


práticos, você construirá uma base sólida para sua carreira como programador e
aumentando suas chances de sucesso profissional.

DICA
A prática é fundamental para aperfeiçoar essas habilidades.
Continue estudando, praticando e desenvolvendo projetos
pessoais para fortalecer seu conhecimento e aplicar esses
conceitos de forma eficaz. Dê uma atenção especial a todos os
exercícios de fixação e aplicação. Tente entender o seu código, e
não somente executar por executar. Se aparecer algum erro no
seu código, tente resolvê-lo antes de avançar para a próxima
etapa.

Agora, estamos falando de construir uma base sólida em programação. E é aí que entra
esta disciplina. Você pode até entendê-la como um “Raciocínio Computacional II”, ou
“Raciocínio Computacional Avançado”. Aqui, apresentaremos mais conceitos, formas
diferentes de produzirmos códigos e, ainda, uma nova linguagem de programação: o
Java. Você já trabalhou um pouco com ela na videoaula, e agora vamos entendê-la um
pouco melhor.

Java e Python

Você já aprendeu Python lá em Raciocínio Computacional. O Python tem os seus casos


de uso como, por exemplo:

1. Desenvolvimento web: Python é amplamente utilizado no desenvolvimento web,


tanto no lado do servidor quanto no desenvolvimento de aplicativos web. Frameworks
populares como Django e Flask permitem a criação rápida e eficiente de aplicativos
web robustos e escaláveis. Dominar o desenvolvimento web com Python pode abrir
portas para oportunidades de emprego em empresas de tecnologia, agências digitais e
startups.

2. Ciência de dados e análise de dados: Python possui uma rica biblioteca de ciência de
dados, como NumPy, Pandas e Matplotlib, que são amplamente utilizadas por
cientistas de dados e analistas. A facilidade de uso e a vasta quantidade de recursos
disponíveis tornam Python uma escolha popular para tarefas como limpeza de dados,
análise estatística, visualização de dados e construção de modelos de aprendizado de
máquina. Com a crescente demanda por profissionais em ciência de dados, ter
conhecimentos sólidos em Python é uma habilidade altamente valorizada no mercado
de trabalho.

3. Automação de tarefas e scripting: Python é frequentemente utilizado para


automatizar tarefas rotineiras e simplificar processos. Sua sintaxe clara e legível permite
criar scripts eficientes para manipulação de arquivos, processamento de dados em lote,
automação de tarefas de rotina e integração de sistemas. Empresas de diversos setores,
como finanças, automação industrial e administração de sistemas, estão
constantemente buscando profissionais capazes de automatizar tarefas com Python.

4. Desenvolvimento de aplicações desktop e aplicativos móveis: Embora seja mais


conhecido pelo desenvolvimento web, Python também pode ser usado para criar
aplicativos desktop e aplicativos móveis. Bibliotecas como Tkinter e Kivy fornecem
ferramentas para criar interfaces gráficas de usuário (GUIs) intuitivas e responsivas em
Python. Dominar o desenvolvimento de aplicativos com Python pode abrir
oportunidades em empresas que desenvolvem software de desktop, aplicativos móveis
e jogos.
5. DevOps e automação de infraestrutura: Python é amplamente utilizado no campo
DevOps (gerenciamento e automação de infraestruturas de software). Ferramentas
populares como Ansible e SaltStack são escritas em Python, e muitas empresas
procuram profissionais que possam criar scripts e automatizar tarefas relacionadas à
implantação, configuração e gerenciamento de servidores e serviços em nuvem.

Agora, o Python não é a melhor linguagem de programação do mundo. Ela não é


perfeita para todos os casos de uso. Assim, ainda que o Python seja uma linguagem
versátil e amplamente utilizada em várias áreas, existem alguns casos de uso em que
Java se destaca e é preferível sobre Python. Por exemplo:

1. Desenvolvimento de aplicações/aplicativos empresariais: Java é uma escolha


comum para o desenvolvimento de aplicativos empresariais robustos e escaláveis. A
estrutura de código do Java fornece um ambiente confiável para criar sistemas
complexos. Java é amplamente adotado em grandes empresas e instituições
financeiras, onde a segurança, a estabilidade e o desempenho são essenciais.

2. Desenvolvimento Android: embora Python tenha frameworks como Kivy para


desenvolvimento móvel, Java é a linguagem usada para o desenvolvimento de
aplicativos Android em conjunto com o Kotlin. Várias bibliotecas e recursos da
plataforma Android são projetados para Java, e há uma enorme base de código
existente em Java para referência e reutilização. Ainda que grande parte dos aplicativos
sejam desenvolvidos em Kotlin, ele ainda utiliza o Java como base – logo, entender os
conceitos de Java ainda é fundamental.

3. Programação de sistemas em tempo real: Java é muito usado na programação de


sistemas em tempo real, como, por exemplo, sistemas embarcados, automação
industrial e sistemas de controle. Sua baixa latência (baixo atraso na resposta), controle
preciso de memória e recursos de concorrência (usar de forma eficiente pouca memória
e processador) tornam o Java uma escolha sólida para tais aplicações. Python, por
outro lado, pode ter limitações de desempenho e gerenciamento de memória que
podem afetar seu uso em sistemas de tempo real.

4. Desenvolvimento de jogos: embora Python tenha bibliotecas como Pygame para


desenvolvimento de jogos, Java é frequentemente preferido em ambientes de
desenvolvimento de jogos profissionais. A linguagem Java e suas bibliotecas, como
Lightweight Java Game Library (LWJGL), fornecem um ecossistema robusto para criar
jogos 2D e 3D com desempenho adequado. Além disso, a plataforma Java permite
compilar o código para diferentes plataformas, facilitando a portabilidade dos jogos. O
Minecraft é o exemplo mais popular de jogo desenvolvido em Java.
5. Desenvolvimento de sistemas em larga escala: Java é frequentemente escolhido
para desenvolver sistemas de grande escala que exigem alta escalabilidade e
desempenho. Algoritmos escritos com programação orientada a objetos em Java (que é
o que aprenderemos aqui) e os seus recursos avançados de gerenciamento de memória
permitem a criação de sistemas complexos e modulares. Python, embora seja poderoso
em termos de produtividade e expressividade, pode enfrentar desafios de desempenho
em sistemas em larga escala.

Entendeu o motivo de aprendermos Java, certo? Quer mais motivos? Pensemos na


popularidade: o Java é a segunda linguagem mais popular no Github (site em que
várias empresas, grupos e desenvolvedores armazenam os seus algoritmos), ficando
atrás apenas do Python, e sem tendência para diminuir.

#ParaTodosVerem

Fonte: GitHut 2.0.

Nos sites de busca a situação é parecida. O TIOBE Programming Community Index


também mostra o Java dentre as linguagens mais populares:

#ParaTodosVerem

Fonte: [Link] (GitHut 2.0).

DICA
Você pode ter visto nos gráficos uma linguagem chamada
“JavaScript”. Não se confunda: ela é uma outra linguagem de
programação completamente diferente do Java. Dito isso, ao
aprender Java você não terá muitas dificuldades em aprender
outras linguagens parecidas como, por exemplo, C# e C++.

O Java é uma poderosa linguagem de programação lançada em 1995. Desde então, se


mantém como uma das principais e mais populares linguagens de desenvolvimento
(TIOBE, 2020). Como comentamos anteriormente, é usada em várias aplicações. Esta
popularidade também se justifica ao fato dela se encontrar em constante evolução.

Aprender a programação orientada a objetos utilizando o Java é uma ótima forma de


conhecer todas as vantagens e recursos que esse tipo de programação oferece. Com
esse objetivo, vamos nos concentrar em entender como utilizar a linguagem Java, nesta
Unidade 1, para então explorarmos os conceitos da orientação a objetos nas próximas
Unidades.

DICA
Nesta primeira unidade nos concentraremos em traçarmos
comparações entre Python e Java. Afinal, você já possui
experiência em Python. Contudo, com o progresso da disciplina
trataremos exclusivamente do Java.

Iniciaremos com a apresentação dos conceitos básicos de preparação à programação,


mostrando como eles são usados com a plataforma Java. Com isso, estaremos prontos
para instalar um ambiente de desenvolvimento apropriado ao Java, que permitirá criar
nossos primeiros programas. Em seguida, vamos praticar programação com Java,
explorando sua sintaxe e conceitos. Assim, estaremos prontos para realizar operações
de leitura e escrita de dados, utilizar comandos de desvio e repetições e trabalhar com
estrutura de dados como vetores e matrizes.

Vamos juntos?

Conceitos básicos de preparação à programação com Java

Compilador
Vamos imaginar que você é um chef de cozinha e tem uma receita para preparar um
novo prato. Aqui, você tem duas opções:

Opção A

menu_book Você lerá a receita passo a passo e executar as instruções à medida que as
encontra. Você lê cada linha da receita, entende o que precisa ser feito e
realiza as ações imediatamente. Você interpreta as etapas, uma por uma,
enquanto está cozinhando. Você não se preocupa em ler toda a receita: você
somente tem interesse em saber qual é o próximo passo a ser feito.

Opção B

menu_book Você irá ler a receita completa, entender todas as etapas e preparar
antecipadamente todos os ingredientes necessários. Você revisa a receita
com cuidado, organiza os ingredientes e utensílios e, em seguida, inicia o
processo de preparação do prato seguindo as etapas na sequência correta.

Nessa analogia, a receita é o equivalente ao código-fonte, e o chef representa o


interpretador (opção A) ou o compilador (opção B), dependendo da abordagem
adotada. Enquanto o interpretador executa as instruções à medida que as encontra, o
compilador processa o conjunto completo de instruções antes da execução.

Todos os códigos que você desenvolveu em Python na disciplina de Raciocínio


Computacional eram interpretados: você testava o código e, se ele tinha algum erro, ele
lhe era apontado em tempo de execução. Ou seja: você só sabia que tinha algum erro
depois que você mandou executar o seu código.

Já os códigos em Java são compilados: um programa testará todo o seu código e


somente permitirá a sua execução depois de ter feito uma validação automatizada e
completa. O nome desse programa é compilador.

O compilador transforma um código escrito em uma linguagem de programação, que é


o código-fonte (source code), em um programa equivalente em outra linguagem, é o
código-objeto (object code), geralmente em linguagem de máquina (binária). Em outras
palavras, o seu código escrito em Java é convertido para uma sequência de instruções
que só o computador entenderá (e que você não terá acesso).
Essa transformação permite que o trabalho de desenvolvimento ocorra em dois
momentos distintos. Confira na Figura a seguir esses dois momentos.

Tempo de compilação (compile time): envolve os eventos que ocorrem durante o


processo de compilação. Tem como objetivo transformar o código-fonte escrito em
uma linguagem de programação em outra linguagem, como a linguagem de
máquina (binária).
Tempo de execução (runtime): envolve os eventos que ocorrem durante a
execução do programa.

Figura 3: Estrutura de funcionamento da JVM. JVM é um programa executável que carrega e


executa os aplicativos Java (bytecode .class), convertendo-os em código executável para uma
determinada máquina.

#ParaTodosVerem

Fonte: Autores (2020).

Você viu na imagem apresentada uma menção ao JVM, certo? A JVM, que significa Java
Virtual Machine (máquina virtual Java), é um componente crucial do ambiente de
execução do Java. Ela é responsável por executar programas escritos em linguagem
Java. Podemos pensar nela como uma "máquina virtual" que compreende e executa o
código Java.

Quando você escreve um programa em linguagem Java, o código-fonte que você


escreve não pode ser executado diretamente pelo computador. Ele precisa ser
transformado em um formato especial chamado bytecode. Você não lerá este bytecode,
mas ele é um conjunto de instruções de baixo nível especialmente projetado para ser
executado por uma máquina virtual, como a JVM. Ele é uma representação
intermediária do seu código Java, que contém instruções compreensíveis pela JVM.

A principal vantagem do bytecode é que ele é independente do hardware e do sistema


operacional em que será executado. Isso significa que, uma vez que seu código Java é
convertido em bytecode, ele pode ser executado em qualquer dispositivo que possua
uma JVM compatível instalada, como computadores, smartphones e outros
dispositivos. Consegue perceber isso na imagem apresentada?

Além dessas responsabilidades principais, JVM também fornece um ambiente de


execução seguro e portátil. Como a JVM é implementada para diferentes plataformas
(Windows, macOS, Linux etc.), ela permite que os programas Java sejam executados em
qualquer sistema operacional que possua uma JVM compatível instalada.

DICA
Já acessou algum computador que possui o Java instalado, ou
algum programa que pede para que você instale o Java para que
possa funcionar? Então: “instalar o Java” significa, em outras
palavras “instalar o JVM no seu computador (e algumas coisas a
mais)”.

RESUMO: A JVM é uma "máquina virtual" que executa programas Java. Ela
interpreta e/ou compila o bytecode Java, gerencia a memória e trata
exceções. É um componente-chave para a portabilidade, segurança e
desempenho dos aplicativos Java.
Desenvolvendo programas em Java

Antes de compilar, precisamos escrever nosso código-fonte, o que pode ser feito em um
editor de texto como um bloco de notas. Após a edição do código em uma linguagem de
programação, ele poderá ser compilado e executado. Por outro lado, não
recomendamos que você use um bloco de notas para escrever o seu código: você
precisaria encontrar manualmente erros e inconsistências no seu código, o que não é
muito produtivo.

Para facilitar o trabalho de encontrar os erros no código, realizar a compilação e


execução de programas, existem os ambientes de desenvolvimento integrados, mais
frequentemente referenciados pela sua sigla em inglês: Integrated Develoment
Environment (IDE).

Os IDEs fornecem ferramentas para análise de código, escrita de comandos que se


autocompletam (autocomplete), colorização de comandos, chamada do compilador e
execução de programas, dentre outras funcionalidades, que auxiliam o programador a
escrever códigos melhores e sem erros de compilação, de forma mais rápida e segura.
Para o Java, existem três IDEs gratuitos e poderosos. Os mais utilizados no mercado
são:

1. IntelliJ, da JetBrains ([Link]

a. O IntelliJ é a IDE mais utilizada no mundo pelos desenvolvedores Java.


b. O IntelliJ é feito pela mesma empresa que também fez o PyCharm, IDE que
recomendamos em Raciocínio Computacional para o desenvolvimento de Python.
Logo, se você já conhece o PyCharm, você não terá muitas dificuldades em
desenvolver no IntelliJ.
c. Atenção: no site existem duas versões – a Ultimate (paga) e a Community
(gratuita). Baixe a versão Community.

2. Eclipse, da Eclipse Foundation ([Link]

a. O Eclipse era a IDE mais utilizadas alguns anos atrás, mas foi reduzindo em
popularidade com o tempo.
b. Por isso, você poderá encontrar conteúdos na internet que ainda o recomendem.
Por outro lado, existem também muitas reclamações quanto à complexidade da
interface e o consumo de memória.

3. Visual Studio Code (VS Code, [Link]


a. O VS Code é leve e prático de usar. Possui um grande conjunto de extensões.
Desenvolvedores que já criavam os seus algoritmos em Python usando o VS Code
também podem criar os seus projetos em Java no mesmo VS Code.
b. Por outro lado, é necessário seguir um tutorial extra para configurar o Java no VS
Code ([Link]

4. Netbeans IDE, da Apache Software Foundation


([Link]

a. O Netbeans começou a ser desenvolvido nos primeiros anos do Java e é


completamente gratuito.
b. Por outro lado, o Netbeans não recebe melhorias e atualizações com a mesma
frequência das outras IDEs.

IMPORTANTE
Demonstramos a instalação do IntelliJ dentro da videoaula no
início deste material.

Plataforma Java

Eu sei que você quer começar a criar algoritmos em Java logo. Calma: falta pouco. Antes
disso, é importante que você conheça alguns termos-chave do Java – afinal de contas,
ele não é só uma linguagem de programação, mas também uma plataforma.
Primeiramente, quanto às suas características:

Característica Descrição

Orientada a Programas em Java podem ser desenvolvidos usando conceitos de


objetos programação orientada a objetos.

Neutra em Não possui vínculo com determinado equipamento ou arquitetura de sistema


relação à operacional: não importa se você usa Windows, Linux ou Mac. Não importa se
arquitetura é um tablet, celular ou computador: o código deve funcionar do mesmo jeito.

Independente de plataforma: escreva o código uma vez e o execute em


Portabilidade
qualquer lugar.

Uma representação intermediária do seu código Java, que contém instruções


Bytecode
compreensíveis pela JVM, como mostramos anteriormente.
A máquina virtual Java (JVM, ou Java Virtual Machine) é um programa que
carrega, interpreta e executa programas Java, convertendo seu bytecode em
JVM
código executável de máquina. Existe um JVM feito especialmente para cada
sistema operacional (Windows, Linux, Mac etc.).

Compilada e Programas ([Link]) são compilados para o formato bytecode (arquivos


Interpretada .class) que são interpretados pela JVM, como mostramos anteriormente.

API significa Aplication Program Interface. Servem para facilitar o trabalho


APIs
com arquivos, interface gráfica, redes, entre outras funcionalidades.

Ferramentas e Conjunto de documentação, analisador de performance e empacotador de


utilidades arquivos.

Tabela 1 – Principais características do Java. Fonte: Godoy, 2019, p. 10.

A característica de portabilidade é um dos principais motivos de sucesso do Java há


mais de 20 anos, pois permite que o programador escreva o código uma vez e execute
em qualquer sistema operacional. Por essa razão, o Java é considerado
multiplataforma, ou seja, neutro em relação à arquitetura do sistema operacional.

Para viabilizar a portabilidade, a plataforma Java é distribuída em dois pacotes. Veja as


diferenças na Figura a seguir.

Java Runtime Environment (JRE): é o pacote de execução. Contém apenas a JVM


(no Windows, é o executável [Link]) e o código compilado das bibliotecas-
padrão (por exemplo, o pacote [Link] possui funcionalidades para a
manipulação de Strings). Qualquer pessoa interessada em executar um programa
Java, deverá ter a JRE instalada em sua máquina.
Java Development Kit (JDK): é o pacote de desenvolvimento. Contém o JRE mais
o compilador Java (no Windows, o executável [Link]), códigos-fonte,
documentação e ferramentas. Deve ser instalado pelo desenvolvedor para criar
projetos.

Figura 4: Diferença entre os pacotes JDK e JRE. O JRE (ambiente de execução JAVA) faz parte
do JDK (kit de desenvolvimento Java). Se um equipamento apenas executa programas Java,
então que ele tenha instalado o JRE
#ParaTodosVerem

Fonte: Java Development Kit (JKD). Dicas de Java. Disponível em: [Link]

Ambiente de desenvolvimento

Então, vamos começar a trabalhar com Java? Como já comentado, o ambiente de


desenvolvimento é chamado de IDE. No caso do Java, o IDE também precisa que o JDK
já esteja instalado na máquina de trabalho. Juntos, JDK e IDE fornecem um ambiente
adequado para desenvolvimento de programas em Java. Portanto, para trabalhar com
o desenvolvimento de algoritmos desta disciplina você precisará:

1. Instalar a versão mais atualizada do JDK.


2. Instalar uma IDE. Você pode usar o IntelliJ, Eclipse, VS Code ou outra IDE que dê
suporte ao Java e que seja do seu interesse pessoal. Isto posto, nós
recomendamos que você utilize o IntelliJ nesta disciplina caso não tenha
experiência prévia em Java.

Observe que o passo-a-passo para estes dois itens já estão dentro do conteúdo da
videoaula no início desta disciplina.

Criando meu primeiro algoritmo em Java

Se você chegou até aqui, entendo que você:

1. Já sabe para que usam o Java nas empresas.

2. Já sabe que Java é uma linguagem de programação diferente do Python (mas que
podemos reaproveitar alguns conceitos).
3. Já instalou o JDK e uma IDE (como o IntelliJ) em seu computador, e que ambos estão
funcionando.

a. Todos os exemplos nesta disciplina utilizarão o IntelliJ como base, mas você
possui liberdade para optar por outras IDEs de Java.
b. Você não usará as plataformas de desenvolvimento em Python nesta disciplina –
portanto, esqueça opções como o PyCharm e Google Colab, beleza?

Logo, vamos criar o nosso primeiro algoritmo? O primeiro passo é a criação do projeto.
Ao abrir o IntelliJ pela primeira vez você poderá ver um aviso como o da figura a seguir.
Basta selecionar Do not import settings e, em seguida, clicar em OK.

#ParaTodosVerem

Criando um projeto

Agora, ao abrir o IntelliJ é provável que você veja uma tela parecida com esta. Vamos
clicar em New Project. Isso permitirá que criemos uma única pasta contendo todo o
nosso código em Java.

IMPORTANTE
Ainda que tenhamos demonstrado um projeto de exemplo para
você na videoaula, sugerimos que você siga novamente este
passo-a-passo. Afinal de contas, é importante adquirir experiência
ao criar diferentes projetos e compreender o seu funcionamento.
#ParaTodosVerem

Ao clicar neste botão você terá acesso a outra janela. Nesta nova janela aparecerão mais
detalhes para o seu projeto. Informe as seguintes opções:

1. Name: preencha um nome compreensível para o projeto. Evite nomes como


“projeto1” (até porque depois você pode esquecer o que significa isto), mas
procure atribuir nomes como “ProjetoDisciplinaSemana1”, por exemplo. Fique à
vontade para definir o nome que quiser.
2. Location: escolha uma pasta em seu computador em que ficará este arquivo. Dê
preferência a uma pasta a qual você já costuma deixar os seus algoritmos
desenvolvidos em outras disciplinas (quer dizer, uma pasta em que você não
esqueça depois).
3. Language: deixe em Java.
4. Build system: deixe marcado como IntelliJ.
5. JDK: deixe a versão em que estiver marcada. Ainda que abaixo esteja marcada a
versão 20, você poderá ver uma versão mais atualizada dependendo do mês em
que você instalou o JDK em seu computador.
6. Demais opções: deixe como estão.

Depois disso, clique no botão Create, disponível no canto inferior direito.


#ParaTodosVerem

Pronto! O seu projeto já está criado. Veja o exemplo na tela a seguir:

#ParaTodosVerem

Observe algumas coisas:

1. A aparência é muito parecida com o PyCharm. Logo, se você já trabalhou com o


PyCharm em raciocínio computacional, não sentirá muitas dificuldades ao
trabalhar com o IntelliJ.
2. À esquerda você pode ver a estrutura do projeto: aqui, somente temos por
enquanto um único arquivo contendo o nosso código Java: o [Link].
3. À direita, você pode ver um código de exemplo que o próprio IntelliJ criou. Vamos
substituir este código com a nossa própria lógica em breve.

Mas, antes de colocar o nosso próprio código, vamos testar o IntelliJ. No canto superior
esquerdo você pode perceber uma série de botões. Gostaria de chamar a atenção para
alguns deles – mais em específico, estes destacados a seguir, em vermelho:

#ParaTodosVerem

Martelo verde (build): o IntelliJ tentará compilar o seu projeto, e você saberá de
qualquer erro que o seu código possa ter. Ou, se não existem erros, aparecerá uma
mensagem lhe informando sobre isto.
Triângulo verde (run): o IntelliJ tentará compilar o seu projeto. Se der certo, ele
executará o seu código logo em seguida. Caso contrário, ele mostrará quaisquer
erros.
Inseto verde (debug): o IntelliJ tentará compilar o seu projeto. Se der certo, ele
executará com um debugger o seu código logo em seguida. Caso contrário, ele
mostrará quaisquer erros.
1. O debugger é uma poderosa ferramenta para verificar (depurar) o seu
código enquanto é executado, linha por linha. Ele é muito útil para
entender o comportamento do seu código.

Bom, vamos testar as funcionalidades de build e run antes de avançarmos?

Build
Clique no botão Build, no canto superior direito. Aguarde alguns segundos. Você verá
que aparecerá no canto inferior esquerdo uma mensagem como “Build completed
successfully”. Isso significa que o seu projeto foi compilado com sucesso, e está pronto
para ser testado. Você também pode ver mais detalhes sobre isto ao clicar na aba Build,
na parte inferior do IntelliJ.

#ParaTodosVerem

Se você tivesse qualquer erro em seu código você veria a mensagem “Build completed
with X error(s) and Y warning(s)”, em que X é o número de erros e Y é o número de avisos
em seu código. Isso significa que o seu código possui erros que precisam ser resolvidos
antes de continuar. Os avisos podem ser ignorados, mas geralmente possuem dicas
para melhorar a qualidade do seu código.

Run

Agora, clique no botão Run, no canto superior direito do IntelliJ. Se não houver erros, o
seu código será executado. Veja a imagem a seguir: ao clicar na aba Run no canto
inferior esquerdo do IntelliJ, você verá os detalhes da execução (destacados pelo
retângulo em lilás, a seguir). A mensagem “Process finished with exit code 0” indica que
o seu código foi encerrado sem erros.

#ParaTodosVerem
DICA
Na maioria das vezes você escolherá a opção run ou debug. Você
somente usará alguma dessas opções para testar o seu código.
Em outras palavras: você não precisará clicar em build, depois em
run e em debug.

Um exemplo em Python e em Java

O que acha de pegarmos um código que já existe em Python e o migrarmos para Java?
Veja o exemplo a seguir de um algoritmo simples em Python que solicita ao usuário um
número e verifica se ele é positivo, negativo ou zero:

1 # Exemplo em Python
2 numero = int(input("Digite um número: "))
3
4 if numero > 0:
5 print("O número é positivo.")
6 elif numero < 0:
7 print("O número é negativo.")
8 else:
9 print("O número é zero.")

Se você já passou pela disciplina Raciocínio Computacional, entenderá conceitos como


if/elif/else, variáveis, comparações de valores, e entrada e saída de dados. Dito isso,
vamos testar exatamente o mesmo código, mas agora escrito em Java. Para isso,
apague todo o código dentro do seu projeto no IntelliJ. A sua aba [Link] deverá ficar
parecida com isto:
#ParaTodosVerem

Agora, cole o código a seguir dentro do seu arquivo [Link]. Ele faz a mesma coisa do
código anterior em Python – a única diferença é que foi escrito em Java:

1 // Exemplo em Java
2 import [Link];
3
4 public class Main {
5 public static void main(String[] args) {
6 Scanner scanner = new Scanner([Link]);
7 [Link]("Digite um número: ");
8 int numero = [Link]();
9
10 if (numero > 0) {
11 [Link]("O número é positivo.");
12 } else if (numero < 0) {
13 [Link]("O número é negativo.");
14 } else {
15 [Link]("O número é zero.");
16 }
17 }
18 }
O seu IntelliJ deve ficar parecido com isto:

#ParaTodosVerem

Agora, basta clicar nos botões Run ou Debug, no canto superior esquerdo, e testar o seu
código. Veja como ficou no meu caso logo depois de ter clicado no botão Run:

#ParaTodosVerem
Você deve ter percebido algumas mudanças entre os códigos em Python e em Java.
Pensando em analogias, é como se estivéssemos aprendendo espanhol e, depois,
aprendendo italiano. São estruturas que são parecidas e diferentes, ao mesmo tempo.
Cada linguagem possui as suas particularidades e casos de uso, e com o Java não é
diferente. Portanto, a partir deste momento aprenderemos sobre a sintaxe e conceitos
básicos em Java.

Sintaxe e conceitos do Java

O que acha de, primeiramente, entender as principais diferenças entre Java e Python?

Aspecto Python Java

Não utiliza ponto e vírgula no Utiliza ponto e vírgula no final de


Sintaxe básica
final de cada instrução. cada instrução.

Usa cerquilha (#) para Utiliza duas barras (//) para


comentários que ocupam uma comentários que ocupam uma
Comentários
linha, e duas aspas duplas ("") linha, e barra e asteriscos (/* e */)
para comentários de bloco. para comentários de bloco.

A indentação (espaços ou
A indentação (geralmente quatro
tabulações) não tem significado
espaços ou uma tabulação) é
Indentação estrutural. No lugar da indentação,
usada para delimitar blocos de
usamos as chaves ({ }) para
código. Não são usadas chaves.
delimitar os blocos de código.

Fortemente tipada: você precisa


Tipagem dinâmica: não é preciso
informar o tipo de dado daquela
Tipos de dados declarar explicitamente o tipo da
variável (exemplos: int, double,
variável.
boolean, String).

As variáveis não precisam ser As variáveis precisam ser


Declaração de declaradas com um tipo declaradas com seu tipo antes de
variáveis específico, pois a tipagem é serem utilizadas. Exemplo: “int
dinâmica. Exemplo: “idade = 25”. idade = 25;”.

O conceito de constante não


existe em Python. Por isso,
geralmente temos o hábito de Usamos a palavra-chave "final"
Constantes nomear com letras maiúsculas as para declarar constantes. Exemplo:
variáveis que devem ser “final int PI = 3.14;”.
entendidas como sendo
constantes. Exemplo: “PI = 3.14”.
Sem mudanças: usamos o
Usamos o operador "+" para
operador "+" para
Concatenação concatenar Strings. Exemplo:
concatenar Strings. Exemplo:
de Strings “nomeCompleto = nome + " " +
“String nomeCompleto = nome + " "
sobrenome”.
+ sobrenome;”.

Usamos o método equals() para


Usamos o operador "==" para
Comparações comparar o conteúdo de Strings.
comparar o conteúdo de Strings.
de Strings Exemplo: “if
Exemplo: “if soma == "João":”.
([Link]("João"))”.

A conversão automática de tipos,


Precisamos explicitar o tipo de
sem a necessidade de dizer
dado que queremos converter.
Conversão de tipos explicitamente o que estamos
Exemplo: “double x = (double)
querendo converter. Exemplo: “x
numeroInteiro;”.
= float(numeroInteiro)”.

Estruturas Usamos "if", "else if" (no lugar do


Usamos "if", "elif" e "else".
condicionais "elif") e "else".

Estruturas de Utilizamos "for" e "while" Sem mudanças: utilizamos "for" e


repetição para loops. "while" para loops.

Utiliza arrays e coleções como


Utiliza listas, tuplas e dicionários
Coleções de dados ArrayList, LinkedList e HashMap
para armazenar dados.
para armazenar dados.

Você pode ter percebido que Java precisa de mais “coisas” para funcionar: precisamos
usar chaves (“{“ e “}”) para delimitar blocos de código, informar o tipo de dados para
cada variável e, ainda, usar ponto e vírgula (“;”) no final de cada instrução. Outras
linguagens mais clássicas e populares como C, C++ e C# são muito parecidas. Na
verdade, a linguagem Java herdou a sua sintaxe da linguagem C, e o seu modelo de
objetos é baseado no modelo do C++.

Essa relação existe porque C e C++, sempre muito populares, iniciaram a era moderna
da programação. Assim, ao se basear no legado dessas duas linguagens, os
desenvolvedores que já conheciam estas linguagens conseguiram facilmente mudar
para o Java.

Agora, vamos entender melhor os seus conceitos básicos – começando pelos tipos de
dados.
Tipos de dados Java

O Java é uma linguagem fortemente tipada. Isso significa que, ao declarar uma variável,
você precisa especificar o tipo de dados que ela vai armazenar. Pense nisso como uma
caixa que só aceita um tipo específico de item.

Por exemplo, em Python, você pode fazer isso:

numero = 10

Mas, em Java, você precisa especificar o tipo de dados da variável assim:

int numero = 10;

Percebeu também o ponto e vírgula no final? Em Java, é necessário adicionar um ponto


e vírgula (;) no final de cada comando.

O Java tem tipos de dados orientados a objeto (que veremos nas próximas Unidades) e
tipos de dados primitivos (elementares, têm valores binários comuns) – esses últimos
são mostrados na Tabela a seguir.

Tamanho
Tipo Significado Intervalo
em bits

boolean Verdadeiro ou falso. 8 bits ou 1 byte. true ou false.

\u0000 a \uffff
Caractere (letra ou 16 bits ou (Estes códigos referem-se às letras,
char
símbolo). 2 bytes. números e símbolos dos alfabetos do
mundo inteiro).

Ponto flutuante de 32 bits ou Aproximadamente ±3.40282347E+38


float
precisão simples. 4 bytes. (6 a 7 dígitos decimais significativos).

Aproximadamente ±1.797693134862
Ponto flutuante de 64 bits ou
double 31570E+308 (15 dígitos decimais
precisão dupla 8 bytes.
significativos).
byte Inteiro 8 bits ou 1 byte. –128 a 127

16 bits ou
short Inteiro curto. –32.768 a 32.767
2 bytes.

32 bits ou
int Inteiro. –[Link] a [Link]
4 bytes.

64 bits ou –[Link].854.775.808 a
long Inteiro longo.
8 bytes. [Link].854.775.807

Tabela 2: Tipos de dados primitivos do Java. Fonte: Horstmann; Cornell, 2010, p. 21.

Um cuidado especial deve ser feito ao representar números no Java. Para evitar
enganos, devem ser usadas letras especiais, como apresentado na Tabela 3.

Código Regra Exemplo Observações

Números float termina float a = 7.1f;


float Um número com ponto
m com f ou F. float b = 3.1415F;
flutuante e sem letra no final
é double por padrão no Java.
Números double termin double c = 7.1d;
double
am com d ou D. double d = 3.1415D;
Apenas para identificação de
tipo, maiúsculas e
Números long long e = 12l;
long minúsculas são equivalentes.
terminam com l ou L. long f = 25L;

Parar representar
int decVal = 26; // 26 em decimal
números em
int int hexVal = 0x1A; // 26 em hexadecimal
diferentes sistemas de
int binVal = 0b11010; // 26 em binário
numeração.

Tabela 3: Sintaxe para tipos de dados com ponto flutuante. Fonte: Autores (2020).

O Java também define alguns caracteres especiais na escrita de textos, como


apresentado na Tabela 4, com exemplos na Figura 5.

Código Significado

\b Backspace (volta um caracter)

\f Form feed (nova página)

\n New line (nova linha)

\r Carriage return (retorno de carro)


\t Tab (espaço de tabulação)

\" Escrita do caractere de aspas duplas

\’ Escrita do caractere de aspas simples ou apóstrofe

\\ Escrita de barra invertida

\uXXXX Escrita de códigos em hexadecimal são precedidos por \u

Tabela 4: Código Java para caracteres especiais. Fonte:Java Tutorials, 2020.

O que acha de testarmos um código que exemplifique estes caracteres especiais?


Execute o código a seguir na sua IDE:

public class Main {


public static void main(String[] args) {

[Link]("linha1\tcoluna1\nlinha2\tcoluna2");
}
}

O que este código faz? Vamos analisar linha por linha:

1. public class Main {

Aqui, estamos definindo uma classe chamada "Main". Em Java, é comum que o
nome do arquivo e o nome da classe principal sejam os mesmos. Por isso, se o
nome do nosso arquivo é [Link], esta linha se chama public class Main. Se o
nome do nosso arquivo fosse [Link], esta linha se chamaria public class
Chinelo.

2. public static void main(String[] args) {

Dentro da classe "Main", temos um método chamado "main". Esse é o ponto de


entrada do programa Java. É onde a execução do programa começa.

IMPORTANTE
Em Python, a execução começa sempre pela primeira linha. Em
Java, ela começa sempre pelo método main().
O método "main" é declarado como público (public), estático (static) e sem retorno
(void). Em breve entenderemos melhor o que isso significa, beleza?
"String[] args" é um parâmetro do método "main" que permite receber
argumentos da linha de comando, se necessário. É comum usarmos argumentos
adicionais para executar os nossos programas conforme adquirimos mais
experiência.

3. [Link]("linha1\tcoluna1\nlinha2\tcoluna2");

Essa linha de código imprime uma mensagem na saída padrão, que é exibida no
console.
Se fosse em Python, esta linha seria
print("linha1\tcoluna1\nlinha2\tcoluna2")
"[Link]" é um objeto que representa a saída padrão (no nosso caso, no
terminal/prompt de comando do computador).
"println" é um método que imprime a mensagem entre parênteses e adiciona
uma quebra de linha no final.
A mensagem entre aspas é: "linha1\tcoluna1\nlinha2\tcoluna2". Aqui,
utilizamos alguns caracteres especiais:
1. "\t" é o caractere especial de tabulação, que insere um espaço de
tabulação.
2. "\n" é o caractere especial para determinar uma nova linha, que
inicia uma nova linha.

Ou seja: o código imprime duas linhas de texto no console, com uma formatação de
colunas usando caracteres de tabulação. A saída seria:

linha1 coluna1
linha2 coluna2

No Java, declaramos uma variável informando o seu tipo de dados, seguido do seu
nome. Veja também alguns exemplos na Figura 6.

tipo nomeDaVariavel;
tipo nomeDaVariavel = valor;
O Java também possui a capacidade de deduzir o tipo de dados de acordo com a
primeira atribuição. Isso não significa que a variável não tenha tipo de dado, ou que
esse tipo possa mudar, é apenas uma conveniência. Para declarar uma variável com
esse recurso, utilizamos a palavra-chave var.

var nomeDaVariavel = valor;

Ao declarar uma variável, é importante saber que:

Assim como funciona no Python, o nome das variáveis é case-sensitive. Isso


significa que o Java também diferencia nomes escritos em letras maiúsculas e
minúsculas.
Não é possível começar o nome de uma variável com um dígito (número) ou
utilizar uma palavra reservada da linguagem (isso significa que não é legal chamar
uma variável de “class” ou de “void”, por exemplo).
Por convenção e boas práticas, iniciamos o nome de variável com letra
minúscula.
Para a atribuição de valores a variáveis no Java, utilizamos o símbolo =.

IMPORTANTE
Assim como no Python, o símbolo de atribuição (=) é diferente de
comparação de igualdade (==).

Constantes

Uma constante é declarada quando precisamos lidar com dados que não devem ser
alterados durante a execução do programa. É comum utilizar a palavra reservada
final para representar a constante. Com ela, a variável só pode ser inicializada uma
única vez, virando constante. Execute o código a seguir.

EXEMPLO
Exemplo de aplicação 1: crie um algoritmo em Java contendo
uma variável do tipo int, outra do tipo float e outra do tipo String.
A variável do tipo float precisa conter um valor. O algoritmo
também precisa ter duas constantes: uma do tipo float, e outra do
tipo String.

public class Main {


public static void main(String[] args)
{
// Exemplos de declaração e
atribuição de variável
int numero;
float altura = 1.70f;
String nome;

// Exemplos de declaração e
atribuição de constante
final float PI =
3.1416F;
final String NOME_PAGINA = "home";
}
}

Este código rodará, mas não terá nenhum resultado. Veja que ele possui três variáveis e
duas constantes, e sempre seguindo o padrão tipo nomeDaVariavel:

1. Variáveis:

a. numero (tipo: int);


b. altura (tipo: float, valor inicial: 1.70);
c. nome (tipo: String);

2. Constantes:

a. PI (tipo: float, valor constante: 3.1416);


b. NOME_PAGINA (tipo: String, valor constante: “home”).

Expressões aritméticas

As expressões aritméticas do Java envolvem operadores aritméticos e operandos, que


são variáveis ou constantes do tipo numérico, indicados na tabela a seguir. Perceba que
são os mesmos operadores que você já viu em Python:

Operador Função Exemplos


+ Soma 3 + 4; x + y;

- Subtração 10 – 5; a – b;

* Multiplicação 5 * 3; m * n;

/ Divisão 12 / 6; x / y;

Resto da divisão
% 9 % 2;
inteira

Precedência = sequência de resolução da fórmula:

1º Parênteses: ( e )

2º Multiplicação e divisão: * e /

Quando houver
3º Soma e subtração: + e -
mais de um
operador com a
Exemplo: Resultado:
mesma
precedência: real
int x = 3 + 4 - 8 / 4 * 3 - 5; x = -4
izar a operação
x=3+4–2*3–5
que aparecer
x=3+4–6–5
primeiro, na
x = 7 – 6 -5
leitura
x=1–5
da esquerda para
x = -4
a direita.

int x = 3 + (4 - 8) / 4 * (3 - 5); x=5


x = 3 + (-4) / 4 * (–2)
x = 3 + (-1) * (-2)
x=3+2
x=5

Tabela 5: Operadores aritméticos. Fonte: Autores (2020).

Expressões lógicas

As expressões lógicas envolvem operadores lógicos ou operadores relacionais, e os


operandos são relações ou variáveis ou constantes do tipo lógico. Veja que as
expressões mudam um pouco em relação ao Python:

1. Python: “not”. Java: “!”;


2. Python: “and”. Java: “&&”;
3. Python: “or”. Java: “||”.

Negação / Não logico: ! E lógico: && OU lógico: ||


(not) (and) (or)

x y (x && y) x y (x || y)

x !x true true true true true true

true false true false false true false true

false true false true false false true true

false false false false false false

Precedência = sequência de resolução da fórmula:

1º Parênteses: ( e )

2º Negação: !

3º E lógico: &&

4º OU lógico: ||
Quando houver mais
de um operador com a
Exemplo: Resultado:
mesma
boolean p = (8 > 4) && !((7 >= 10) || (5 != p = false precedência: realizar a
operação que aparecer
2));
p = true && !(false || true) primeiro, na leitura
da esquerda para a
p = true && !(true)
p = true && false direita.

p = false

boolean p = (8 > 4) && !(7 >= 10) || (5 != 2); p = true

p = true && !false || true


p = true && true || true
p = true || true
p = true

Tabela 6: Operadores lógicos. Fonte: Autores (2020).


Operador Função Exemplos

== Igual a 3 == 3; x == y; O resultado de uma


operação relacional
> Maior que 5 > 4; x > y; sempre é um valor
lógico, ou no
< Menor que 3 < 6; x < y; Java boolean:
true ou false.
>= Maior ou igual a 5 >= 3; x >= y;

<= Menor ou igual a 3 <= 5; x <= y;

!= Diferente de 8 != 9; x != y;

Tabela 7: Operadores relacionais. Fonte: Autores (2020).

O que acha de testarmos tais operadores?

EXEMPLO
Exemplo de aplicação 2: crie um algoritmo em Java que contenha
três variáveis inteiras, duas booleanas e uma do tipo float. Utilize
comentários e operadores aritméticos, lógicos e relacionais no
código.

public class Main {


public static void main(String[] args)
{
// declaração das variáveis
int x, y;
int X; //X maiúsculo é
diferente de x minúsculo.
boolean p, q;
float a = 10.5f;

/*
Aqui atribuímos valores às
variáveis que criamos anteriormente.
Perceba que todas as linhas
terminam com ponto e vírgula.
*/
x = 10;
y = x - 38;
X = 9 % 2;
p = (3 >= 5);
q = (true || false);
/*
Aqui mostramos uma sequência de
mensagens na tela.
*/
[Link]("x = " + x);
[Link]("y = " + y);
[Link]("X = " + X);
[Link]("p = " + p);
[Link]("q = " + q);
[Link]("a = %.2f",
a*3);
}
}

Agora, como este código funciona? Vamos por partes:

1. public class Main {

Aqui, estamos definindo uma classe chamada "Main", que é a classe principal do
programa.

2. public static void main(String[] args) {

Dentro da classe "Main", temos o método "main", que é o ponto de entrada do


programa Java.

3. int x, y;

Aqui, declaramos duas variáveis inteiras chamadas "x" e "y".

4. int X;

Declaramos outra variável inteira chamada "X". É importante observar que, em


Java, letras maiúsculas e minúsculas são diferentes. Portanto, "X" é diferente de
"x".

5. boolean p, q;

Aqui, declaramos duas variáveis booleanas chamadas "p" e "q".

6. float a = 10.5f;

Declaramos uma variável de ponto flutuante chamada "a" e atribuímos a ela o


valor 10.5. É necessário acrescentar o "f" ao final para indicar que é um valor de
ponto flutuante.

DICA
Uma variável de ponto flutuante é um número com uma
quantidade variável de casas decimais. Logo, pode indicar um
número com zero, uma, duas, três ou mais casas decimais.

7. x = 10;

Atribuímos o valor 10 à variável "x".

8. y = x - 38;

Atribuímos o resultado da expressão "x - 38" à variável "y".

9. X = 9 % 2;

Atribuímos o resultado da operação de módulo (resto da divisão) entre 9 e 2 à


variável "X". O resultado será 1, pois o resto da divisão do número inteiro 9 por 2 é
1.

10. p = (3 >= 5);

Atribuímos o resultado da expressão booleana "3 >= 5" (que é falsa) à variável "p".

11. q = (true || false);

Atribuímos o resultado da expressão booleana "true || false" (que é verdadeira) à


variável "q".

12. [Link]("x = " + x);

Mostramos (imprimimos) a mensagem "x = " concatenada com o valor da variável


"x".

13. [Link]("y = " + y);

Mostramos (imprimimos) a mensagem "y = " concatenada com o valor da variável


"y".

14. [Link]("X = " + X);


Mostramos (imprimimos) a mensagem "X = " concatenada com o valor da variável
"X".

15. [Link]("p = " + p);

Mostramos (imprimimos) a mensagem "p = " concatenada com o valor da variável


"p".

16. [Link]("q = " + q);

Mostramos (imprimimos) a mensagem "q = " concatenada com o valor da variável


"q".

17. [Link]("a = %.2f", a*3);

Usamos o método printf para imprimir o valor de "a" multiplicado por 3 com
somente duas casas decimais.

Leitura e escrita de dados no dispositivo-padrão

Notou este monte de “[Link]”, não é? Em Python, estávamos acostumados


a somente usar print() para escrever informações na tela e input() para ler dados do
usuário. Em Java, as coisas são um pouco (só um pouco) mais complexas.

Relembrando: um programa geralmente interage com o usuário para obter dados e


para exibir o resultado do seu processamento na tela do computador. Essas operações
básicas são:

A entrada de dados (input, ou leitura de dados) é feita quando o programa recebe


em uma variável o conteúdo digitado no teclado, que é o dispositivo-padrão para
obtenção de dados.
A saída de dados (output, ou escrita de dados) é feita quando o programa envia o
resultado de um processamento para o console, ou tela, que é o dispositivo-
padrão para exibição de dados.

Vamos para alguns exemplos? Execute o código a seguir e compare os resultados de


cada um dos exemplos.

EXEMPLO
Exemplo de aplicação 3: crie um código em Java o qual mostre na
tela o nome, idade e altura de uma pessoa. Estas três informações
deverão ficar armazenadas em três variáveis.

public class Main {


public static void main(String[] args)
{
// Variáveis com diferentes tipos
de dados
String nome = "Rafaela";
int idade = 32;
double altura = 1.65;

// Exemplo 1: Uso do
[Link] para exibir dados
[Link]("Exemplo 1:");
[Link]("Nome: " +
nome);
[Link]("Idade: " +
idade);
[Link]("Altura: " +
altura);
[Link]("Nome: " + nome
+ ", Altura: " + altura);

// Exemplo 2: Uso do
[Link] para exibir dados
[Link]("\nExemplo
2:\n");
[Link]("Nome: " + nome +
"\n");
[Link]("Idade: " + idade
+ "\n");
[Link]("Altura: " +
altura + "\n");
[Link]("Nome: " + nome +
", Altura: " + altura + "\n");

// Exemplo 3: Uso do
[Link] para formatar e exibir
dados
[Link]("\nExemplo
3:");
[Link]("Nome: %s\n",
nome);
[Link]("Idade: %d\n",
idade);
[Link]("Altura:
%.2f\n", altura);
[Link]("Nome: %s,
Altura: %.2f\n", nome, altura);
[Link]();
// Exemplo 4: Uso do
[Link] para formatar e exibir
dados
[Link]("\nExemplo
4:");
[Link]("Nome: %s\n",
nome);
[Link]("Idade: %d\n",
idade);
[Link]("Altura:
%.2f\n", altura);
[Link]("Nome: %s,
Altura: %.2f\n", nome, altura);
[Link]();

// Exemplo 5: Uso do StringBuilder


para construir a mensagem
[Link]("\nExemplo
5:");
StringBuilder mensagem = new
StringBuilder();
[Link]("Nome:
").append(nome).append("\n");
[Link]("Idade:
").append(idade).append("\n");
[Link]("Altura:
").append(altura).append("\n");
[Link]("Nome:
").append(nome).append(", Altura:
").append(altura).append("\n");
[Link](mensagem);
}
}

As mensagens que foram mostradas dentro de cada um destes exemplos são iguais,
não é? Então, qual é a diferença entre cada um destes exemplos? Bom, cada um destes
exemplos mostra maneiras diferentes de se mostrar uma mensagem na tela. Você
poderá escolher qualquer uma dessas formas quando estiver construindo os seus
algoritmos. Vejamos:

Exemplo 1:

a. Concatena textos e o conteúdo das variáveis com o operador “+”.


b. Utiliza o [Link] para exibir as informações na tela. O println adiciona
automaticamente uma quebra de linha ao final de cada texto mostrado na tela.

Exemplo 2:
a. Também concatena textos e o conteúdo das variáveis com o operador “+”.
b. Utiliza o [Link] para exibir as informações na tela. O print mostra
exatamente o texto que gostaríamos de mostrar na tela, mas não adiciona
nenhuma quebra de linha automaticamente. É por isto que adicionamos
(opcionalmente) o caractere “\n” ao final de cada linha: para que a quebra de
linha seja inserida mesmo assim.
i. Sugestão: experimente remover o “\n” das linhas deste exemplo 2. Você
consegue perceber alguma mudança na saída do seu código?

Exemplo 3:

a. Usamos marcadores de posição (ex.: “%s”, “%d” e “%.2f” para exibir os dados
formatados das variáveis).
b. Usamos o [Link](o “f” final é de formatação) para formatar e exibir os
dados. Exemplos:
i. [Link]("Nome: %s\n", nome);: exibe o valor da variável nome na
posição do especificador de formato %s, que indica uma string. O caractere
“\n” é um caractere de nova linha, que adiciona uma quebra de linha na tela.
ii. [Link]("Idade: %d\n", idade);: aqui, temos o valor da variável
idade sendo exibido na posição do especificador de formato %d, que indica
um número inteiro.
iii. [Link]("Altura: %.2f\n", altura);: exibe o valor da variável altura
na posição do especificador de formato %.2f, que indica um número de
ponto flutuante com duas casas decimais.
iv. [Link]("Nome: %s, Altura: %.2f\n", nome, altura);: aqui, temos
uma combinação dos dois especificadores de formato %s e %.2f. O valor da
variável nome é exibido na primeira posição e o valor da variável altura é
exibido na segunda posição, formatado como um número de ponto
flutuante com duas casas decimais.

Exemplo 4:

a. Ele é uma alternativa ao [Link].


b. Dito isso, a forma de usar o [Link] é muito parecida com o
[Link] do exemplo 3.

Exemplo 5:

a. Utiliza o StringBuilder para construir a mensagem de output de forma eficiente,


concatenando as strings com o método append (perceba a quantidade de append
ao longo deste exemplo).
b. Em seguida, a mensagem é exibida usando o [Link].
c. O append do StringBuilder funciona com uma lógica parecida ao append nas
listas em Python. A diferença é que aqui construímos uma String, e não uma lista.

RESUMO: Se em Python, tínhamos o print(), agora, temos o


[Link]() ou [Link](). Também, podemos usar algumas
variações, como, por exemplo, o [Link]() e [Link]().

E para lermos os dados? Quer dizer: se no Python tínhamos o input(), o que teríamos no
Java? Uma das opções é o Scanner, que possui operações de entrada de dados pelo
teclado. Esta classe possui diversos métodos para obter diferentes tipos de dados,
sendo os mais utilizados:

String [Link](): retorna uma cadeia simples de caracteres, sem espaço. Em


outras palavras, ele captura apenas a primeira palavra que você digitou.
String [Link](): retorna uma cadeia de caracteres, com espaço. Em
outras palavras, ele captura tudo o que você digitou até apertar Enter, no teclado.
Provavelmente este seria o “principal” substituto do input() do Python.
int [Link](): retorna um valor do tipo int.
double [Link](): retorna um valor do tipo double, com ponto
flutuante.

Vamos para mais um exercício? Teste o código a seguir.

EXEMPLO
Exemplo de aplicação 4: crie um código em Java o qual peça para
que o usuário digite um nome (tipo String), uma idade (tipo int) e
uma altura (tipo float). Armazene cada um desses dados em uma
variável. Depois, mostre estes dados na tela para o usuário.

import [Link];
import [Link];

public class Main {


public static void main(String[] args)
{
[Link](new Locale("pt",
"BR"));
Scanner scanner = new
Scanner([Link]);
[Link]("Digite seu nome:
");
String nome = [Link]();

[Link]("Digite sua
idade: ");
int idade = [Link]();

[Link]("Digite sua
altura: ");
float altura =
[Link]();

[Link]("Nome: " +
nome);
[Link]("Idade: " +
idade);
[Link]("Altura: " +
altura);

[Link]();
}
}

Temos algumas coisas novas neste código. Vamos entender cada uma delas?

1. import [Link]; e import [Link];

Essas linhas importam as classes Scanner e Locale do pacote [Link], necessárias


para o funcionamento do código. Afinal de contas, usaremos algumas das suas
funcionalidades para ler os dados digitados pelo usuário.

2. [Link](new Locale("pt", "BR"));

Esta linha define as configurações regionais deste código para pt-BR (português do
Brasil) usando a classe Locale. Isso afetará a formatação numérica e outras
convenções culturais.
Geralmente, se o usuário quisesse digitar “um metro e sessenta e dois
centímetros” ele precisaria digitar o valor 1.62, certo? Com o Locale, o usuário
poderá agora digitar o valor 1,62 (observe a vírgula, e não o ponto para separar o
valor inteiro das casas decimais).
O uso do Locale é opcional – ele normalmente afeta o Scanner, mas não
necessariamente as saídas padrão do [Link]().
3. Scanner scanner = new Scanner([Link]);

Criamos um objeto Scanner para ler os dados da entrada padrão ([Link]), que
representa o teclado. O Scanner permite ler diferentes tipos de dados do usuário.

4. [Link]("Digite seu nome: ");

Exibe a mensagem "Digite seu nome: " para solicitar ao usuário que digite o seu
nome.

5. String nome = [Link]();

Utilizando o método nextLine() do Scanner, realizamos a leitura de uma linha de


texto digitada pelo usuário e a atribuímos à variável nome.

6. [Link]("Digite sua idade: ");

Exibe a mensagem "Digite sua idade: " para solicitar ao usuário que digite a sua
idade.

7. int idade = [Link]();

Utilizando o método nextInt() do Scanner, realizamos a leitura de um número


inteiro digitado pelo usuário e o atribuímos à variável idade.
Pensando em comparações, isso seria parecido com um idade = int(input("Digite
sua idade: “)) do Python.

8. [Link]("Digite sua altura: ");

Exibe a mensagem "Digite sua altura: " para solicitar ao usuário que digite a sua
altura.

9. float altura = [Link]();:

Utilizando o método nextFloat() do Scanner, realizamos a leitura de um número


de ponto flutuante (float) digitado pelo usuário e o atribuímos à variável altura.
Pensando em comparações, isso seria parecido com um altura=
float(input("Digite sua altura: “)) do Python.

10. [Link]("Nome: " + nome);, [Link]("Idade: " + idade);,


[Link]("Altura: " + altura);

Essas linhas exibem na saída padrão os valores digitados pelo usuário


concatenados com Strings informativas.
11. [Link]();

Finalmente, fechamos o objeto Scanner para liberar os recursos utilizados para a


leitura de dados.

Comandos de desvio e repetição

Desvio com o comando "if/else"

Você já aprendeu o if, elif e else em Python, não é? Agora, como ele seria em Java? Bom,
pensemos em um exemplo:

EXEMPLO
Exemplo de aplicação 5: converta o código a seguir de Python
para Java:

idade = int(input("Digite sua idade: "))

if idade < 18:


print("Você é menor de idade.")
elif idade >= 18 and idade < 60:
print("Você é adulto.")
else:
print("Você é um(a) idoso(a).")

O código apresentado foi desenvolvido em Python. Você pode perceber que ele possui
if, elif e else, não é mesmo? Veja a seguir como seria exatamente o mesmo código, mas
escrito em Java. Aproveite para testá-lo no IntelliJ (ou na sua IDE de preferência):

import [Link];

public class Main {


public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
[Link]("Digite sua idade: ");
int idade = [Link]();
if (idade < 18) {
[Link]("Você é menor de idade.");
} else if (idade >= 18 && idade < 60) {
[Link]("Você é adulto.");
} else {
[Link]("Você é um(a) idoso(a).");
}

[Link]();
}
}

Vamos analisar as principais diferenças, considerando o exercício apresentado:

1. Sintaxe:

Em Python, não é necessário utilizar parênteses em torno da expressão


condicional após as palavras-chave if, elif e else. Por exemplo, em Python: if idade
< 18:.
Em Java, a expressão condicional deve estar entre parênteses. Por exemplo, em
Java: if (idade < 18).
Em Python, temos o elif. Em Java, isto se chama de else if.

2. Operadores de comparação:

Os operadores de comparação em Python e Java são semelhantes, como <, >, <=,
>=, == e !=, que são usados para fazer comparações.
Veja que, no nosso exercício, não teríamos diferença nos operadores de
comparação utilizados entre Python e Java.

3. Conjunção lógica:

Em Python, a conjunção lógica "e" é representada pela palavra-chave and, como


no exemplo: elif idade >= 18 and idade < 60:.
Em Java, a conjunção lógica "e" é representada pelo operador &&, como no
exemplo: else if (idade >= 18 && idade < 60).

4. Blocos de código:

Em Python, a indentação é usada para delimitar blocos de código dentro das


estruturas condicionais. A indentação consistente é crucial para o funcionamento
correto do código. No exemplo Python fornecido, as linhas indentadas pertencem
ao bloco de código do if, elif ou else.
Em Java, os blocos de código são delimitados por chaves {}. Todas as linhas dentro
de um bloco de código devem estar entre chaves. No exemplo Java fornecido, as
chaves {} indicam os blocos de código associados ao if, else if ou else.

Desvio com o comando "switch"

Agora, você já deve ter encontrado alguns casos em que você precisa testar diferentes
valores de uma única variável ou, quem sabe, evitar a repetição de condições em cada
teste do seu if/else if/else. É para casos assim que existe uma alternativa ao if/else
if/else: o switch.

EXEMPLO
Exemplo de aplicação 6: crie um algoritmo em Java o qual
informe ao usuário se um determinado número é igual a 1, igual a
2, igual a 3, ou se o número é diferente de 1, 2 e 3.

Um exemplo de resolução para o exercício apresentado seria o


código a seguir. Perceba o uso de if, else if e else.

public class Main {


public static void main(String[] args)
{
int numero = 3;

if (numero == 1) {
[Link]("O número é
igual a 1");
} else if (numero == 2) {
[Link]("O número é
igual a 2");
} else if (numero == 3) {
[Link]("O número é
igual a 3");
} else {
[Link]("O número é
diferente de 1, 2 e 3");
}
}
}
Agora, e como seria uma solução utilizando switch? Teste o código a seguir.

public class Main {


public static void main(String[] args) {
int numero = 3;

switch (numero) {
case 1:
[Link]("O número é igual a 1");
break;
case 2:
[Link]("O número é igual a 2");
break;
case 3:
[Link]("O número é igual a 3");
break;
default:
[Link]("O número é diferente de
1, 2 e 3");
break;
}
}
}

O que mudou? Nesta versão utilizando switch, a variável numero é verificada em cada
caso (case) dentro do switch. Se o valor de numero corresponder a um caso específico,
o código dentro desse caso será executado. Se nenhum caso corresponder ao valor de
numero, o código dentro do default será executado.

A principal diferença aqui é a estrutura do código. O switch é uma forma mais concisa
de verificar valores específicos, tornando o código mais legível e fácil de entender.
Além disso, é útil quando existem muitos casos a serem verificados e o código precisa
ser mais organizado.

Por outro lado, é importante mencionar que nem todas as situações são adequadas
para o uso do switch. Em alguns casos, especialmente quando há condições mais
complexas ou envolvendo comparações diferentes, o if/else if/else pode ser mais
flexível e adequado.

Repetição com os comando "do" e "do-while"

Lembra do while do Python? Pois bem, também podemos usá-lo em Java. A sintaxe é
bem parecida, na verdade.
EXEMPLO
Exemplo de aplicação 7: converta o código a seguir de Python
para Java.

contador = 1
while contador <= 5:
print("Contagem:", contador)
contador += 1

Como você pode notar, este algoritmo escrito em Python usa o


while para repetir um bloco de código enquanto uma
determinada condição é verdadeira. Ele inicia o contador em 1 e
imprime a mensagem "Contagem:" seguida pelo valor do
contador. Depois, o contador é incrementado em 1. O loop
continua até que o contador atinja o valor 5, momento em que a
condição do while se torna falsa e o loop é encerrado.

Agora, execute o código em Java disponível a seguir.

public class Main {


public static void main(String[] args)
{
int contador = 1;
while (contador <= 5) {
[Link]("Contagem:
" + contador);
contador++;
}
}
}

Ao converter o código para Java, a estrutura do while é semelhante à do Python


(observe as linhas em negrito e itálico, e compare-as com o código em Python). A
condição é verificada antes de cada iteração do loop, e o bloco de código dentro do
while é repetido enquanto a condição for verdadeira.

Dois pontos principais de atenção:


Em Java, precisamos informar as condições de teste entre parênteses. É por isso
que agora temos while (contador <= 5) em vez de while contador <= 5.
Em Java, não usamos mais a indentação, mas sim as chaves para organizarmos os
blocos. É por isso que começamos e terminamos o bloco whilecom “{“ e “}”.
α. Isto posto, ainda usamos indentação para deixar o código mais legível,
somente.

EXEMPLO
Exemplo de aplicação 8: converta o código a seguir de Python
para Java.

numero = 0
while True:
print("Número:", numero)
numero += 1
if numero >= 5:
break

Aqui, o código escrito em Python usa um loop infinito (while True), mas é
interrompido pelo break quando numero atinge o valor 5. O código exibe o valor de
numero e o incrementa em cada iteração do loop.

Agora, como esta mesma lógica seria em Java? Teste o código a seguir.

public class Main {


public static void main(String[] args) {
int numero = 0;

do {
[Link]("Número: " + numero);
numero++;
} while (numero < 5);
}
}
No código Java, usamos um loop “do while”, que primeiro executa o bloco de código
dentro do do e, em seguida, verifica a condição no while. Enquanto a condição numero
< 5 for verdadeira, o loop continuará executando.

DICA
A principal diferença entre o loop “do while” em Java e o loop
“while” é que o loop “do while” em Java garante que o bloco de
código seja executado pelo menos uma vez, mesmo se a
condição já for falsa desde o início.

Repetição com o comando “for"

E você se lembra do for do Python? Ele também existe no Java, mas é um pouco mais
complexo. Vamos para um exemplo:

EXEMPLO
Exemplo de aplicação 9: converta o código a seguir de Python
para Java.

for i in range(10):
print("Número:", i)

Este código mostrará uma sequência de números de 0 até 9, não


é? Quer dizer, a função range() em Python gera uma sequência de
números. Em cada iteração do loop for, o valor atual desta
sequência é atribuído à variável i e a mensagem "Número:"
seguida pelo valor de i é mostrada na tela.

Agora, veja como ficaria exatamente o mesmo código, mas escrito


em Java. Teste-o:

public class Main {


public static void main(String[] args)
{
for (int i = 0; i < 10; i++) {
[Link]("Número: "
+ i);
}
}
}

Em Java, podemos usar uma estrutura de loop for tradicional para alcançar o mesmo
resultado. Inicializamos a variável i com 1, definimos a condição de parada como i < 6, e
incrementamos i em cada iteração. Dentro do loop, imprimimos a mensagem desejada.

A instrução for é sempre formada por três partes, e na seguinte ordem:

1. Inicialização: permite a criação e inicialização de variáveis.


2. Condição: mantém o for repetindo seu bloco de comandos enquanto verdadeira.
3. Operação: executada ao final de cada iteração (repetição) do for.

Portanto, interpretamos a linha for (int i = 0; i < 10; i++) como “faça
um loop onde temos um contador chamado ‘i’. Este contador ‘i’ é do tipo inteiro e
começa em 0. Este contador será incrementado de um em um enquanto for menor do
que 10. Quando for igual ou maior do que 10, devemos sair deste loop”.

DICA
“i++” é somente outra forma de escrevermos “i = i + 1”. Da mesma
forma, “i--” é outra forma de escrevermos “i = i - 1”. Como outro
exemplo, “i+=2” é outra forma de escrevermos “i = i + 2”.

Interrupção de repetição com o “continue” e com o “break”

Em algumas situações, precisamos interromper um comando de repetição. Para estes


casos, o Java disponibiliza dois comandos, o continue e o break. O funcionamento
deles é igual ao que já vimos em Python:

Continue: interrompe a repetição e executa a condição novamente.


Break: interrompe a repetição incondicionalmente.
O que acha de testar o código a seguir?

EXEMPLO
Exemplo de aplicação 10: crie dois loops usando Java. O primeiro
deve usar “break”, e o segundo, “continue”.

public class Main {


public static void main(String[] args)
{
// Exemplo de uso do break
[Link]("Exemplo com
break:");
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break; // Encerra o loop
quando i == 3
}
[Link]("Número: "
+ i);
}

[Link]();

// Exemplo de uso do continue


[Link]("Exemplo com
continue:");
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue; // Pula para a
próxima iteração quando i == 3
}
[Link]("Número: "
+ i);
}
}
}

O resultado deste algoritmo deverá ser:

Exemplo com break:


Número: 1
Número: 2
Exemplo com continue:
Número: 1
Número: 2
Número: 4
Número: 5

Veja que os dois loops geram uma sequência numérica de 1 a 5. A diferença é que o
primeiro é interrompido quando i é igual a 3 com o uso do break. Já o segundo loop
pula para a próxima iteração quando i é igual a 3.

Estrutura básica de dados: vetores

Muitas vezes, precisamos trabalhar com listas de valores. Para isso, o Java permite
definir estruturas conhecidas como vetores (arrays). Elas associam um conjunto de
valores a um índice, iniciado em 0. Podemos declarar um array utilizando o operador de
[]. Confira alguns exemplos nas figuras a seguir.

EXEMPLO
Exemplo de aplicação 11: crie um algoritmo em Java contendo
uma lista com cinco números. Percorra cada elemento desta lista
utilizando “for” e, em seguida, percorra com o “foreach”.

public class Main {


public static void main(String[] args)
{
int[] numeros = {1, 2, 3, 4, 5};

[Link]("Exemplo com o
loop for:");

// Perceba como é o jeito de


escrever o "for" em Java
for (int i = 0; i <
[Link]; i++) {
[Link]("Número: "
+ numeros[i]);
}

[Link]("\n\nExemplo
com o loop foreach:");
for (int numero : numeros) {
[Link]("Número: "
+ numero);
}
}
}

Recomendo muito que você teste o código apresentado. Você perceberá que a mesma
sequência numérica (1, 2, 3, 4 e 5) aparecerá duas vezes. Vamos por partes:

1. No método main, inicializamos um array (ou lista) com o nome numeros e contendo
os valores de 1 a 5.

2. Em seguida, temos o primeiro loop for que percorre o array utilizando uma variável i
como índice. A condição i < [Link] verifica se o índice é menor que o tamanho
do array. O parâmetro “.length” funciona de forma parecida com a função len() do
Python.

a. A cada iteração, o valor do elemento no índice i é acessado por meio de


numeros[i] e mostrado na tela utilizando [Link]("Número: " +
numeros[i]).

3. Após o primeiro loop for, utilizamos [Link]("\n\nExemplo com o loop


foreach:") para mostrar uma mensagem indicando o início do próximo loop.

4. No segundo loop, temos o loop foreach, em que declaramos uma variável numero do
mesmo tipo dos elementos do array.

a. O loop percorre todos os elementos do array numeros um por um, atribuindo o


valor do elemento atual à variável numero.
b. Para cada iteração, a mensagem "Número: " concatenada com numero é impressa
na saída utilizando [Link]("Número: " + numero).

DICA
O foreach é uma forma simplificada de percorrer uma sequência
de elementos, como um array ou uma lista, sem a necessidade de
um contador explícito. Ele itera (percorre) diretamente sobre os
elementos, sem fornecer acesso direto aos índices. O for (como
demonstrado no primeiro loop) é mais adequado quando
precisamos controlar explicitamente o índice e realizar
operações com base nele, enquanto o foreach (segundo loop) é
mais adequado quando só estamos interessados nos elementos
em si.

Vamos para um outro exemplo – agora, usando uma lista de strings. Como de costume,
teste o código a seguir.

EXEMPLO
Exemplo de aplicação 12: crie um algoritmo em Java contendo
uma lista com três strings. Percorra cada elemento desta lista
utilizando “for” e, em seguida, percorra com o “foreach”.

public class Main {


public static void main(String[] args)
{
String[] estudantes = new String[]
{"Maria", "Pedro", "João"};

[Link]("Exemplo com o
loop for:");
for (int i = 0; i <
[Link]; i++) {
[Link]("Estudante:
" + estudantes[i]);
}

[Link]("\n\nExemplo
com o loop foreach:");
for (String estudante :
estudantes) {
[Link]("Estudante:
" + estudante);
}
}
}

Ele é muito parecido com o exemplo anterior. Vejamos:

1. No método main, inicializamos um array de strings chamado estudantes com os


nomes "Maria", "Pedro" e "João".
2. Em seguida, temos o primeiro loop for, em que declaramos uma variável i que será o
índice para percorrer o array. A condição i < [Link] verifica se o índice é
menor que o tamanho do array (ou seja: o total de elementos da lista).

a. A cada iteração, o valor do elemento no índice i é acessado por meio de


estudantes[i] e é mostrado na saída utilizando [Link]("Estudante: "
+ estudantes[i]).

3. Após o loop for, utilizamos [Link]("\n\nExemplo com o loop foreach:")


para imprimir uma mensagem indicando o início do próximo exemplo.

4. No segundo loop, temos o loop foreach, em que declaramos uma variável estudante
do mesmo tipo dos elementos do array.

a. O loop percorre cada elemento do array estudantes um por um, atribuindo o valor
do elemento atual à variável estudante.
b. Para cada iteração, a mensagem "Estudante: " concatenada com estudante é
impressa na saída utilizando [Link]("Estudante: " + estudante).

E, da mesma forma que temos em Python, também é possível termos matrizes em Java.
Veja e execute o teste a seguir.

EXEMPLO
Exemplo de aplicação 13: crie um algoritmo em Java contendo
uma matriz numérica contendo três linhas e três colunas. Percorra
cada elemento desta lista utilizando “for” e, em seguida, percorra
com o “foreach”.

public class Main {


public static void main(String[]
args) {
int[][] matriz = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

[Link]("Exemplo com o
loop for:");
for (int i = 0; i <
[Link]; i++) {
for (int j = 0; j <
matriz[i].length; j++) {
[Link]("Elemento: " +
matriz[i][j]);
}
}

[Link]("\n\nExemplo
com o loop foreach:");
for (int[] linha : matriz) {
for (int elemento : linha) {

[Link]("Elemento: " +
elemento);
}
}
}
}

Agora, o que mudou? Vamos lá:

1. No método main, declaramos uma matriz bidimensional chamada matriz. Ela


contém três linhas e três colunas, preenchidas com os números de 1 a 9.

a. Veja a sintaxe “int[][]”. Estes dois pares de colchetes implicam que temos duas
dimensões: linhas e colunas.

2. Em seguida, temos o primeiro loop for, que percorre as linhas da matriz utilizando a
variável i como índice.

a. A condição i < [Link] verifica se o índice é menor que o tamanho do array


de linhas.
b. Dentro desse loop, temos outro loop for que percorre os elementos de cada linha
utilizando a variável jcomo índice.
i. A condição j < matriz[i].length verifica se o índice j é menor que o tamanho
do array de colunas da linha atual.
c. A cada iteração desses loops, o valor do elemento na posição matriz[i][j] é
acessado e impresso na saída usando [Link]("Elemento: " +
matriz[i][j]).

3. Depois deste primeiro for aninhado, utilizamos [Link]("\n\nExemplo


com o loop foreach:") para mostrar uma mensagem indicando o início do próximo
exemplo.
4. No segundo loop, temos o loop foreach que percorre cada linha da matriz, em que
declaramos uma variável linha do mesmo tipo dos elementos da matriz.

5. A cada iteração desse loop, a variável linha recebe uma linha completa da matriz.

a. Dentro desse loop, temos outro loop foreach que percorre os elementos de cada
linha, onde declaramos uma variável elemento do mesmo tipo dos elementos da
matriz.
b. A cada iteração desse loop, a variável elemento recebe um elemento individual da
linha atual.
c. Para cada elemento, a mensagem "Elemento: "concatenada com o valor do
elemento é impressa na saída usando [Link]("Elemento: " +
elemento).

Exercícios de fixação

Neste momento eu espero que você já tenha testado alguns algoritmos escritos em
Java na sua IDE (como o IntelliJ, Eclipse, ou VS Code) e que tenha assimilado algumas
semelhanças e diferenças entre Java e Python. Agora, é hora de testarmos algumas
coisas antes de avançarmos para a próxima unidade.

IMPORTANTE
Aprender desenvolvimento de software está diretamente
relacionado à prática. Portanto, recomendamos que você faça
estes exercícios antes de avançar. Isso pode te ajudar muito no
progresso da disciplina.

Além disso, lembre-se de que existem diferentes formas de se


alcançar o mesmo resultado: aqui, as nossas respostas são
apenas exemplos válidos de respostas, mas existem diferentes
implementações que funcionam da mesma forma.

EXERCÍCIO
Nível fácil
1. Crie um algoritmo em Java que solicita três números decimais
ao usuário. Em seguida, a média destes números é calculada e
mostrada na tela para o usuário.

2. Crie um algoritmo em Java que verifica se um número inteiro é


positivo, negativo ou zero.

3. Crie um algoritmo em Java que mostre na tela todos os


múltiplos de 3 entre os números 0 e 30 usando a estrutura “do
while”.

4. Crie um algoritmo em Java que peça ao usuário para que se


digite um número inteiro (exemplo: 14). Em seguida, o algoritmo
deve mostrar a tabuada do número digitado utilizando o “for”.

Nível médio

5. Crie um algoritmo em Java que peça ao usuário para que se


digite um ano (exemplo: 2032). Em seguida, o algoritmo deve
verificar se o ano informado é ou não bissexto.

6. Crie um algoritmo em Java que solicita um número inteiro ao


usuário. Em seguida, deve-se verificar se o número digitado é ou
não é um número primo.

7. Crie um algoritmo em Java que peça ao usuário a temperatura


em graus Celsius e converta-a para graus Fahrenheit. Além disso,
o programa deve imprimir se está frio (abaixo de 32°F), moderado
(entre 32°F e 80°F) ou quente (acima de 80°F).

Nível difícil

8. Desenvolva um algoritmo em Java que peça ao usuário um


número inteiro n e gere um padrão de asteriscos. Por exemplo, se
n for 5, o padrão seria assim:

*
**
***
****
*****
9. Crie um algoritmo em Java que solicita ao usuário para que
insira um número inteiro entre 1 e 1000 e converta-o em um
número romano. Por exemplo, se o usuário inserir 58, o programa
deve imprimir "LVIII".

Desafio

10. Crie um algoritmo em Java contendo a lógica do jogo da forca.


O programa deve escolher aleatoriamente uma palavra de uma
lista de palavras e o usuário deve adivinhar a palavra, uma letra
de cada vez. O usuário tem um número fixo de tentativas para
adivinhar a palavra.

11. Crie um algoritmo em Java que calcule a distância de


Levenshtein entre duas Strings. A distância de Levenshtein é a
quantidade mínima de edições de um único caractere (inserções,
exclusões ou substituições) necessárias para mudar uma palavra
para outra.

Resolução do exercício

Exercício 1:
1 import [Link];
2
3 public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.i
6
7 [Link]("Digite o primeiro nú
8 double numero1 = [Link]();
9
10 [Link]("Digite o segundo núm
11 double numero2 = [Link]();
12
13 [Link]("Digite o terceiro nú
14 double numero3 = [Link]();
15
16 double media = (numero1 + numero2 + nu
17
18 [Link]("A média é: " + med
19

Exercício 2:

1 import [Link];
2
3 public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.i
6
7 [Link]("Digite um número: ")
8 int numero = [Link]();
9
10 if (numero > 0) {
11 [Link]("O número é pos
12 } else if (numero < 0) {
13 [Link]("O número é neg
14 } else {
15 [Link]("O número é zer
16 }
17
18 [Link]();
19 }
Exercício 3:

1 public class Main {


2 public static void main(String[] args) {
3 int numero = 0;
4
5 do {
6 if (numero % 3 == 0) {
7 [Link](numero);
8 }
9 numero++;
10 } while (numero <= 30);
11 }
12 }

Exercício 4:

1 import [Link];
2
3 public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.i
6
7 [Link]("Digite um número: ")
8 int numero = [Link]();
9
10 [Link]("Tabuada de " + num
11
12 for (int i = 1; i <= 10; i++) {
13 int resultado = numero * i;
14 [Link](numero + " x "
15 }
16
17 [Link]();
18 }
19 }

Exercício 5:
1 import [Link];
2
3 public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.i
6
7 [Link]("Digite um ano: ");
8 int ano = [Link]();
9
10 boolean bissexto = false;
11
12 if (ano % 4 == 0) {
13 if (ano % 100 == 0) {
14 if (ano % 400 == 0) {
15 bissexto = true;
16 }
17 } else {
18 bissexto = true;
19 }

Exercício 6:

1 import [Link];
2
3 public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.i
6
7 [Link]("Digite um número: ")
8 int numero = [Link]();
9
10 boolean primo = true;
11
12 if (numero <= 1) {
13 primo = false;
14 } else {
15 for (int i = 2; i <= [Link](num
16 if (numero % i == 0) {
17 primo = false;
18 break;
19 }
Exercício 7:

1 import [Link];
2
3 public class Temperatura {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.i
6
7 [Link]("Digite a temperatu
8 double celsius = [Link]();
9
10 // Converte para Fahrenheit
11 double fahrenheit = (celsius * 9/5) +
12 [Link]("A temperatura em g
13
14 // Verifica e imprime se está frio, mo
15 if (fahrenheit < 32) {
16 [Link]("Está frio!");
17 } else if (fahrenheit <= 80) {
18 [Link]("Está moderado!
19 } else {

Exercício 8:
1 import [Link];
2
3 public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.i
6
7 [Link]("Digite um número int
8 int n = [Link]();
9
10 for (int i = 1; i <= n; i++) {
11 for (int j = 1; j <= i; j++) {
12 [Link]("*");
13 }
14 [Link]();
15 }
16
17 [Link]();
18 }
19 }

Exercício 9:

1 import [Link];
2
3 public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.i
6
7 String[] unidadesRomanas = {"", "I", "
8 String[] dezenasRomanas = {"", "X", "X
9 String[] centenasRomanas = {"", "C", "
10 String[] milharesRomanas = {"", "M", "
11
12 [Link]("Digite um número int
13 int numero = [Link]();
14
15 if (numero < 1 || numero > 4000) {
16 [Link]("Número inválid
17 } else {
18 String unidades = unidadesRomanas[
19 String dezenas = dezenasRomanas[(n
Exercício 10:

1 import [Link];
2 import [Link];
3
4 public class Main {
5 public static void main(String[] args) {
6 String[] palavras = {"abacaxi", "banan
7 Random random = new Random();
8 Scanner scanner = new Scanner(System.i
9
10 String palavraSelecionada = palavras[r
11 int tentativas = 6;
12 StringBuilder palavraAdivinhada = new
13 for (int i = 0; i < palavraSelecionada
14 [Link]("_");
15 }
16
17 [Link]("Bem-vindo ao jogo
18 [Link]("Tente adivinhar a
19

Exercício 11:
1 public class Main {
2 public static void main(String[] args) {
3 String palavra1 = "banana";
4 String palavra2 = "bandana";
5
6 int distancia = calcularDistanciaLeven
7 [Link]("Distância de Leven
8 }
9
10 public static int calcularDistanciaLevensh
11 int m = [Link]();
12 int n = [Link]();
13
14 int[][] matrizDistancia = new int[m +
15
16 for (int i = 0; i <= m; i++) {
17 matrizDistancia[i][0] = i;
18 }
19

Nesta Unidade, vimos os principais conceitos de programação básica usando a


linguagem Java, sendo que a prática desses conceitos apenas foi possível após a
instalação completa de um IDE, ou ambiente de desenvolvimento, que será utilizado
em todas as Unidades desta disciplina.

Com os recursos básicos de programação trabalhados, tais como declaração e


atribuição de variável, leitura e escrita de dados nos dispositivos-padrão (teclado e tela
do computador), utilização de comandos de desvio e repetição, e utilização de
estruturas de dados como vetores e matrizes, estamos prontos para prosseguirmos
explorando os conceitos da orientação a objetos nas próximas Unidades.

Referências Bibliográficas

ALVES, G. F. O. Qual a diferença entre JDK, JRE e JVM. Dicas de Java, 2023. Disponível
em: [Link] Acesso em: 1 nov.
2020.
GODOY, V. Programação orientada a objetos I. Curitiba, PR: IESDE, 2019.

HORSTMANN, C. S.; CORNELL, G. Core Java – volume I. 8. ed. São Paulo, SP: Pearson,
2010.

ORACLE. Primitive Data Types. Oracle, The Java™ Tutorials. Disponível em:
[Link] Acesso em:
1 nov. 2020.

SCHILDT, H. Java para Iniciantes. Porto Alegre, RS: Bookman, 2015.

TIOBE. Programming Community Index. TIOBE Index for February 2021, 2020.
Disponível em: [Link] Acesso em: 1 nov. 2020.

© PUCPR - Todos os direitos reservados.

Você também pode gostar