Buscar

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 186 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 186 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 186 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Aprendendo Java na marra
Alexandre Henrique de Souza Torres
Roberto Silva Cantanhede
Rafael Henrique Santos Soares
June 2015
Conteúdo
0 Configuração 5
1 Uma mensagem importante 11
2 Mais impressões 17
3 Opções para saída 19
4 Sequências escape e comentários 21
5 Gravando informações em variáveis 23
6 Operações matemáticas 25
7 Obtendo entradas por um humano 27
8 Guardando as respostas do humano 29
9 Cálculos a partir da entrada do usuário 31
10 Variáveis apenas guardam valores 33
11 Atalhos para mudança de valores de variáveis 35
12 Expressões booleanas 39
13 Comparando Strings 41
14 Expressões Booleanas combinadas 43
15 Decidindo com comando If 45
16 Mais do comando If 47
17 De outra forma... Declarações if com else 49
18 Declarações If com Strings 51
19 Exclusões mútuas com cadeias de If e Else 53
iii
iv CONTEÚDO
20 Mais cadeias de Ifs e Else 55
21 Comandos If aninhados 59
22 Tomando grandes decisões com um switch enorme 61
23 Mais comparações de Strings 63
24 Escolhendo números aleatoriamente 67
25 Números aleatórios mais complexos 71
26 Sendo repetitivo com o comando While 73
27 Um jogo de adivinhação 75
28 Laços infinitos 77
29 Usando laços para verificar erros 79
30 Laços do-while 81
31 Adicionando valores um de cada vez 83
32 Somando valores para fazer um jogo de dados 87
33 Um jogo de dados chamado “Porco” 89
34 Chamando uma função 93
35 Chamando uma função para desenhar uma bandeira 95
36 Mostrando o resultado do dado com uma função 101
37 Retornando valores a partir de uma função 107
38 Área das formas 111
39 Trinta dias revisitado com Javadoc 115
40 Importando as bibliotecas padrão 119
41 Programas que escrevem arquivos 123
42 Buscando Dados de um Arquivo 127
43 Salvando uma Pontuação Máxima 129
44 Contando com um laço for 133
CONTEÚDO v
45 Cifra de César: iterando em uma String 137
46 Laços For Aninhados 139
47 Gerando e filtrando valores 141
48 Vetores - Muitos Valores em uma Única Variável 143
49 Encontrando Coisas em um Vetor 145
50 Verificando Se Algo NÃO está em um Vetor 147
51 Vetores Sem Laços Foreach 149
52 Temperatura Mínima 153
53 Endereços postais (Registros) 157
54 Registros de um arquivo 159
55 Um Vetor de Registros 163
56 Um Vetor de Registros a Partir de Um Arquivo (Temperaturas Revisitado) 167
57 Um Baralho de Cartas 171
58 Projeto Final - Uma Aventura Textual 175
vi CONTEÚDO
Prefácio
Programar não é fácil, penso1que é diferente de qualquer outra coisa que fazemos normalmente na
vida. Você é lançado em uma jornada confusa e desconfortável, cheia de dúvidas e encruzilhadas
desconcertantes. Mas essa viagem promete a grande recompensa de ser incluído em uma elite da
humanidade: os programadores.
Esse livro nasceu da necessidade básica de termos uma literatura para ensinar Java come-
çando bem do início. Na verdade, aqui você estará aprendendo duas coisas diferentes (e nem vai se
dar conta):
• Lógica de programação - você irá aprender como juntar os comandos da linguagem em
uma estrutura que permita resolver os problemas.
• Java - aqui estamos falando da linguagem em si, que como qualquer outra linguagem é um
conjunto de palavras que fazem sentido.
Vamos pensar nisso como um Lego. O Java representa as peças do Lego, não são muitas
diferentes e não é complicado de entender como elas funcionam. A Lógica de Programação é sobre
como pegar essas peças de Lego e fazer uma réplica do Darth Vader em tamanho natural. Aí é que
a coisa fica complicada. Mas não vamos sofrer com antecedência. Vamos trabalhar passo-a-passo.
A abordagem desse livro tem os seguintes princípios:
• Digitar, digitar e digitar. Ninguém aprende a programar lendo programa de outras pessoas.
Você irá digitar, letra por letra, todos os programas desse livro.
• Você não vai fazer download e nem copiar e colar.Os programas não estão disponíveis
para download e você não irá copiar e colar. O lance é digitar! Por quê? Para que você desen-
volva a habilidade de prestar atenção a todos os pequenos detalhes e nuances que envolvem a
codificação.
• Você irá resolver seus próprios problemas. Eu irei tentar te ajudar, mas na maioria dos
casos, você estará sozinho. Isso se chama vida!
• Programação de raiz. Você irá descobrir como era a programação na época dos seus pais:
tela preta, editor de texto, nenhum auxílio. Não se assuste, tudo vai ser explicado.
• Exercícios e desafios. Cada capítulo traz exercícios e desafios. Os exercícios são altera-
ções no programa base do capítulo. Desafios são coisas mais complicadas, onde só os fortes
sobrevivem.
1N.T. Nós somos três autores, porém fizemos a opção de nos dirigirmos a vocês como uma única pessoa. Pense
nisso como o nosso eu-programador-lírico.
1
2 CONTEÚDO
Introdução: O desafio de ter Java como
primeira linguagem
Java não é uma linguagem para iniciantes. Estou convencido que a maioria dos livros de Java para
“iniciantes” apenas se aplicam a pessoas que já sabem codificar ou são iluminados.
Eu posso te ensinar Java, mesmo que você nunca tenha programado antes e mesmo que
você não seja um gênio. Mas eu preciso trapacear um pouco.
O que eu vou de ensinar é Java. Mas não é tudo sobre o Java. Vou deixar partes de fora
pois você não está pronto para elas. Se você acha que está pronto para as partes mais complexas do
Java, então sobram apenas duas possibilidades 1) você está errado e 2) compre um livro diferente.
Há muitos livros excelentes no mercado que vão entornar toda a complexidade que o Java oferece e
mais rápido do que você dá conta.
Particularmente, temos uma enorme lacuna: vamos evitar falar de Programação Orientada
a Objetos. Tenho alguma certeza de que iniciantes não aprenderão a programar bem e tampouco
programar de maneira orientada a objetos ao mesmo tempo. Eu quase nunca vejo isso acontecer.
Planejo escrever uma continuação para esse livro que irá cobrir a Programação Orientada
a Objetos e as partes mais complexas do Java. Entretanto, você precisa terminar este livro primeiro.
Já tenho ensinado alunos a programar por alguns anos e nunca vi um aluno voltar para um café e
reclamar do tempo gasto com os fundamentos.
O que você irá aprender
• Como instalar o compilador Java e um editor de textos para escrever os programas.
• Como criar, compilar e executar seu primeiro programa Java.
• Variáveis e entrada de dados pelo usuário e de arquivos.
• Tomando decisões com declarações if2.
• Laços3.
• Vetores4.
• Registros5.
No último capítulo você irá escrever um jogo de aventura baseado em texto, não muito
fácil, com níveis carregados a partir de arquivos texto. Você também será capaz de escrever um
jogo de cartas baseado em texto como Truco ou Burro.
O que você não irá aprender
• Gráficos
• Programação Orientada a Objetos
2Que em português seria “se”
3N.T. ou loops
4N.T. ou arrays
5N.T. ou records
3
4 CONTEÚDO
• Como fazer um app para Android
• Programação para internet
Todos gostamos de desenhos, mas não podemos ensinar tudo e cobrir o básico ao mesmo
tempo, então, alguma coisa ficou de fora.
Programação Orientada a Objetos não tem lugar em um livro introdutório, na minha
opinião. Ela é o passo seguinte ao que você verá aqui.
Apps para Android são bem complexas e se você é um iniciante, uma app está bem além
da sua habilidade. Nada nesse livro vai prejudicar suas chances de fazer um app, embora essa
caminhada sutil possa te fazer continuar, enquanto outros livros te frustrariam forçando-o a jogar
a toalha.
O mesmo ocorre com programação para aplicações que rodam e navegadores web. Elas
agregam vários conhecimentos diferentes. Tudo tem sua hora. Comecemos devagar.
Também tenho a esperança de escrever mais dois livros depois deste. Meu segundo livro
cobrirá gráficos e Programação Orientadaa Objetos em Java. Meu terceiro livro irá cobrir um
aplicativo simples para Android assumindo que você terminou os dois primeiros livros.
Como ler este livro
Omais importante, na verdade a linha mestre desse livro, é que você deve digitar todos os programas.
Para cada exercício, digite o código. Você. Por suas mãos, tecla a tecla. De outra forma,
como acha que vai aprender? Ninguém nunca se tornou um grande programador lendo o código dos
outros.
Trabalhe os Desafios para estudo se houver algum. Faça os exercícios. Ao fim de tudo
você saberá programar, pelo menos um pouco.
Licença
Esse livro segue uma “tradição” de alguns livros que ensinam a programar na marra, ou em inglês
the hard way.
Ele foi traduzido sob autorização de Graham Mitchell. Alguns capítulos deste livro foram
disponibilizados online sem custo, mas não poder ser utilizados para fazer cópias para os outros. Os
direitos de cópia da versão em português são dos autores, a menos que explicitamente autorizado.
Capítulo 0
Configuração
Este capítulo não tem código, entretanto, não pule-o. Ele vai te ajudar a ter um editor de textos
razoável e também vai te ensinar a instalar o textitJava Development Kit (JDK). Se você não fizer
estas duas coisas você não conseguirá fazer nenhum dos exercícios do livro. Você deve seguir essas
instruções exatamente como foram escritas, na medida do possível.
+ Aviso! Este exercício requer que você faça coisas no prompt de comandos (também
chamado de shell, console, ou janela de terminal. Se você não tem experiência alguma
com um prompt de comandos, então você deveria ir aprender isso primeiro. Zed Shaw
possui um curso rápido de linha de comando em
http://cli.learncodethehardway.org/book/ (em inglês)
e vai ensiná-lo a utilizar o PowerShell do Windows ou o Terminal no OSX ou “bash” no
Linux.
Mac OS X
Para completar este exercício, complete as tarefas a seguir:
• Clique em http://www.barebones.com/products/textwrangler/ utilizando o navegador.
Baixe o TextWrangler e instale-o.
• Coloque o TextWrangler na dock de forma que você possa acessá-lo com facilidade.
• Encontre um programa chamado “Terminal”. Faça uma busca por ele se tiver.
• Coloque o “Terminal” na dock também.
• Execute o Termnial.
• No programa de Terminal, digite javac -version e tecle “Enter”. Você deve ver como resposta
algo como javac 1.7.0_07. Tudo bem se o número depois do javac não for exatamente o
mesmo desde que ele seja 1.6 ou maior. Se receber uma mensagem de erro, pode ser necessário
instalar o JDK.
• Depois disto, você deve ter o prompt de volta.
• Aprenda como criar uma pasta (ou fazer um diretorio) a partir do Terminal. Crie uma pasta
de forma que você possa colocar todos os programas que gerar ao longo do livro nela.
• Aprenda como mudar para esta pasta a partir do Terminal e mude para ela.
• Use o seu editor de texto (TextWrangler) para criar um arquivo chamado teste.txt e salve-o
na pasta que você acabou de criar.
• Volte para o Terminal utilizando apenas o teclado para trocar de janela.
• De volta ao Terminal, você deve ver a listagem do conteúdo das pastas para ver o seu arquivo
recém criado.
5
6 CAPÍTULO 0. CONFIGURAÇÃO
OS X: O que você deverá ver
Não tenho acesso a um Mac, então aqui vem a saída do computador do Zed seguindo as instruções
anteriores no Terminal do computador dele. Seu computador pode ser diferente, então veja se
percebe todas as diferenças entre o que ele fez e o que você fez.
Last l o g i n : Fr i Jul 19 00 : 56 : 54 on ttys001
~ $ javac −ve r s i on
javac 1 . 6 . 2 2
~ $ mkdir javacode
~ $ cd javacode
javacode $ l s
# . . . Use TextWrangler here to ed i t t e s t . txt . . . .
javacode $ l s
t e s t e . txt
javacode $
Windows
• Clique em http://notepad-plus-plus.org/ utilizando seu navegador favorito, baixe o editor
de texto Notepad++ e instale-o. Você não precisa ser administrador para fazê-lo.
• Assegure-se que pode carregar o Notepad++ facilmente a partir do Desktop ou da Quick
Launch. Ambas operações estão disponíveis durante a instalação.
• Execute o PowerShell a partir do menu iniciar. Procure por ele e basta teclar Enter para
executá-lo.
• Crie um atalho para o PowerShell na sua área de trabalho e/ou Quick launch para sua con-
veniência.
• Acesse http://www.oracle.com/technetwork/java/javase/downloads/ através do seu na-
vegador.
– Clique o botão grande "Java"próximo ao canto esquerdo na parte de cima para baixar
o Java Platform (JDK) 8u45 1. Clicando neste botão você será levado à um página
diferente.
– Nesta página, aceite o contrato de licenca e escolha a versão “Windows x86” próxima ao
fim da lista. Baixe o arquivo.
– Uma vez baixado, execute jdk-8u45-windows-i586.exe para instalar. Depois que clicar
"Próximo"pela primeira vez você verá uma tela que diz:
“Instalar para: C:\Arquivos de Programas\Java\jdk1.8.0_45\”
ou algo semelhante. Anote este destino; você vai precisar dele em breve.
• Uma vez que o JDK esteja instalado você irá precisar do nome exato da pasta onde ele foi
instalado. Busque no disco local C: dentro da pasta "Arquivos de programas"se tiver uma.
Procure a pasta “java” . Dentro dela terá uma pasta “jdk1.8.0_45” que tem uma pasta
chamada “bin” dentro. A pasta deve ter outra pasta “jdk1.8” dentro; a pasta “jre8” não é a
mesma coisa. Certifique-se de que há uma pasta “bin”.
• Uma vez que você localizou esta pasta, clique com o botão esquerdo nesta localização e ela
vai mudar para algo como:
"C:\Arquivos de Programas\Java\jdk1.8.0_45\bin’’
Escreva este caminho ou selecione-o e clique com o botão direto e copiando-o para área de
transferência.
• Uma vez que o JDK está instalado e que você sabe a localização abra uma janela de terminal
(PowerShell). No PowerShell digite o seguinte:
1 [ Environment ] : : SetEnvironmentVariable ("Path " , "$env : Path ;C: \ Arquivos de
Programas\Java\ jdk1 . 8 . 0_45\bin " , "User ")
1Dependendo de quando você estiver fazendo esse download, essa versão poderá estar diferente
7
Escreva tudo em uma única linha.
Se você copiou a localização para a área de transferência, então você pode digitar tudo até
o $env:Path; e então clique com o botão direito na janela do PowerShell de forma a colar o
nome da pasta. Então você pode terminar a linha digitando ", "User") e então pressionando
Enter. Se você receber um erro, deve ter digitado algo incorretamente. Você pode pressionar
a seta para cima de volta a ter a linha de comandos de volta e as setas para a esquerda e
direta para encontrar e corrigir o seu erro e pressionar Enter novamente.
• Uma vez que o comando setEnvironmentVariable completar sem resultar em um erro, feche
a janela do PowerShell digitando exit no prompt. Se você não fechar a janela a alteração não
terá efeito.
• Carregue o PowerShell novamente.
• Digite javac -version no prompt. Você deverá ver uma resposta como javac 1.8.45. Pa-
rabéns! Se conseguiu por isso para funcionar o resto do livro deve ser relativamente fácil.
• Depois disso você deve retornar a um prompt piscante do PowerShell.
• Aprenda a criar uma pasta (fazer um diretório) a partir da janela de terminal (PowerShell).
Crie uma pasta de forma a colocar cada código digitado a partir do livro nela.
• Aprenda como trocar o diretório corrente para o diretório a partir do prompt. Vá para a pasta
criada.
• Usando o editor de texto (Notepad++) crie um arquivo chamado teste.txt e salve-o na pasta
que você acabou de criar.
• Volte para o terminal usando apenas o teclado para navegar entre as janelas.
• De volta no terminal, veja se ao listar o conteúdo da pasta você encontra o novo arquivo que
criou.
Windows: O que você deveria ver
Windows PowerShel l
Copyright (C) 2009 Microso f t Corporat ion . Al l r i g h t s r e s e rved .
PS C:\\ Users \\Joao> javac −ve r s i on
javac 1 . 7 . 0_25
PS C:\\ Users \\Joao> mkdir cod igo javaDirec to ry : C:\\ Users \\Joao\\ cod igo java
Mode LastWriteTime Length Name
−−−− −−−−−−−−−−−−− −−−−−− −−−−
d−−−− 7/19/2013 7 :39 PM cod igo java
PS C:\\ Users \\Joao> cd cod igo java
PS C:\\ Users \\Joao\\ codigojava> l s
PS C:\\ Users \\Joao\\ codigojava>
. . . Aqui voc\^e deve u t i l i z a r o Notepad++ para c r i a r o arquivo t e s t e . txt na
pasta cod igo java . . .
PS C:\\ Users \\Joao\\ codigojava> l s
Di rec to ry : C:\\ Users \\ joao \\ cod igo java
Mode LastWriteTime Length Name
−−−− −−−−−−−−−−−−− −−−−−− −−−−
−a−−− 7/19/2013 7 :45 PM 4 t e s t . txt
PS C:\\ Users \\Joao\\ codigojava>
Você provavelmente vai ver um prompt diferente e outras diferenças sutis, mas não deve haver
mensagens de erro. Essa é a ideia geral.
8 CAPÍTULO 0. CONFIGURAÇÃO
Linux
Existem muitas versões diferentes de Linux por aí, então trarei instruções da última versão do
Ubuntu. Se estiver executando outra distribuição, você provavelmente sabe muito bem o que está
fazendo e irá entender como modificar as instruções para o seu caso.
• Use o gerenciador de pacotes do Linux para instalar o editor gedit que pode ser chamado
apenas por “Editor de texto”.
• Assegure-se de que o gedit estará facilmente acessível através do Launcher.
• Execute o gedit para que possamos parametrizá-lo de forma a favorecer um programador.
– Abra o menu de Preferências e selecione a aba Editor
– Modifique a largura do Tab para 4.
– Marque a opção “Indentação automática”.
– Abra a aba "Visualização"e ligue a opção "Exibir números de linha"
• Encontre o programa Terminal. Ele pode se chamar GNOME Terminal, Konsole ou xterm.
• Coloque seu terminal no Launcher também.
• Use o seu gerenciador de pacotes para instalar o JDK do Java. Eu uso o openjdk-7-jdk, mas
se preferir utilizar o da Oracle ele vai dar conta do recado, também.
• Abra um novo Terminal se não o tiver feito ainda.
• Digite javac -version no prompt de comandos. Você deve ver uma resposta como javac
1.7.0_25. Se não, verifique se o JDK foi corretamente instalado e que o PATH aponta para a
pasta bin que contém um executável chamado javac.
• Aprenda como criar uma pasta (ou fazer um diretório) a partir do terminal. Crie uma pasta
onde possa armazenar o código que digitará a partir do livro.
• Aprenda como chegar até esta pasta a partir do prompt. Mude para ela.
• Use seu editor de textos (gedit) para criar um arquivo chamado teste.txt e salve-o neste
diretório que acabou de criar.
• Volte ao terminal utilizando apenas o teclado para trocar entre as janelas. Busque se não
souber como.
• De volta ao terminal, veja se ao listar o conteúdo da pasta se o arquivo que você criou está lá.
Linux: o que você deveria ver
meucomputador@joao−desktop :~\ $ javac −ve r s i on
javac 1 . 7 . 0_25
meucomputador@joao−desktop :~\ $ mkdir cod igo java
meucomputador@joao−desktop :~\ $ cd cod igo java /
meucomputador@joao−desktop :~/ cod igo java \$ l s
meucomputador@joao−desktop :~/ cod igo java \$
. . . Aqui voc\^e deve u t i l i z a r o g ed i t para c r i a r o arquivo t e s t e . txt na pasta
cod igo java . . .
meucomputador@joao−desktop :~/ cod igo java \$ l s
t e s t e . txt
meucomputador@joao−desktop :~/ cod igo java \$
Você provavelmente perceberá a diferença no prompt e outras diferenças sutismas não deve
encontrar erros e essa é a ideia geral.
Aviso aos iniciantes
Você terminou o primeiro exercício. Esse exercício deve ter sido bem difícil dependendo do seu grau
de familiaridade com seu computador. Se ele foi difícil e você não conseguiu terminá-lo, volte e
9
invista algum tempo em ler e estudar o texto novamente. Programar requer leitura cuidadosa e
atenção aos detalhes.
Se um programador lhe diz para usar o emacs, Eclipse ou Netbeans, apenas diga “não”.
Esses editores estão lá para quando você for um programador melhor. Tudo o que precisa agora é de
um editor que lhe permita colocar um texto dentro de um arquivo. Vamos usar o gedit, TextWrangler
ou o Notepad++ (de agora em diante chamados indistintamente de “o editor de texto” ou “um editor
de texto”) pois são simples e o mesmo editor em todos os computadores. Programadores profissionais
utilizam estes editores de texto então são bons o suficiente para começar.
Um programador vai eventualmente lhe dizer para usar o Max OS X ou o Linux. Se o
programador gosta de fontes e tipografia ele lhe dirá para usar um computador com Mac OS X. Se
ele gosta de controle e tem uma barba enorme, vai lhe dizer para instalar Linux. Mais uma vez, use
o computador que tem agora e que funciona. O que você precisa é de um editor, um terminal e o
Java.
Finalmente, o propósito desta instalação é que você consiga fazer três coisas com confiança
enquanto trabalha com os exercícios:
• Escrever os exercícios utilizando seu editor de texto (gedit no Linux, TextWrangler no OS X
ou Notepad++ no Windows).
• Executar os exercícios que escreveu.
• Consertá-los quando estiverem com problemas.
• Repetir.
Qualquer outra coisa irá lhe confundirá, então, mantenha o plano.
Perguntas Frequentes
Tenho que usar mesmo esse editor simples? Quero usar o Eclipse! Não use o Eclipse. Embora seja
um bom programa ele não é para iniciantes. Ele é ruim para os iniciantes por duas razões:
• Faz com que você faça coisas que não precisa se preocupar agora.
• Faz coisas que você precisa aprender a fazer sozinho primeiro.
Então, siga minhas instruções e use um editor de texto decente e uma janela de terminal. Uma vez
que tenha aprendido como codificar você pode usar outras ferramentas se quiser, mas não agora.
Posso trabalhar com esse livro no meu tablet? Ou no meu Chromebook? Infelizmente não.
Você não pode instalar o Java Development Kit (JDK) em nenhuma dessas máquinas. Você precisa
ter algum tipo de computador convencional.
10 CAPÍTULO 0. CONFIGURAÇÃO
Capítulo 1
Uma mensagem importante
Neste exercício você irá escrever um programa funcinal em Java para mostrar uma mensagem
importante na tela.
Se você não está acostumado a digitar instruções detalhadas para um computador, então
este poderá ser um dos exercícios mais difíceis do livro. Computadores são muito burros e se você
não digitar tudo bem certinho, o computador não vai compreender suas instruções. Mas se você
conseguir completar esse exercício e deixá-lo funcionando, então existe uma boa chance de que você
seja capaz de completar todos os outros exercícios, desde que você trabalhe todo dia e não desista.
Abra o editor de texto que você instalou no Exercício 0 e digite o seguinte texto em um
único arquivo chamado PrimeiroProg.java. Digite exatamente o que eu escrevi, incluindo espaços
pontuação e letras maiúsculas e minúsculas.
1 pub l i c c l a s s PrimeiroProg
2 {
3 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
4 {
5 System . out . p r i n t l n ( "Estou determinado a aprender a programar . " ) ;
6 System . out . p r i n t l n ( "A data de hoje é" ) ;
7 }
8 }
Eu coloquei números em frente de cada linha, mas não digite esse número. Eles estão aí
apenas para eu poder dizer sobre qual linha estou falando. Também, dependendo se você já salvou
ou não o seu arquivo, as palavras poderão ou não estar com as cores, que são diferentes para cada
uma. Ou se estiverem coloridas, podem ter cores diferentes das minhas. Estas diferenças não tem
problema.
Eu vou caminhar pelo programa linha a linha, apenas tenha certeza de que você digitou
tudo corretamente.
A primeira linha começa com a palavra public seguido de um único espaço, e depois a
palavra class seguido de um espaço, depois a palavra PrimeiroProg. O primeiro “P” em “Primeiro”
e o “P” de “Prog” estão em letra maiúscula. Existem apenas duas letras maiúsculas na primeira
linha. Existem apenas dois espaços.
A segunda linha é apenas um único caracter: uma chave. Você pode digitá-la segurando
o SHIFT e então apertando a tecla ‘[‘ que geralmente ficaperto do P.
Antes de ir para a terceira linha do programa, eu preciso te contar como os programadores
geralmente chamam os símbolos engraçados que aparecem no programa.
• ( e ) são os parênteses (esse é o plural). Apenas um deles é chamado de parêntese. O da
esquerda é chamado de “abre parentese” e o da direita é o “fecha parentes”, porque eles vêm
geralmente em pares e um abre e o outro fecha os parênteses.
Existe um abre parêntese na linha 3 e um fecha parêntese também.
• [ e ] são chamados “colchetes”. Em Java, parênteses e colchetes não são intercambiáveis.
Colchetes vêm em pares e são chamados “abre colchete” e “fecha colchete”.
Existe um abre e um fecha colchete lado a lado na linha 3.
11
12 CAPÍTULO 1. UMA MENSAGEM IMPORTANTE
• { e } são chamadas “chaves”. Elas também vêm em pares e são “abre” e “fecha” chaves.
• " é chamado de aspas. Em Java, sempre vem em pares e são “abre” e “fecha” aspas, ainda que
seja exatamente o mesmo caracter em cada posição. Porém, a primeira serve para começar
uma coisa, e a segunda termina essa coisa.
• ’ é tecnicamente uma apóstrofe, mas os programadores chamam de “aspas simples”. Por isso,
as aspas podem ser chamadas de “aspas duplas” (o que não faz sentido em português, mas
programadores são assim mesmo). Em algumas linguagens de programação aspas simples e
duplas significam a mesma coisa, mas não em Java. Java usa aspas simples algumas vezes,
mas elas serão bem raras nesse livro.
• . é um ponto e eles são muito usados em linguagens de programação. Diferente do portugês,
eles são separadores e não “terminadores”. Por isso, você não irá chamá-los de “ponto final”.
Existem quatro pontos nesse programa e um ponto final.
• ; é chamado de “ponto-e-vírgula” . Ela fica embaixo e a direita no seu teclado. Java usa muito
o ponto-e-virgula, porém existem apenas dois no programa: um no fim da linah 5 e outro no
fim da 6.
• : é chamado de “dois pontos”. Ele fica na mesma tecla do ponto-e-vírgula, pressionando o
SHIFT. Java usa dois pontos, mas muito raramente.
• Finalmente, < é o sinal de “menor que” e > é o “maior que”, mas às vezes eles são tipo
parênteses ou colchetes. O Java usa eles dessa forma diferente para algumas coisas especiais,
mas você não verá eles sendo utilizados assim neste livro, apenas do jeito que aprendemos em
matemática.
Beleza, vamos de volta ao linha-a-linha. Você já digitou as primeiras duas linhas correta-
mente.
Agora você deve começar a terceira pressionando TAB uma vez. Seu cursor vai se mover
por vários espaços (provavelmente 4 ou 8). Depois, digite a palavra public novamente, um espaço,
a palavra static, um espaço, a palavra void, um espaço, a palavra main seguida de um abre
parêntese (sem espaço entre ele e a palavra main). Depois vem um espaço, a palavre String com
“S” maiúsculo, um abre e um fecha colchete lado a lado, um espaço, a palavra args, um espaço e
finalmente o fecha parêntese.
Então a linha 3 começa com TAB, tem um total de seis espaços e só o “S” de “String” é
maiúsculo. Que canseira.
Na quarta linha, seu editor de texto já deve ter colocado o seu cursos diretamente abaixo
do ‘p’ de “public”. Se não, você deverá começar a linha 4 pressionando TAB você mesmo. Depois
apenas digite outra abre chave e pronto.
A quinta linha deve começar com duas TABS. Depois digite a palavra System com ‘S’
maiúsculo, depois um ponto, então a palavra out, outro ponto e a palavra println (que significa
“print line” em inglês, isto é, imprime linha), um abre parêntese, espaço, abre aspas, o texto Eu estou
determinado a aprender a programar. (a frase termina com um ponto final), fecha aspas, um
espaço, um fecha parêntese, e um ponto-e-vírgula.
A linha 5 tem dois TAB, nove espaços, dois pontos (e um ponto final), um abre e fecha
aspas, um abre e fecha parênteses, e só duas letras maiúsculas.
A linha 6 é quase idêntica à 5 exceto pela sentença que diz A data de hoje é.
A linha 7 começa com um único TAB. Se seu editor de texto colocou dois, você consegue
apagar o TAB extra pressionando o BACKSPACE uma vez (essa é a tecla com uma seta para a
esquerda no lado superior direito do teclado) . Então, depois do TAB, tem um fecha chave.
Finalmente, na linha 8 não tem TAB e mais um fecha chave. Você pode pressionar ENTER
depois da linha 8 ou não, o Java não se importa.
Observe que temos dois abre chaves e dois fecha chaves no arquivo. Três abre parêntese
e três fecha parêntese. Dois abre aspas e dois fecha aspas. Um abre e um fecha colchetes. Esses
caracteres sempre virão em pares assim.
13
Observe também que todas as vezes que tivemos um abre chaves, as linhas de baixo tinham
um TAB a mais no começo, e as linhas abaixo do fecha chave tinham um TAB a menos. Certo,
agora salve (se você ainda não fez) como PrimeiroProg.java e grave na pasta “codigo” que você
criou no Exercício 0.
Tenha certeza de que o nome do seu arquivo seja exatamente igual ao meu: o primeiro
’P’ em "Primeiro"e o segundo ’P’em "Prog"são maiúsculos. Todo o resto é minúsculo. E não pode
haver espaços no nome do arquivo. O Java vai se recusar a rodar qualquer programa com espaço
no nome. Garanta também que o arquivo termine com .java e não com .txt.
Compilando seu primeiro programa
Agora que o programa foi escrito e com sorte não contém erros (iremos descobrir daqui a pouco),
abra o Terminal (ou PowerShell) e mude para o diretório onde o código foi gravado.
Liste o conteúdo do diretório1 para ter certeza de que o arquivo Java está aí. No meu
computador, o que aparece é o seguinte:
torres@notebook :~\ $ cd javacode / ~
torres@notebook :~\ $ ~/ javacode$ l s
PrimeiroProg . java t e s t . txt
torres@notebook :~/ javacode \$
No futuro, como o seu terminal provavelmente não se parece com o meu, irei abreviar o
prompt desta maneira:
$ l s
PrimeiroProg . java t e s t . txt
$
Desta forma ficará menos confuso, já que existe menos coisa diferente para ignorar e você
poderá olhar apenas o que precisa digitar e o que irá ver.
A esta altura, nós digitamos uma lista de comandos em uma linguagem de programação
chamada Java. Mas o computador não consegue executar nossos comandos diretamente nesta forma.
Nós temos que entregar esse arquivo a um "compilador", que é um programa que irá traduzir nossas
instruções em algo mais parecido com os uns e zeros que o computador consegue executar. Em Java
esse arquivo de uns e zeros é chamado de "bytecode". Portanto, iremos executar o compilador
do Java para "compilar"nosso arquivo de código fonte em um arquivo bytecode que poderemos
executar.
O nome do compilardor Java é javac (o ’c’ é para "compilador"), e nós iremos rodar da
seguinte maneira:
$ javac PrimeiroProg . java
$
Se você tem uma atenção extraordinária para os detalhes e fez tudo que eu te mostrei,
esse comando vai levar apenas um segundo para rodar, e então o prompt vai apenas reaparecer sem
nenhuma mensagem especial. Se você cometeu algum engano, você verá uma mensagem de erro
como esta:
$ javac PrimeiroProg . java
PrimeiroProg . java : 8 : e r r o r : reached end o f f i l e whi l e par s ing
}
^
1 e r r o r
$
Não se preocupe muito com a mensagem em particular. Quando as coisas ficam confu-
sas, o compilador tenta adivinhar o que você fez de errado. Infelizmente, essas adivinhações são
projetadas para programadores experientes, então elas não costumam ser muito úteis para erros de
principiantes.
Aqui está o exemplo de outra mensagem de erro que você pode ter:
1Use o comando ls no Linux/MacOS ou dir no Windows
14 CAPÍTULO 1. UMA MENSAGEM IMPORTANTE
$ javac PrimeiroProg . java
PrimeiroProg . java : 5 : e r r o r : ’ ; ’ expected
System . out . p r i n t l n ( "Eu estou dec id ido a aprender a programar . " ) :
^
1 e r r o r
$
Nesse caso, o compilador está certo: o erro é na linha 5 e quer dizer especificamente que
um ponto e vírgula era esperado (’;’ expected). Ao invés disso, a linha estáterminando com dois
pontos.
Aqui vai mais um:
$ javac PrimeiroProg . java
PrimeiroProg . java : 1 : e r r o r : c l a s s Pr imeiroprog i s publ ic , should be dec l a r ed in a
f i l e named Primeiroprog . java
pub l i c c l a s s Pr imeiroprog
^
1 e r r o r
$
Desta vez o problema é um erro de maiúscula/minúscula. o código diz public class
Primeiroprog (observe o ’p’ minúsculo), mas o nome do arquivo é PrimeiroProg.java. Como eles
não são exatamente iguais, incluindo as letras maiúsculas e minúsculas, o compilador se confunde e
para.
Então, se você obtiver qualquer mensagem de erro, faça a correção, grave o código, volte
para o terminal e compile novamente.
Aviso
Se você fez alguma alteração no código no seu editor de texto, você precisa
salvar o arquivo antes de tentar recompilá-lo. Se você não salvar as alterações,
você ainda estará compilando a versão antiga do código.
Eventualmente você irá fazer tudo certo e o programa irá compilar sem erros. Nesse caso, nenhum
erro ou qualquer outra mensagem irão aparecer. Liste o conteúdo do seu diretório e você poderá
ver o arquivo de bytecode na pasta:
$ javac PrimeiroProg . java
$ l s
PrimeiroProg . c l a s s PrimeiroProg . java t e s t . txt
$
Agora que nós temos um arquivo de bytecode válido, nós podemos rodar (ou "executar")
o programa por meio da máquina virtual Java (Java Virtual Machine) JVM que é o programa
chamado java:
$ java PrimeiroProg
Eu estou determinado a aprender a programar .
A data de hoje é
$
Observe que o comando que você digita é java PrimeiroProg, não java PrimeiroProg.java
ou ainda java PrimeiroProg.class.
Está maravilhado? Você acabou de escrever e executar seu primeiro programa Java! Se
você chegou até aqui, então é quase certo que você tem aquilo que é necessário para completar esse
curso desde que você continue trabalhando firme e não desista.
Desafios para estudo
Após a maioria dos exercícios, eu irei listar algumas tarefas adicionais que você deve tentar depois
de digitar o código e deixar ele compilando e rodando. Alguns desafios para estudo serão muito
simples e outros serão mais complicados, mas você sempre deve tentar completá-los.
15
1. Mude o que está dentro das aspas na linha 6 para incluir a data de hoje. Grave o arquivo
assim que você terminar as alterações, compile e execute novamente.
2. Mude o que está dentro das aspas na linha 5 para que o computador mostre o seu nome.
O que você deve ver depois que terminar esses desafios:
$ java PrimeiroProg
Eu , Alexandre Torres , e s tou determindado a aprender a programar .
A data de hoje é sexta−f e i r a −, 26 de junho de 2015 .
$
16 CAPÍTULO 1. UMA MENSAGEM IMPORTANTE
Capítulo 2
Mais impressões
Muito bem, agora que tiramos nossa primeira tarefa difícil do caminho, faremos outra. Essa será
parecida com a primeira, e faremos algumas impressões a mais na tela.
Digite o código a seguir em um único arquivo chamado CartaParaVoce.java. Como
sempre, tenha certeza de escrever tudo exatamente igual ao código, incluindo os espaços, pontuação
e letras maiúsculas e minúsculas.
1 pub l i c c l a s s CartaParaVoce
2 {
3 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
4 {
5 System . out . p r i n t l n ( "+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+" ) ;
6 System . out . p r i n t l n ( " | #### | " ) ;
7 System . out . p r i n t l n ( " | #### | " ) ;
8 System . out . p r i n t l n ( " | #### | " ) ;
9 System . out . p r i n t l n ( " | | " ) ;
10 System . out . p r i n t l n ( " | | " ) ;
11 System . out . p r i n t l n ( " | B i l l Gates | " ) ;
12 System . out . p r i n t l n ( " | 1 Mic roso f t Way | " ) ;
13 System . out . p r i n t l n ( " | Redmond , WA 98104 | " ) ;
14 System . out . p r i n t l n ( " | | " ) ;
15 System . out . p r i n t l n ( "+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+" ) ;
16 }
17 }
Observe que a primeira linha é a mesma do capítulo anterior, com a diferença de que o
nome da classe agora é CartaParaVoce ao invés de PrimeiroProg. Observe também que o nome do
programa mudou de PrimeiroProg.java para CartaParaVoce.java, isso não é uma coincidência.
Em Java, cada arquivo pode conter apenas uma classe pública, e o nome dessa classe deve
ser igual ao do arquivo (incluindo maiúsculas e minúsculas1), com exceção de que o nome do arquivo
termina com .java e o nome da classe não. O nome da classe é o que vem após public class.
Então, o que significa "classe pública"? Quando você ficar mais velho eu te conto. Sério,
quando a maioria dos livros para "iniciantes"entra nesse tipo de detalhe ele se torna um livro ruim
para "iniciantes". Então, não fique chateado com isso, acredite em mim, e repita o que está escrito.
Infelizmente, teremos muitas coisas desse tipo pela frente.
Provavelmente você viu que a segunda, terceira e quarta linhas do programa são exatamente
as mesmas do capítulo anterior. Não existe nenhuma diferença.
Então, depois do segundo abre chave, existem onze comandos de impressão. Eles são todos
idênticos, com exceção do texto que fica dentro das aspas. A pequena barra vertical ("|") é chamada
de pipe (coisas de programador). Ache-a no seu teclado. Você terá que apertar SHIFT para usá-la.
Uma vez que tudo esteja digitado e gravado como CartaParaVoce.java, você pode com-
pilar e rodar da mesma forma que fez no capítulo anterior. Vá para a janela do terminal, mude
para o diretório no qual você está gravando seu código e digite o seguinte para compilar:
$ javac CartaParaVoce . java
1Diferentemente de outras linguagens, o Java é muito criterioso com o nome das coisas, especialmente se elas foram
escritas com letra maiúsculas ou minúsculas. Preste atenção nisso!
17
18 CAPÍTULO 2. MAIS IMPRESSÕES
Se você é extremamente bom com detalhes irritantes, e se tem sorte, não haverá erros
e o comando javac irá completar sem dizer nada. Provavelmente, você terá alguns erros como
resultado. Se isso acontecer, volte e compare cuidadosamente o que você digitou com o que eu
escrevi. Eventualmente, você irá descobrir o(s) erro(s). Corrija, salve o arquivo novamente e tente
compilar de novo.
Não se frustre com esse processo, essa é a vida de programador.
Uma vez que o programa compile sem erros, você pode executá-lo como antes:
$ javac CartaParaVoce . java
$ java CartaParaVoce
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| #### |
| #### |
| #### |
| |
| |
| B i l l Gates |
| 1 Mic roso f t Way |
| Redmond , WA 98104 |
| |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
Dois programas feitos. Parabéns! O que você conseguiu completar não é fácil, e qualquer
um que diga o contrário é porque tem muita experiência e esqueceu o que é tentar essa coisa toda
pela primeira vez. Não desista! Trabalhe um pouco todo dia e tudo ficará mais fácil.
Desafios para estudo
Esse arquivo se chama CartaParaVoce.java e não CartaParaOBillGates.java! Volte para o seu
editor de texto e mude o nome e o endereço do Bill Gates e da Microsoft para o seu nome e o seu
endereço. Depois grave, compile e execute novamente.
Questões mais comuns
Eu tenho que usar meu endereço real? Claro que não. Mas crie um endereço falso que tenha as
três linhas. Por que minha carta não fica alinhada quando eu executo o programa? Provavelmente
você usou um misto de TABs e espaços entre as aspas dos comandos println. Não use TABs, use
apenas espaços.
Capítulo 3
Opções para saída
Java tem dois comandos comuns utilizados para exibir coisas na tela. Até agora vimos apenas
println(), mas print() também pode ser utilizado. Este exercício vai mostrar a diferença.
Digite o código a seguir em um único arquivo. Através da leitura do código será que você
consegue deduzir que o arquivo deve se chamar OpcoesSaida.java?
1 pub l i c c l a s s OpcoesSaida
2 {
3 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
4 {
5 System . out. p r i n t l n ( "Alpha" ) ;
6 System . out . p r i n t l n ( "Bravo" ) ;
7
8 System . out . p r i n t l n ( " Char l i e " ) ;
9 System . out . p r i n t l n ( "Delta " ) ;
10 System . out . p r i n t l n ( ) ;
11
12 System . out . p r i n t ( "Echo" ) ;
13 System . out . p r i n t ( "Foxtrot " ) ;
14
15 System . out . p r i n t l n ( "Golf " ) ;
16 System . out . p r i n t ( "Hotel " ) ;
17 System . out . p r i n t l n ( ) ;
18 System . out . p r i n t l n ( " Ind ia " ) ;
19
20 System . out . p r i n t l n ( ) ;
21 System . out . p r i n t l n ( " I s t o " + " " + "é" + " " + "um" + " t e s t e . " ) ;
22
23 }
24 }
Quando você executá-lo, dever ver isto na tela:
Alpha
Bravo
Char l i e
Delta
EchoFoxtrotGolf
Hotel
Ind ia
I s t o é um t e s t e .
E então, consegue dizer qual a diferença?
Amobs print() e println() exibem na tela o que quer que esteja entre as aspas duplas.
Entretanto, println() move para a linha seguinte assim que termina de imprimir e print() não:
ele exibe a mensagem e as declarações de saída vão continuar da mesma posição na linha.
Você deve observar (na linha 10) que podemos ter uma declaração println() com nada
entre os parêntesis. Nenhuma aspa dupla nem nada. Essa declaração diz que o computador não
deve imprimir coisa alguma e então movimentar o cursor para o início da próxima linha.
Você pode observar também que este programa tem algumas linhas com nada nelas (linhas
7, 11, 14, 19 e 22). No primeiro exercício, quando disse "digite exatamente o que eu escrevi, incluindo
19
20 CAPÍTULO 3. OPÇÕES PARA SAÍDA
espaços, pontuação e letras maiúsculas e minúsculas"não estava sendo exatamente honesto. Linhas
extras em branco no seu código são ignoradas pelo compilador Java. Você pode acrescentá-las ou
removê-las e o programa vai funcionar da mesma maneira.
Estudantes sempre nos acusam de ser "cheios de mentiras". Isso é verdade. Aprendi da
maneira mais difícil que, quando estudantes estão aprendendo algo tão difícil quanto programar,
dizer a verdade completa vai apenas confundi-los. Então simplificamos ao máximo o que dizer,
mesmo quando isso nos faz tecnicamente imprecisos.
Se você sabe como programar, e minhas "mentiras"te ofendem, esse livro vai ser difícil
de ler. Mas para aqueles que estão apenas aprendendo, asseguro que querem que eu simplifique as
coisas. Eu prometo que revelo a verdade quando chegar a hora.
Bem, vamos lá, na linha 21 eu fiz uma coisa nova. Até agora você veio imprimindo uma
única coisa entre o par de aspas duplas. Mas é perfeitamente aceitável, e usual, imprimir mais de
uma coisa. Isso funcionará desde que você combine essas coisas antes de imprimir.
Então, na linha 21, eu tenho seis Strings 1 entre aspas duplas: a palavra "Isto", um espaço,
a palavra "é", um espaço, a palavra "um"e finalmente um espaço seguido da palavra "teste"seguida
de um ponto. Há um sinal de adição ("+") entre cada uma dessas seis Strings em um total de cinco
sinais de adição na linha 21. Quando você coloca um sinal de adição entre Strings, o Java gruda2
as duas uma ao lado da outra tornando tudo em uma única coisa e então exibe tudo junto.
Se você tiver algum problema com seu código, provavelmente será na linha 21. Lembre-se
de abrir e fechar corretamente as aspas duplas. Acertar todos esses detalhes pode ser cheio de
surpresas.
A lição de hoje foi, espero, relativamente fácil. Não se preocupe. Vamos ajustar isso na
próxima :D
1O que é uma "String"? É um monte de caracteres (letras, números, símbolos) entre um par de aspas duplas.
Explicarei mais depois.
2Tecnicamente combinar duas palavras para fazer uma maior é chamado "concatenação", não "grudar"e nem
mesmo "somar". Java concatena duas Strings.
Capítulo 4
Sequências escape e comentários
Você já imaginou o que aconteceria se quiséssemos apresentar um sinal de aspas na telas? Já que
tudo que queremos mostrar na tela fica entre aspas no comando println(), colocar aspas dentro
das aspas seria um problema.
A maioria das linguagens de programação permitem que utilizemos "sequências escape"1,
onde você sinaliza com algum caracter especial que o próximo caracter que você ver não será
manipulado da maneira usual.
O código (maligno) a seguir demonstra uma quantidade de sequências escape do Java.
Nomeie-o de SequenciasEscape.java.
1 pub l i c c l a s s SequenciasEscape
2 {
3 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
4 {
5 // Versão I n i c i a l c r i t ada usando FIGlet , f on t e "Big Money" , o r i e n t a ção southwest
6
7 System . out . p r i n t ( "\ t _____\n\ t / | \ n\ t JJJJJ | " ) ;
8 System . out . p r i n t l n ( " ______ __ __ ______" ) ;
9 System . out . p r i n t l n ( "\ t JJ | / \\ / \\ / | / \\" ) ;
10 System . out . p r i n t l n ( "\ t __ JJ | aaaaaa |\"\" \\ /\"\"/ aaaaaa | " ) ;
11 System . out . p r i n t l n ( "\ t / | JJ | / aa | \"\" /\"\"/ / aa | " ) ;
12 System . out . p r i n t l n ( "\ tJJ \\__JJ | / aaaaaaa | \"\" \"\"/ /aaaaaaa | " ) ;
13 System . out . p r i n t l n ( "\ tJJ JJ/ aa aa | \"\"\"/ aa aa | " ) ;
14 System . out . p r i n t l n ( "\ t JJJJJJ/ aaaaaaa/ \"/ aaaaaaa/" ) ;
15 }
16 }
Quando você executá-lo, isto é o que você irá ver:
_____
/ |
JJJJJ | ______ __ __ ______
JJ | / \ / \ / | / \
__ JJ | aaaaaa | "" \ /""/ aaaaaa |
/ | JJ | / aa | "" /""/ / aa |
JJ \__JJ | / aaaaaaa | "" ""/ /aaaaaaa |
JJ JJ/ aa aa | """/ aa aa |
JJJJJJ/ aaaaaaa/ "/ aaaaaaa/
O caracter de escape do Java é a contra-barra ("\"), que está na mesma tecla que você
usou para fazer o pipe no exercício anterior ("|"), mas sem o shift. Todas as sequências escape no
Java devem ficar dentro de um conjunto de aspas.
\" representa uma aspas;
\t é um TAB; ele tem o mesmo efeito de você pressionar a tecla TAB do teclado. Isso
soa complicado agora porque você nunca viu isso antes, mas quando você estiver lendo o código de
alguém, um \t dentro das aspas é menos ambíguo do que um punhado de espaços em branco.
\n é uma nova linha. Quando imprimindo algo, esse símbolo vai fazer com que a próxima
coisa vá para a linha de baixo.
1Sim, eu sei que o nome ficou estranho mas é umas dessas traduções técnicas, ao pé da letra.
21
22 CAPÍTULO 4. SEQUÊNCIAS ESCAPE E COMENTÁRIOS
\\ é como nós mostramos a contra-barra.
Na linha 5 você verá que a linha começa com duas barras. Isso marca uma linha como
"comentário", que está no programa apenas para beneficiar o programador. O compilador vai
ignorar os comentários completamente.
De fato, as duas barras que marcam um comentário não precisam estar no começo da
linha; nós poderíamos escrever algo assim:
System . out . p r i n t l n ( "A" ) ; // mostra ’A ’ na t e l a
... e o programa iria funcionar perfeitamente. Qualquer coisa a partir das barras até o fim
da linha é ignorado pelo compilador.
(Entretando, esse não é um bom exemplo de comentário. Qualquer programador que
conheça Java já sabe o que essa linha de código faz. De forma geral, você escreve comentários
explicando o porquê do código estar ali, não o que o código faz. Você irá ficar mais esperto na
escrita de bons comentários na medida em que fica melhor na programação em geral.)
É isso. Esse capítulo foi um dos trabalhosos, então não teremos desafios de estudo dessa
vez. O próximo capítulo irá trazer uma coisa nova e retornaremos à dificuldade normal.
Capítulo 5
Gravando informações em variáveis
Programas seriam muito chatos se a única coisa que você pudesse fazer fosse imprimir coisas na
tela. Nós queremos que os programas sejam interativos.
Infelizmente, interatividade requer vários conceitos diferentes trabalhando juntos, e explicá-
los todos de uma única vez seria confuso. Então, eu irei cobri-los um de cada vez.
Primeiro: variáveis! Se você já teve aula de matemática, você conhece o conceito de
variáveis nas contas. Linguagens de programação têm variáveis também e o conceito básico éo
mesmo:
"Uma variável é um nome que se refere a um local que guarda um valor". As variáveis em
Java possuem quatro diferenças principais das variáveis da matemática:
• O nome das variáveis podem ser grandes, e não apenas uma letra;
• As variáveis podem conter mais do que apenas números, elas podem guardar palavras;
• Você tem que escolher qual o tipo de valor a variável vai guardar no momento da criação da
variável;
• O valor da variável (mas não o tipo de valor) pode mudar durante o programa. A variável
pontos pode começar com o valor 0, mas ao fim do programa, pontos pode estar com o valor
413500.
Certo, chega de conversa. Vamos programar! Eu não vou te falar qual deve ser o nome do
arquivo. Daqui para frente, você terá que descobrir sozinho.
1 pub l i c c l a s s Cr iandoVar iave i s
2 {
3 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
4 {
5 i n t x , y , idade ;
6 double segundos , e , sa ldo ;
7 S t r ing primeiroNome , ultimo_nome , t i t u l o ;
8
9 x = 10 ;
10 y = 400 ;
11 idade = 39 ;
12
13 segundos = 4 . 7 1 ;
14 e = 2.71828182845904523536;
15 sa ldo = 1 . 8 9 ;
16
17 primeiroNome = "Asdrúbal " ;
18 ultimo_nome = "Te ixe i r a " ;
19 t i t u l o = "Sr . " ;
20
21 System . out . p r i n t l n ( "A va r i á ve l x cont ém " + x ) ;
22 System . out . p r i n t l n ( "O va lo r " + y + " e s t á guardado na va r i á ve l y . " ) ;
23 System . out . p r i n t l n ( "O experimento executou em " + segundos + " segundos . " ) ;
24 System . out . p r i n t l n ( "Meu número i r r a c i o n a l f a v o r i t o é a constante de Euler : " +
e ) ;
25 System . out . p r i n t l n ( "Graç as a Deus meu sa ldo é mais de R$" + sa ldo + " ! " ) ;
26 System . out . p r i n t l n ( "Meu nome completo é " + t i t u l o + " " + primeiroNome +
ultimo_nome ) ;
23
24 CAPÍTULO 5. GRAVANDO INFORMAÇÕES EM VARIÁVEIS
27 }
28 }
O que você deve ver
A var i á ve l x cont ém 10
O va lo r 400 e s t á guardado na va r i á ve l y .
O experimento executou em 4.71 segundos .
Meu número i r r a c i o n a l f a v o r i t o é a constante de Euler : 2 .718281828459045
Graç as a Deus meu sa ldo é mais de R$1 . 8 9 !
Meu nome completo é Sr . Asdrú ba lTe i x e i r a
Da linha 5 até a 7 nós declaramos1nove variáveis. As primeiras três são chamadas de x, y
e idade. Todas as três variáveis são "inteiros", que é o tipo de variável que podem conter valores de
mais ou menos dois bilhões.
A variável que tem o tipo inteiro pode conter o valor 10. Ela pode também conter o valor
-8192. Uma variável inteiro pode ainda conter o valor 123456789. Ela não pode conter o valor 3.14
porque esse valor tem uma parte fracional. Um inteiro não pode conter o valor 10000000000 porque
dez bilhões é grande demais.
Na linha 6 nós declaramos variáveis chamadas segundos, e, e saldo. Essas três variáveis
são "double", que é o tipo de variável que pode conter um número com decimais.
A variável que tem o tipo double pode conter o valor 4.71. Ela pode ter o valor -8192 (pode
ser um valor com decimal, mas não é obrigatório). Ela pode ter qualquer valor entre +- 1.79769 X
10^308 e 4.94065 X 10e-324.
Entretanto, doubles tem uma precisão limitada. Observe que na linha 14 eu armazenei
o valor 2.71828182845904523536 na variável chamada e, mas quando eu imprimi o valor na linha
24, apenas 2.718281828459045 apareceu. Doubles não tem dígitos significativos o suficiente para
guardar 2.71828182845904523536 com total precisão. Inteiros têm precisão perfeita, mas guardam
apenas números inteiros e não podem guardar valores muuuuuito grandes.
Como Java é uma linguagem feita nos Estados Unidos, dentro do seu programa você terá
que se adequar a como as coisas são feitas por lá, isto é, o ponto é que divide decimais, e não a
vírgula. Outra coisa, nunca use acentos, til ou ç em nomes de variáveis.
O último tipo de variáveis que iremos ver nesse exercício é a String. Na linha 7 nós
declaramos três variáveis do tipo String: primeiroNome, ultimo_nome e titulo. Variáveis String
podem conter palavras e frases.
Das linhas 9 a 11 nós inicializamos2três valores inteiros. O valor 10 é guardado em x.
Antes desse ponto, a variável x existe, mas seu valor é indefinido. 400 é guardade em y e 39 é
guardado na variável idade.
As linhas 13 a 15 dão o valor inicial para as três variáveis double e as linhas 17 a 19
inicializam as três variáveis String. Então, as linhas 21 a 26 mostram na tela os valores gravados
nessas variáveis. Observe que o nome das variáveis não estão dentro das aspas.
Eu sei que não tem sentido usar variáveis para um programa como esse, mas logo logo
tudo ficará mais claro.
1Declarar - dizer ao programa o nome (ou o "identificador") e o tipo da variável.
2Inicializar - colocar o primeiro valor dentro de uma variável.
Capítulo 6
Operações matemáticas
Agora que sabemos como declarar e inicializar variáveis em Java, nós podemos fazer algumas contas
com essas variáveis.
1 pub l i c c l a s s OperacoesMatematicas
2 {
3 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
4 {
5 i n t a , b , c , d , e , f , g ;
6 double x , y , z ;
7 S t r ing um, dois , ambos ;
8
9 a = 10 ;
10 b = 27 ;
11
12 System . out . p r i n t l n ( "a é " + a + " , b é " + b ) ;
13
14 c = a + b ;
15 System . out . p r i n t l n ( "a+b é " + c ) ;
16 d = a − b ;
17 System . out . p r i n t l n ( "a−b é " + d ) ;
18 e = a+b ∗3 ;
19 System . out . p r i n t l n ( "a+b∗3 é " + e ) ;
20 f = b / 2 ;
21 System . out . p r i n t l n ( "b/2 é " + f ) ;
22 g = b % 10 ;
23 System . out . p r i n t l n ( "b%10 é " + g ) ;
24
25 x = 1 . 1 ;
26 System . out . p r i n t l n ( "\nx é " + x ) ;
27 y = x∗x ;
28 System . out . p r i n t l n ( "x∗x é " + y ) ;
29 z = b / 2 ;
30 System . out . p r i n t l n ( "b/2 é " + z ) ;
31 System . out . p r i n t l n ( ) ;
32
33 um = " cachorro " ;
34 do i s = "quente " ;
35 ambos = um + do i s ;
36 System . out . p r i n t l n ( ambos ) ;
37 }
38 }
Quando você executar o programa, você verá o seguinte:
a é 10 , b é 27
a+b é 37
a−b é −17
a+b∗3 é 91
b/2 é 13
b%10 é 7
x é 1 .1
x∗x é 1.2100000000000002
b/2 é 13 .0
cachorroquente
O sinal de mais (+) irá somar dois integers ou dois doubles, ou um integer e um double
25
26 CAPÍTULO 6. OPERAÇÕES MATEMÁTICAS
(em qualquer ordem). Com duas Strings (como as da linha 34) o programa irá concatenar 1 as duas
Strings juntas.
O sinal de menos (-) irá subtrair um número do outro. Da mesma maneira que a adição,
ele trabalha com dois integers, dois doubles ou um integer e um double (em qualquer ordem).
Um asterisco (*) é utilizado para representar uma multiplicação. Você pode ver também
na linha 17 que o Java sabe a ordem correta das operações. b é multiplicado por 3 resultando 81 e
então a é adicionado.
Uma contrabarra (/) é utilizada para divisão. Observe que quando um integer é dividido
por outro integer (como na linha 19) o resultado é também um integer e não um double.
O sinal de porcentagem (%) é utilizado como o operador ’módulo’, que essencialmente é o
resto depois da divisão. Na linha 21 b é dividido por 10 e o resto 7 é armazenado em uma variável
g.
Questões mais comuns
Por que 1.1 vezes 1.1 é igual a 1.2100000000000002 ao invés de 1.21?
Por que 0.333333+ 0.666666 é igual a 0.999999 ao invés de 1.0? Às vezes com a matemática
nós obtemos dízimas e a maioria dos computadores converte os números para o sistema binário antes
de trabalhar com eles. Assim 1.1 é uma dízima em binário.
Lembre-se do que eu disse no exercício anterior: o problema com os doubles é a precisão
limitada. Você vai ver que pode ignorar esse fato ao longo do livro, mas eu quero que você guarde
em algum lugar não tão escuro da sua cabeça que variáveis do tipo double às vezes dão resultados
ligeiramente diferentes do que você espera.
1“concatenar” - juntar Strings de caracteres formando uma String grande.Capítulo 7
Obtendo entradas por um humano
Agora que praticamos a criação de variáveis um pouco, vamos dar uma olhada em outra parte de
um programa interativo: permitir que o humano que está executando o programa tenha a chance
de fazer alguma coisa.
Vá em frente e digite isso, mas observe que a primeira linha do programa não é a public
class costumeira. Desta vez, nós começamos com um comando import.
Nem todo programa precisa de entradas interativas de um humano pelo teclado, então essas
características não fazem parte do núcleo da linguagem Java. Assim como um carro de Fórmula 1
não vem com ar condicionado, as linguagens de programação geralmente tem um pequeno núcleo
principal e um monte de bibliotecas 1que podem ser incluídas se desejado.
1 import java . u t i l . Scanner ;
2
3 pub l i c c l a s s MaquinaEsquecida
4 {
5 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
6 {
7
8 Scanner t e c l ado = new Scanner ( System . in ) ;
9
10 System . out . p r i n t l n ( "Qual é a c a p i t a l da França?" ) ;
11 t e c l ado . next ( ) ;
12
13 System . out . p r i n t l n ( "Quanto é 6 mu l t ip l i c ado por 7?" ) ;
14 t e c l ado . next Int ( ) ;
15
16 System . out . p r i n t l n ( "Qual é o seu número f a v o r i t o ent r e 0 . 0 e 1 .0? " ) ;
17 t e c l ado . nextDouble ( ) ;
18
19 System . out . p r i n t l n ( " Ex i s t e mais alguma co i s a que voc ê g o s t a r i a de me d i z e r ?" ) ;
20 t e c l ado . next ( ) ;
21 }
22 }
Quando você executar esse programa, só será mostrada a primeira linha:
Qual a capital da França?
... e então o cursor irá ficar piscando para você, esperando que você digite uma palavra.
Quando eu executei o programa, eu digitei "Paris", mas o programa irá funcionar se você digitar
uma palavra diferente.
Então, após você digitar a palavra, pressiona Enter, e o programa irá continuar mostrando:
Quanto é 6 multiplicado por 7?
... e assim em diante. Assumindo que você digitou respostas razoáveis para cada questão,
ele irá terminar parecendo algo como:
Qual a c a p i t a l da França?
Par i s
1Biblioteca ou “Módulo” - um pedaço de código que adiciona funcionalidade extra a um programa e que pode ou
não ser incluída.
27
28 CAPÍTULO 7. OBTENDO ENTRADAS POR UM HUMANO
Quanto é 6 mu l t ip l i c ado por 7?
42
Qual é o seu número f a v o r i t o ent r e 0 .0 e 1 .0?
2 .3
Ex i s t e mais alguma co i s a que voc ê g o s t a r i a de me d i z e r ?
Não , muito obr igado .
Vamos falar sobre o código. Na linha 1 nós temos o comando import. A biblioteca que nós
importamos é a biblioteca java.util.Scanner (é asssim que se fala: java ponto útil ponto scanner).
Essa biblioteca contém as funcionalidades que nos permitem ler informações a partir do teclado ou
outros lugar como arquivos ou internet.
Linhas 2 a 7 são meio chatas. Na linha 8 vemos algo novo: nós criamos um "objeto
Scanner"chamado "teclado". Ele não precisa se chamar "teclado"; você pode usar uma palavra
diferente, desde que use a mesma palavra por todo o código. Esse objeto Scanner chamado teclado
contém as habilidades que nós iremos chamar de funções ou "métodos". Você precisa criar e nomear
um objeto Scanner antes de você usá-lo.
Na linha 10 nós pedimos que o objeto Scanner o qual chamamos teclado para que faça
algo para nós. Dizemos "Teclado, execute sua função next()". O objeto Scanner vai parar a
execução do programa e esperar até que o humano digite algo. Uma vez que o humano digite
alguma coisa e pressione ENTER, o objeto Scanner vai empacotar isso em uma String e permitir
que o seu código continue.
Na linha 13 nós pedimos para o objeto Scanner executar a sua função nextInt(). Isso
pausa o programa, espera o ser humano digitar alguma coisa e pressionar Enter, depois empacota
o que foi digitado como um valor inteiro (se for possível) e continua.
E se o humano não digitar um inteiro? Tente rodar o programa novamente e digitar 41.9
como resposta para a segunda questão.
O programa explode e não roda mais nada, porque 41.9 não pode ser empacotado como um
valor inteiro: 41.9 é um double. Eventualmente, nós iremos dar uma olhada em algumas maneiras
de fazer a checagem de erro para coisas desse tipo, mas por enquanto, se a pessoa digitar algo
incorretamente e isso detonar com o programa, nós vamos culpar o ser humano por não seguir as
instruções e não vamos nos preocupar com isso.
A linha 16 deixa o humano digitar algo que o objeto Scanner vai tentar converter para
um valor double, e a linha 19 deixa o humano digitar uma String. (Qualquer coisa pode ser
empacotada como uma String, incluíndo números, então essa linha nunca deve dar problema).
Tente executar o programa várias outras vezes. Observe quando dá pau e quando não dá.
Capítulo 8
Guardando as respostas do humano
No último exercício, você aprendeu como pausar o programa e permitir que o humano digitasse
alguma coisa. Mas o que aconteceu com aquilo que você digitou? Quando você digitou a resposta
"Paris"na primeira questão, para onde foi essa resposta? Bem, ela foi jogada fora assim que você
digitou porque nós não colocamos nenhuma instrução para o objeto Scanner dizendo onde ele deveria
guardá-la. Esse é exatamente o tópico dessa lição.
1 import java . u t i l . Scanner ;
2
3 pub l i c c l a s s Ques toe s Inde l i cadas
4 {
5 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
6 {
7 St r ing nome ;
8 i n t idade ;
9 double peso , s a l a r i o ;
10
11 Scanner t e c l ado = new Scanner ( System . in ) ;
12
13 System . out . p r i n t ( "Olá . Qual o seu nome? " ) ;
14 nome = tec l ado . next ( ) ;
15
16 System . out . p r i n t ( "Olá , " + nome + " ! Qual a sua idade ? " ) ;
17 idade = tec l ado . next Int ( ) ;
18
19 System . out . p r i n t l n ( "Então você tem " + idade + " anos , he in ? Você não é ve lho . "
) ;
20 System . out . p r i n t ( "Quanto você pesa , " + nome + "? " ) ;
21 peso = tec l ado . nextDouble ( ) ;
22
23 System . out . p r i n t ( peso + " kg ! Melhor não contar para ninguém . Finalmente , qual
o seu s a l á r i o " + nome + "? " ) ;
24 s a l a r i o = tec l ado . nextDouble ( ) ;
25
26 System . out . p r i n t l n ( "Espero que sejam R$ " + s a l a r i o + " por hora e não por mês !
" ) ;
27 System . out . p r i n t l n ( "Bem, obr igado por responder e s s a s ques tõe s i nde l i c ada s , " +
nome + " . " ) ;
28 }
29 }
Igual ao último exercício, quando você executa esse programa só é mostrada a primeira
pergunta, então pausa, esperando a resposta:
Olá. Qual o seu nome?
Observe que, como o primeiro comando de impressão na linha 13 é um print() ao invés
de um println(), o cursor fica piscando no fim da mesma linha que a pergunta foi feita. Se você
tivesse usado println(), o cursor estaria piscando no começo da próxima linha.
O que você deverá ver
Olá . Qual o seu nome?
Olá , João ! Qual a sua idade
29
30 CAPÍTULO 8. GUARDANDO AS RESPOSTAS DO HUMANO
Então voc ê tem 25 anos , he in ? Você não é ve lho .
Quanto voc ê pesa , João?
93 .0 kg ! Melhor não contar para ningu ém. Finalmente , qual o seu s a l á r i o João?
Espero que sejam R$ 500 ,00 por hora e não por mê s !
Bem, obr igado por responder e s s a s perguntas i nde l i c ada s , João .
No topo do programa nós declaramos quatro variáveis: uma String chamada nome , uma
variável inteira chamada idade e duas variáveis double chamadas peso e salario (lembrando que
nomes de variáveis não podem ter acentos).
Na linha 14 nós encontramos o teclado.next() que, como sabemos a partir do exercício
anterior, irá parar o programa e esperar o humano digitar alguma coisa que será empacotada como
uma String. E agora, para onde que o texto digitado vai? Nesse caso, nós estamos armazenando
esse valor na variável String chamada nome. O valor String fica armazenado dentro de uma variável
do tipo String. Legal.
Assumindo que você digitou "João"para o seu nome,a String valendo "João"é armazenada
na variável nome na linha 14. Isso significa que na linha 16, nós podemos mostrar esse valor na tela!
Isso é muito legal, na minha opinião.
No linha 17 nós pedimos ao objeto Scanner deixar o ser humano digitar alguma coisa que
nós iremos tentar empacotar como um inteiro, então esse valor será armazenado na variável inteira
(isto é: int) chamada idade. Nós mostramos esse valor na tela na linha 19.
A linha 21 lê um valor double e armazena em peso, e a linha 24 lê outro valor double e
guarda em salario.
Isso é uma coisa realmente poderosa. Com algumas variáveis e a ajuda do objeto Scanner,
nós podemos deixar o ser humano digitar informações, e nós podemos armazená-las em uma variável
para usarmos mais tarde no programa.
Antes de encerrar, veja que, por exemplo, a variável salario é declarada lá em cima, na
linha 9, lembrando que "declarar"é quando nós escolhemos seu nome e tipo, mas ela é indefinida,
isto é, não tem valor até na linha 24. Na linha 24 salario é finalmente inicializada (recebe seu
primeiro valor no programa). Se você tivesse tentado mostrar o valor de salario na tela antes da
linha 24, o programa não iria compilar.
Bem, brinque um pouco digitando respostas diferentes para as questões e veja se você
consegue fazer o programa dar pau após cada questão.
Capítulo 9
Cálculos a partir da entrada do usuário
Agora que nós sabemos receber entradas do usuário e gravar em variáveis, e já que temos um
conhecimento básico em matemática, nós podemos escrever o nosso primeiro programa realmente
útil!
1 import java . u t i l . Scanner ;
2
3 pub l i c c l a s s CalculadoraIMC
4 {
5 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
6 {
7 Scanner t e c l ado = new Scanner ( System . in ) ;
8 double m, kg , imc ;
9
10 System . out . p r i n t ( "Sua a l tu r a em m: " ) ;
11 m = tec l ado . nextDouble ( ) ;
12
13 System . out . p r i n t ( "Seu peso em kg : " ) ;
14 kg = tec l ado . nextDouble ( ) ;
15
16 imc = kg / (m∗m) ;
17
18 System . out . p r i n t l n ( "Seu IMC é " + imc ) ;
19 }
20 }
O que você deve ver
Sua a l tu r a em m: 1 ,75
Seu peso em kg : 73
Seu IMC é 23.836734693877553
Esse exercício é (tomara) bem tranquilo de entender. Nós temos três variáveis (todas
double): m (metros), kg (kilogramas) e imc (índice de massa corporal). Nós lemos os valores para
m e kg, mas o valor de imc não vem de um humano, mas como resultado de um cálculo. Na linha
16 nós calculamos a massa dividido pelo quadrado da altura e guardamos o resultado em imc. E
depois nós mostramos o valor.
O índice de massa corporal (IMC) é comumente usado pelos pelos profissionais de nutrição
para estimar a gordura corporal na população. Essa informação é interessante para os profissionais
de saúde.
Logo mais iremos aprender como mostrar mensagens diferentes na tela dependendo do
valor do IMC. Por agora, isso é tudo o que podemos fazer.
Um programa bem fácil para hoje, mas eu tenho alguns desafios para você nos Desafios
para Estudo que irão tornar as coisas um pouquinho mais difíceis.
Desafios para estudo
1. Adicione algumas variáveis e mude o programa para que o humano possa digitar o peso e a
altura em centímetros e gramas. Depois converta esses valores para kilogramas e metros para
31
32 CAPÍTULO 9. CÁLCULOS A PARTIR DA ENTRADA DO USUÁRIO
calcular o IMC.
Sua a l tu r a em cent í metros : 175
Seu peso em gramas : 73000
Seu IMC é 23.836734693877553
2. Vamos permitir que um americano use o sistema. Para isso, vamos pedir a altura em polegadas.
Faça a conversão para centímetros e calcule o IMC.
Sua a l tu r a em polegadas : 69
Seu peso em gramas : 73000
Seu IMC é 23 .8
Capítulo 10
Variáveis apenas guardam valores
Beleza, agora que deixamos um humano entrar com valores e fazemos cálculos com ele, eu quero
chamar atenção para algo que confunde muitos dos meus estudantes. O código a seguir deve
compilar, mas provavelmente não vai funcionar da maneira que você esperaria.
Eu cometi intencionalmente um erro lógico no código. Não é um problema de sintaxe (a
parte do código que o compilador verifica), e não é um erro de tempo de execução igual aquele que
você teve quando o humano digitou um double quando o objeto Scanner esperava um inteiro. O
erro lógico é uma falha em como eu desenhei o fluxo das intruções, de forma que o resultado não é
o que eu esperava obter.
1 import java . u t i l . Scanner ;
2
3 pub l i c c l a s s Sequencia
4 {
5 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
6 {
7 // COM ERRO
8
9 Scanner t e c l ado = new Scanner ( System . in ) ;
10 double preco = 0 , imposto , t o t a l ;
11
12 imposto = preco ∗ 0 . 0 825 ;
13 t o t a l = preco + imposto ;
14
15 System . out . p r i n t ( "Qual é o pre ço de compra? " ) ;
16 preco = tec l ado . nextDouble ( ) ;
17
18 System . out . p r i n t l n ( "Pre ço do item :\ t R$ " + preco ) ;
19 System . out . p r i n t l n ( " Imposto : \ t R$ " + imposto ) ;
20 System . out . p r i n t l n ( "Custo t o t a l : \ t R$ " + t o t a l ) ;
21 }
22 }
O que você deve ver
Qual é o pre ço de compra? 7 .99
Pre ço do item : R$ 7 .99
Imposto : R$ 0 .0
Custo t o t a l : R$ 0 .0
Você está surpreso com o resultado? Você esperava que um imposto sobre R$ 7.99 mos-
trasse algo como R$ 0.66 ao invés de um gradessíssimo zero? E que o custo total fosse algo do tipo
R$ 8.65, certo? O que acontece?
O que aconteceu é que em Java (como na maioria das linguagens), variáveis não conseguem
guardar fórmulas. Variáveis guardam apenas valores.
Olhe para a linha 12. Meus estudantes pensam que essa linha armazena a fórmula preco *
0.0825 na variável imposto e depois o humano coloca o valor 7.99 na variável preco. Eles pensam
que na linha 19, quando mostramos o imposto, o computador executa a fórmula de algum jeito.
Não é isto o que acontece. De fato, esse programa nem deveria ter compilado. A variável
33
34 CAPÍTULO 10. VARIÁVEIS APENAS GUARDAM VALORES
preco não deveria nem ter um valor na linha 12. A única razão de ela ter é que eu fui meio
“espertinho” na linha 10.
Normalmente nós temos declarado as variáveis no começo do programa e depois fazemos a
inicialização. Mas na linha 10 eu declarei preco e inicializei com 0. Quando você declara e inicializa
uma variável ao mesmo tempo, nós dizemos que você “definiu” a variável. imposto e total não
estão definidas na linha 10, apenas declaradas.
Então na linha 16 o valor digitado não inicializa preco; preco já tem um valor inicial
(0). Mas o valor digitado (7.99 ou qualquer outro) é armazenado na variável preco aqui. O 0 é
substituído por 7.99.
Da linha 10 até a 15, a variável preco contém o valor 0. Quando a linha 16 começa a
executar e enquanto estamos esperando o humano digitar alguma coisa, preco ainda contám 0.
Mas quando a linha 16 completa, qualquer coisa digitada é armazenado em preco, substituindo o
zero. Então da linha 17 até o fim do programa, a variável preco contém o valor 7.99 (ou qualquer
outro).
Com isso em mente, nós podemos entender o que realmente acontece na linha 12. A linha
12 não guarda uma fórmula em imposto, mas guarda um valor. Que valor? Ele pega o valor da
variável preco neste ponto do código (que é 0), multiplica por 0.825 (com o resultado ainda sendo
0), e grava o valor zero em imposto.
Quando a linha 12 está começando, o valor de imposto é indefinido. (imposto foi declarado,
mas não definido). Ao fim da linha 12, imposto tem o valor 0. Não existe linha de código que muda
o valor de imposto (não existe linha de código que comece com imposto =), então esse valor nunca
muda e imposto ainda é zero quando ele é mostrado na linha 19.
A linha 13 é similar. Ela pega o valor de preco bem ali (zero) e adiciona ao valor de
imposto (também zero) e guarda a soma (que é zero) na variável total. O valor de total nunca é
modificado, e total não “lembra” que o valordele veio de uma fórmula envolvendo outras variáveis.
Aí está. Variáveis guardam valores, não fórmulas. Programas de computadores não são
um conjunto de regras, eles são uma sequência de instruções que o computador executa em ordem,
e as coisas que estão mais no fim do código dependem das que estão antes.
Desafios para estudo
1. Remova o "=0"da linha 10, de forma que preco não seja mais definido na linha 10, mas apenas
declarado. O que acontece quando você tenta compilar o código? A mensagem de erro faz
sentido? (Agora, coloque o “ = 0” de volta para o programa compilar de novo).
2. Mova as duas linhas de código que colocam os valores em imposto e total para que isso
ocorra depois de preco receber um valor para valer. Veja que o programa funciona conforme
esperado.
3. Agora que essas linhas são executadas após a variável preco receber um valor “para valer”,
tente remover novamente o “ = 0” na linha 10. O programa ainda está dando erro? Você ficou
surpreso?
Capítulo 11
Atalhos para mudança de valores de
variáveis
O valor de uma variável pode mudar ao longo do tempo, enquanto o programa executa. Esse
conteúdo não vai mudar a menos que você escreva um código para mudá-lo, o que quero dizer é que
ele pode mudar.
Na verdade, isso é bem comum. Algo que fazemos com alguma frequência é pegar uma
variável e adicionar algo a ela. Por exemplo, vamos dizer que a variável x contém o valor 10.
Queremos adicionar 2 a essa variável x de forma que ela agora contenha o valor 12.
Podemos fazer assim:
i n t x = 10 , temp_x ;
temp_x = x + 2 ;
x = temp_x
Isso vai funcionar, mas é entediante. Se você quiser, podemos nos aproveitar do fato de
que a variável pode ter um valor no início da linha de código e ter um valor diferente no final. Dessa
forma podemos reescrever assim:
i n t x = 10 ;
x = 2 + x ;
Isso também funciona. A segunda linha diz “pegue o valor atual de x (10), e some 2 e
armazene a soma 12 na variável x”. Então, quando a segunda linha de código começa a executar x
tem o valor 10 e quando terminar a execução o valor de x é 12. A ordem da adição não importa,
podemos ter algo assim:
1 i n t x = 10 ;
2 x = x + 2 ;
... que tem o mesmo efeito do exemplo anterior. Tudo certo, agora vamos codificar!
1 pub l i c c l a s s AtalhosMudamVariaveis
2 {
3 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
4 {
5 i n t i , j , k ;
6
7 i = 5 ;
8 j = 5 ;
9 k = 5 ;
10
11 System . out . p r i n t l n ( " i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
12 i = i + 3 ;
13 j = j − 3 ;
14 k = k ∗ 3 ;
15 System . out . p r i n t l n ( " i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
16
17 i = 5 ;
18 j = 5 ;
19 k = 5 ;
20
21 System . out . p r i n t l n ( "\ n i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
22 i += 3 ;
23 j −= 3 ;
35
36 CAPÍTULO 11. ATALHOS PARA MUDANÇA DE VALORES DE VARIÁVEIS
24 k ∗= 3 ;
25 System . out . p r i n t l n ( " i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
26
27 i = j = k = 5 ;
28
29 System . out . p r i n t l n ( "\ n i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
30 i += 1 ;
31 j −= 2 ;
32 k ∗= 3 ;
33 System . out . p r i n t l n ( " i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
34
35 i = j = k = 5 ;
36
37 System . out . p r i n t l n ( "\ n i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
38 i =+ 1 ;
39 j =− 2 ;
40 System . out . p r i n t l n ( " i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
41
42 i = j = k = 5 ;
43
44 System . out . p r i n t l n ( "\ n i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
45 i++;
46 j−−;
47 System . out . p r i n t l n ( " i : " + i + "\ t j : " + j + "\ tk : " + k ) ;
48
49 }
50 }
O que você deve ver
i : 5 j : 5 k : 5
i : 8 j : 2 k : 15
i : 5 j : 5 k : 5
i : 8 j : 2 k : 15
i : 5 j : 5 k : 5
i : 6 j : 3 k : 15
i : 5 j : 5 k : 5
i : 1 j : −2 k : 5
i : 5 j : 5 k : 5
i : 6 j : 4 k : 5
Por sorte as linhas 1 a 21 são fáceis e sem graça. Nós criamos três variáveis, atribuímos
valores a elas, as mostramos na tela, mudamos seu valor e mostramos na tela novamente. Então,
a partir da linha 17 nós damos a essas variáveis os mesmos valores que elas tinham no início e
imprimimos tudo novamente.
Na linha 22 vemos uma coisa nova, um atalho chamado “operador composto de atribuição”.
O i += 3 significa o mesmo que i = i + 3 : “tome o valor corrente de i, adicione 3 a ele e
armazene o resultado como o novo valor de i”. Quando ler este código em voz alta, diga “i mais
igual 3”.
Na linha 23 nós vemos -= (“menos igual”), que subtrai 3 de k e a linha 24 demonstra *=,
que multiplica. Há também o /= que divide qualquer variável que está do lado esquerdo por um
valor qualquer que esteja do lado direito. “Módulo igual” (%=) também existe, e faz com que o
valor do lado esquerdo se iguale ao resto da divisão pelo valor que está do lado direito qualquer que
seja ele. Ufa!
Então, na linha 27 eu faço uma coisa maluca. Ao invés de usar três linhas de código para
atribuir os valores de i, j e k, todos para 5, eu faço tudo em uma linha só. Algumas pessoas
não gostam desse truque, mas acho que é razoável usá-lo em casos como esse. A linha 27 significa
“coloque o valor 5 na variável k. Então copie o valor que está agora em k (que é 5) e coloque-o em
j. Então, pegue a cópia do valor, qualquer que seja, que está em j e guarde este valor em i”. Logo
que esta linha termine, as três variváveis terão seu valor igual a 5.
Das linhas 30 até a 32 há basicamente uma repetição do que temos nas linhas 22 a 24 exceto
que não estamos mais usando o valor 3 como número para acrescentar, subtrair ou multiplicar.
37
A linha 38 pode parecer um erro de digitação e se você escrever isso em um código seu talvez
seja mesmo. Observe que ao invés de += eu escrevi =+. Isso vai compilar, mas não será interpretado
da maneira que você espera. O compilador vê i = +1; que quer dizer “atribua à variável i o valor
positivo 1”. E a linha 39 é similar: “atribua à variável j o valor 2 negativo”. Então, tenha cuidado!
Na linha 45 nós vemos mais um atalho: o “operador de pós-incremento”. i++ significa
“adicione 1 à variável i, não importa o que tenha lá”. É o mesmo que escrever i = i + 1 ou i+=
1 . Acrescente 1 à variável i é super comum. Você verá! É por isso que existe um atalho especial
para isso.
Na linha 46 nós vemos o “operador de pós-decremento”: j–. Ele subtrai 1 do valor em j.
Hoje a lição é incomum pois esses atalhos são opcionais. Você pode escrever código durante
a vida inteira e nunca utilizá-los. Entretanto, muitos programadores são preguiçosos e não querem
digitar mais do que o necessário, então, ao ler o código de outras pessoas você vai encontrar esses
atalhos com uma boa frequência.
38 CAPÍTULO 11. ATALHOS PARA MUDANÇA DE VALORES DE VARIÁVEIS
Capítulo 12
Expressões booleanas
Até agora vimos três tipos de variáveis:
• int: armazenam números inteiros (positivos ou negativos) sem parte decimal.
• double: números "ponto flutuante de precisão dupla"(positivos ou negativos) que podem ter
uma parte decimal.
• String: uma cadeia de caracteres, guarda palavras, frases, símbolos, sentenças, qualquer
coisa.
Mas de acordo com mestre Yoda, “tipo de variável, um mais há”. Uma variável “boolean”,
que tem esse nome devido ao matemático George Boole, não pode armazenar números ou palavras.
Ela pode armazenar apenas um destes dois valores: true ou false. 1 E só isso. Podemos usá-las
para fazer lógica! Ao código, já!
1 import java . u t i l . Scanner ;
2
3 pub l i c c l a s s ExpressoesBooleanas
4 {
5 pub l i c s t a t i c void main ( St r ing [ ] a rgs )
6 {
7 Scanner t e c l ado = new Scanner ( System . in ) ;
8
9 boolean a , b , c , d , e , f ;
10 double x , y ;
11
12 System . out . p r i n t ( "Dê−me do i s números . Pr imeiro : " ) ;
13 x = tec l ado . nextDouble ( ) ;
14 System . out . p r i n t ( "Segundo : " ) ;
15 y = tec l ado . nextDouble ( ) ;
16
17 a = (x

Mais conteúdos dessa disciplina