Fundamentos da Programação em Java
Fundamentos da Programação em Java
Objetos
UNIDADE 01
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.
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.
Listas e dicionários
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.
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
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.
#ParaTodosVerem
#ParaTodosVerem
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++.
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.
Vamos juntos?
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.
#ParaTodosVerem
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.
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.
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.
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
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
Observe que o passo-a-passo para estes dois itens já estão dentro do conteúdo da
videoaula no início desta disciplina.
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:
#ParaTodosVerem
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.
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.
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.")
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.
O que acha de, primeiramente, entender as principais diferenças entre Java e Python?
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.
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.
numero = 10
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
\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).
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.
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).
Código Significado
[Link]("linha1\tcoluna1\nlinha2\tcoluna2");
}
}
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.
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.
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.
// 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:
2. Constantes:
Expressões aritméticas
- 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
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.
Expressões lógicas
x y (x && y) x y (x || y)
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
!= Diferente de 8 != 9; x != y;
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.
/*
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);
}
}
Aqui, estamos definindo uma classe chamada "Main", que é a classe principal do
programa.
3. int x, y;
4. int X;
5. boolean p, q;
6. float a = 10.5f;
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;
8. y = x - 38;
9. X = 9 % 2;
Atribuímos o resultado da expressão booleana "3 >= 5" (que é falsa) à variável "p".
Usamos o método printf para imprimir o valor de "a" multiplicado por 3 com
somente duas casas decimais.
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.
// 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]();
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:
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:
Exemplo 5:
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:
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];
[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?
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.
Exibe a mensagem "Digite seu nome: " para solicitar ao usuário que digite o seu
nome.
Exibe a mensagem "Digite sua idade: " para solicitar ao usuário que digite a sua
idade.
Exibe a mensagem "Digite sua altura: " para solicitar ao usuário que digite a sua
altura.
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:
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];
[Link]();
}
}
1. Sintaxe:
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:
4. Blocos de código:
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.
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.
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.
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
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.
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.
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)
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.
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”.
EXEMPLO
Exemplo de aplicação 10: crie dois loops usando Java. O primeiro
deve usar “break”, e o segundo, “continue”.
[Link]();
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.
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”.
[Link]("Exemplo com o
loop for:");
[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.
4. No segundo loop, temos o loop foreach, em que declaramos uma variável numero do
mesmo tipo dos elementos do array.
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”.
[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);
}
}
}
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”.
[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);
}
}
}
}
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.
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.
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.
Nível médio
Nível difícil
*
**
***
****
*****
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
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:
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
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.
TIOBE. Programming Community Index. TIOBE Index for February 2021, 2020.
Disponível em: [Link] Acesso em: 1 nov. 2020.