Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila de Android Programando DO ZERO Android Studio
Apostila de Android Programando DO ZERO Android Studio
Se por acaso você encontrar este material sendo distribuído em outro site ou
sendo comercializado (sem ser pelo site oficial da apostila), por favor, entre em
contato com o autor (ver e-mail na primeira página).
2
Sobre o Autor da Apostila
3
Apresentação
Atualmente, nos dias de hoje, vivemos conectados em um mundo em que se
predomina a tecnologia, e a tecnologia que vem ganhando força está
fortemente empregada e destacada nos dispositivos móveis (como
Smartphones e Tablets).
Se você, que está lendo este material, não possui nenhum conhecimento sobre
desenvolvimento de aplicações para dispositivo móvel e queira um PONTAPÉ
INICIAL para a construção do seu próprio aplicativo, VOCÊ ESCOLHEU O
MATERIAL QUE IRÁ CAPACITÁ-LO A REALIZAR ESSE OBJETIVO.
O material está organizado de tal forma que você possa compreender todo o
processo de construção de um aplicativo (de forma geral), com foco para a
plataforma Android. Na primeira parte iremos ver alguns conceitos e
fundamentos da informática, em seguida iremos aprender lógica de
programação e algoritmos , depois iremos aprender a linguagem Java (que é a
linguagem que será utilizada para o desenvolvimento no Android), e por fim,
desenvolver nossas aplicações para Android.
4
Índice analítico
Capitulo 1 Fundamentos sobre informática .................................................. 9
1.1) O que é um computador ? ....................................................................... 9
1.2) O que é um sistema operacional ? ........................................................ 10
1.3) O que é um dispositivo móvel ? ............................................................. 10
1.4) O que é linguagem binária ?.................................................................. 11
Capitulo 2 Lógica de programação e algoritmos ....................................... 12
2.1) O que é algoritmo ? ............................................................................... 12
2.2) O que é linguagem de programação ? .................................................. 15
2.3) O que é português estruturado (PORTUGOL) ? .................................. 16
2.4) Usando o Visualg .................................................................................. 17
2.4.1) Estrutura geral de um ALGORITMO ............................................... 18
2.4.2) Escrevendo nosso primeiro programa ............................................ 19
Capitulo 3 Gerenciando dados na memória................................................ 25
3.1) Como funciona a memória..................................................................... 26
3.2) Dados , informações e instruções ......................................................... 28
3.2.1) O que é dado ? ............................................................................... 28
3.2.2) O que é informação ?...................................................................... 28
3.2.3) O que é instrução ? ......................................................................... 29
3.3) Entrada, processamento e saída de informações ................................. 31
3.4) Variáveis e tipos de dados..................................................................... 31
3.4.1) Declarando variáveis ....................................................................... 33
3.4.2) Regras para declaração de variáveis .............................................. 35
3.5) Lendo dados via teclado ........................................................................ 38
3.6) Trabalhando com variáveis no Visualg .................................................. 39
3.7) O comando de atribuição....................................................................... 49
3.8) Operadores aritméticos e expressões ................................................... 52
Capitulo 4 Estrutura condicional ................................................................. 60
4.1) A estrutura SE/ ENTÃO ......................................................................... 60
4.2) A estrutura SE/ ENTÃO/SENÃO ........................................................... 67
4.3) Tabela de operadores relacionais ......................................................... 74
4.4) Operadores lógicos................................................................................ 75
4.4) A estrutura ESCOLHA/CASO ................................................................ 88
5
Capitulo 5 Estrutura de repetição ................................................................ 94
5.1) A estrutura de repetição ENQUANTO ................................................... 94
5.2) A estrutura de repetição REPEITA/ATÉ .............................................. 108
5.3) A estrutura de repetição PARA/FAÇA ................................................. 109
5.4) Observações a respeito dos loops de repetição .................................. 114
Capitulo 6 Trabalhando com Vetores ........................................................ 115
Capitulo 7 Trabalhando com Sub-rotinas ................................................. 128
7.1) O que é uma sub-rotina ? .................................................................... 128
7.2) O que é procedimento ? ...................................................................... 134
7.3) O que é são parâmetros ? ................................................................... 139
7.4) O que é são funções ?......................................................................... 145
7.5) Variáveis locais e variáveis globais ..................................................... 151
Capitulo 8 Lista de exercícios de algoritmos. ........................................... 154
8.1) Programação Sequencial .................................................................... 154
8.2) Variáveis .............................................................................................. 156
8.3) Estrutura condicional ........................................................................... 158
8.4) Estrutura de repetição ......................................................................... 165
8.5) Vetores ................................................................................................ 173
8.6) Sub-rotinas .......................................................................................... 178
Capitulo 9 Linguagem de programação Java ........................................... 183
9.1) O que é Java ? .................................................................................... 183
9.2) O que é Máquina Virtual Java ? .......................................................... 184
9.3) Compilação e Interpretação ................................................................. 185
9.3.1) O que é compilação ? ................................................................... 185
9.3.2) O que é interpretação ? ................................................................ 186
9.3.3) Vantagens e desvantagens da compilação e interpretação .......... 188
9.4) Modo híbrido ........................................................................................ 189
9.5) A ferramenta de desenvolvimento (Eclipse) ........................................ 191
9.6) Criando nosso primeiro projeto ............................................................ 200
9.7) Variáveis e tipos de dados................................................................... 210
9.7.1) Como declarar uma variável no Java ............................................ 210
9.7.2) Tipos de dados existentes na linguagem Java ............................. 211
9.7.3) Comando de atribuição ................................................................. 216
9.7.4) Leitura de dados via teclado ......................................................... 216
9.7.5) Operadores aritméticos ................................................................. 224
6
9.7.6) Observações gerais ...................................................................... 224
9.8) Estrutura condicional ........................................................................... 225
9.8.1) A estrutura IF ................................................................................ 225
9.8.2) A estrutura IF/ELSE ...................................................................... 226
9.8.3) Tabela de operadores relacionais ................................................. 228
9.8.4) Operadores lógicos ....................................................................... 228
9.8.5) A estrutura SWITCH/CASE ........................................................... 234
9.9) Estrutura de repetição ......................................................................... 236
9.9.1) A estrutura de repetição WHILE ................................................... 236
9.9.2) A estrutura de repetição DO/WHILE ............................................. 238
9.9.3) A estrutura de repetição FOR ....................................................... 240
9.10) Vetores (Arrays) ................................................................................ 245
9.11) Usando métodos ............................................................................... 247
9.11) Lista de Exercícios em Java .............................................................. 251
9.11.1) Programação Sequencial ......................................................... 251
9.11.2) Variáveis .................................................................................... 252
9.11.3) Estrutura condicional ............................................................... 255
9.11.4) Estrutura de repetição .............................................................. 262
9.11.5) Arrays ......................................................................................... 269
9.11.6) Métodos ..................................................................................... 275
Capitulo 10 Fundamentos sobre Programação Orientada a Objetos ..... 280
10.1) O que é Programação Orientada a Objetos ? ................................... 280
10.2) O que é uma classe ? ........................................................................ 280
10.3) O que é um atributo ? ........................................................................ 281
10.4) O que é um método ? ........................................................................ 282
10.5) O que são modificadores de escopo ? .............................................. 283
10.6) O que é um objeto ? .......................................................................... 285
10.7) O que é método construtor ? ............................................................. 285
10.8) Herança ............................................................................................. 295
10.9) Polimorfismo ...................................................................................... 297
Capitulo 11 Introdução a Plataforma Google Android ............................. 305
11.1) O que é o Google Android ? .............................................................. 305
11.2) Estrutural geral do Android ................................................................ 307
11.3) Versões do Android ........................................................................... 309
11.4) Para qual versão do Android devemos desenvolver as aplicações ? 311
7
11.4.1) Qual versão da plataforma é a mais utilizada no momento ? .... 311
Capitulo 12 Desenvolvendo nosso primeiro projeto no Android ............ 313
Conhecendo a estrutura geral de um projeto no Android Studio ................ 322
O diretório “app” (application).................................................................. 323
O diretório “res” (resources) .................................................................... 327
O diretório “drawable”.............................................................................. 327
O diretório “layout” .................................................................................. 327
O diretório “values” .................................................................................. 327
O diretório “mipmap” ............................................................................... 328
O diretório “menu” ................................................................................... 329
Visão geral da ferramenta de desenvolvimento ...................................... 329
Executando a nossa aplicação ................................................................... 331
Capitulo 13 Criando uma aplicação básica no Android ........................... 348
Capitulo 14 Conhecendo os componentes do Android ........................... 384
4.1) A paleta de componentes e suas widgets ........................................... 384
4.1.1) A seção “Widgets” ......................................................................... 385
4.1.2) A seção “Text Fields” .................................................................... 388
4.1.3) A seção “Layouts” ......................................................................... 389
4.1.4) A seção “Containers” ........................................................................ 391
4.1.5) A seção “Date & Time” .................................................................. 391
4.1.6) A seção “Expert” ........................................................................... 393
15.1) Criando uma aplicação Android para uma Lanchonete ..................... 394
15.2) Criando uma aplicação básica de compras ....................................... 405
15.3) Criando uma aplicação de locadora de filmes ................................... 412
15.4) Criando uma aplicação para visualização de imagens ...................... 425
15.5) Criando uma aplicação para jogos da Mega-Sena ............................ 440
15.6) Criando uma aplicação de Pesquisa de Opinião ............................... 456
Capitulo 16 Publicando as aplicações Android no Google Play ............. 483
Conclusão a respeito do material ............................................................... 487
8
Capitulo 1 Fundamentos sobre
informática
E
sse é um dos capítulos fundamentais para aqueles que nunca viram
programação para computadores na vida, que é os fundamentos da
informática. Irei focar aqui ao máximo direcionado para o
desenvolvimento de aplicações para dispositivos móveis. Bom, então vamos lá.
Talvez para alguns que estejam lendo este material, essa pergunta pode até
parecer “desnecessária” (ou até mesmo inútil). Mas o intuito desta pergunta
não é somente falar o que é um computador, visto que todos usam no dia a dia,
mas sim mostrar como ele funciona, comparando-o com um dispositivo móvel.
Bom, um computador (que nós usamos no dia a dia) nada mais é do que uma
máquina de processamentos de dados e informações. Desde quando ligamos o
computador até o momento em que o desligamos, ele realiza vários
processamentos e tarefas. Vejamos a figura dele abaixo:
9
O computador é formado basicamente por :
Bom, para aqueles que desconhecem esse termo , o sistema operacional nada
mais é do que um software (programa) que prepara a máquina (computador)
para que nós usuários possamos interagir com o ele, através do uso de outros
softwares (como navegador, editor de textos e etc.). Um exemplo de sistema
operacional que mais utilizamos é o Windows (como o Windows 7 por
exemplo).
10
1.4) O que é linguagem binária ?
11
Capitulo 2 Lógica de
programação e algoritmos
A
qui neste capítulo começamos a parte mais interessante deste material,
A PROGRAMAÇÃO. Neste material iremos aprender passo a passo
todos os conceitos sobre lógica de programação e algoritmos, que é A
BASE OBRIGATÓRIA para quem vai começar a desenvolver aplicações (tanto
para dispositivos móveis , computadores e etc.).
Agora você, em algum momento, já se perguntou alguma vez como foi feito um
programa de computador, esse que você utiliza no computador ou dispositivo
móvel ? Pois bem, para responder essa pergunta precisaremos saber
primeiramente, o que vem a ser ALGORITMOS.
Em algum momento você já teve ter ouvido esse termo na sua vida
(possivelmente na matemática). E ainda existem muitas pessoas que
confundem o termo algoritmo com “logaritmo” (que é totalmente diferente, e
não tem nada a ver com algoritmo).
Para aqueles que já ouviram esse termo na matemática (ou que possivelmente
já usaram), quero esclarecer o seguinte : algoritmo em informática não tem
nada a ver com algoritmo que se ouviu (possivelmente) na matemática, ou
seja, PODEM FICAR TRANQUILOS que ninguém vai fazer cálculos
avançados, nada disso !
12
Então, dando continuidade, algoritmos (na informática) nada mais são do que
um conjunto de passos e instruções que precisam ser seguidos para resolver
um determinado problema (ou chegar em algum objetivo).
Irei dar um exemplo bem prático disso. Vamos supor que você precise sair de
sua casa para ir até a farmácia que se encontra no centro da cidade, até aí
tudo bem. Agora eu pergunto: O que é que você precisa fazer para chegar até
a farmácia no centro da cidade ?
Acabamos de fazer o nosso PRIMEIRO ALGORITMO (da vida real). Que legal!
Como havia falado, o ALGORITMO é tudo aquilo que descreve uma sequência
de como atingir um objetivo (ou resolver um problema). Como podemos
observar a atividade “ir até a farmácia no centro da cidade” ela possui uma
série de passos que são executamos em uma sequência, uma após a outra,
para que o objetivo descrito seja alcançado, logo, REALIZAMOS UM
ALGORITMO.
13
Algoritmo “ir para a farmácia do centro da cidade” (2ª versão)
14
Para um exemplo mais prático e dentro da realidade, quando abrimos o nosso
WhatsApp em nosso Smartphone (quando já estamos “logados” nele), ele
mostra a lista de contatos que você possui disponível. Agora a pergunta que
faço é : O que ele executou “por trás" para visualizarmos toda a nossa lista de
contatos ? UM ALGORITMO, ou seja, um conjunto de instruções (passos) para
podermos visualizar todos os contatos na tela do nosso dispositivo.
E ai, está entendo aos poucos o que vem a ser um algoritmo ? Com certeza
que sim! Esse é o TÓPICO MAIS IMPORTANTE que você deve saber para
desenvolver qualquer aplicação que seja (seja para Android ou até para PC).
Talvez não tenha ficado claro pra você o termo “regras sintáticas”. O termo
regras sintáticas em linguagem de programação significa que na linguagem de
programação você não pode escrever “qualquer coisa”, se não está errado.
15
Então você precisa se comunicar NO IDIOMA DELE (na linguagem dele), ou
seja, se você deseja perguntar que horas são , fale em alemão : “Wie spät ist
es ?”
16
2.4) Usando o Visualg
Para usarmos o Visualg basta você fazer o download dele no seguinte link :
http://goo.gl/LGBCxt
Ferramenta Visualg
17
2.4.1) Estrutura geral de um ALGORITMO
Vamos ver agora uma visão geral da estrutura básica de uma algoritmo EM
PORTUGOL:
var (3)
inicio (4)
// Seção de Comandos
fimalgoritmo (5)
18
2.4.2) Escrevendo nosso primeiro programa
inicio
// Seção de Comandos
Fimalgoritmo
Colocar o cursor
aqui
Posicionando o cursor
19
Digitando o comando
Terminei. E agora o que eu faço ? Como faço para conferir a execução desse
comando que digitei ?
20
Muito bem! Você acaba de construir seu primeiro programa (algoritmo) usando
o PORTUGOL (português estruturado). PARABENS!!!
Nesse exato momento vamos digitar mais uma linha de código abaixo do que
escrevemos. Para isso, vamos colocar nosso cursor abaixo da instrução que
digitamos anteriormente :
Digitando o comando
21
Programa em execução – Ops, algo saiu errado
inicio
// Seção de Comandos
escreva("Estou aprendendo algoritmo ")
escreva("Estou aprendendo algoritmo ")
fimalgoritmo
Resultado
22
Execução da segunda linha (destacado em azul):
inicio
// Seção de Comandos
escreva("Estou aprendendo algoritmo ")
escreva("Estou aprendendo algoritmo ")
fimalgoritmo
Resultado
Inicio
// Seção de Comandos
escreval("Estou aprendendo algoritmo ")
escreval("Estou aprendendo algoritmo ")
fimalgoritmo
Programa em execução
23
Acabamos de desenvolver mais um algoritmo, que exibe a seguinte mensagem
na tela “Estou aprendendo programação com a Apostila de Android”.
24
Capitulo 3 Gerenciando dados
na memória
A
té agora conseguimos desenvolver programas (algoritmos) que somente
mostram mensagens na tela, porém, sabemos que um programa pode
realizar tarefas muito além do que desenvolvemos até agora. Uma das
tarefas primordiais que são realizadas por qualquer programa de computador e
o gerenciamento de dados em memória. Neste capítulo iremos compreender o
que vem a ser dados e como trabalhar com esses dados usando algoritmos
desenvolvidos para essa finalidade.
Da mesma forma isso funciona também nos dispositivos móveis, por exemplo :
Quando você está jogando um jogo no Android que registra as pontuações a
media que você vai obtendo os itens (como no jogo “Jetpack joyride”), onde é
que fica guardado aquelas pontuações ? É óbvio, também na memória (do seu
dispositivo).
25
3.1) Como funciona a memória
MEMÓRIA DO COMPUTADOR
26
MEMÓRIA DO COMPUTADOR
27
3.2) Dados , informações e instruções
Falei aqui nesse capítulo que todo programa de computador está sempre
trabalhando com dados na memória. Agora irei conceituar aqui alguns
conceitos a respeito de dados.
Dados (em informática) é tudo aquilo que precisa ser registrado em memória
pelo computador (ou programa) , para que futuramente possa ser processado,
normalmente chamado de elementos de entrada.
Entrada
Dado : Número 10
Entrada
Dado : Número 8
Processamento (Gera a média)
Saída
Informação : Média 9
28
Na aplicação da figura anterior temos uma aplicação que consiste em uma
calculadora que realiza a média de dois números.
Observamos que o programa pede que o usuário digite dois números (que
seriam os meus dados). Para que a média seja calculada o botão “Calcular
média” deve ser pressionado, fazendo com que ele efetue o processamento
(ou seja, ele vai somar o primeiro número com o segundo número e depois irá
dividir a soma por 2) , gerando assim a média dos valores (que seria a minha
informação ou saída).
MEMÓRIA DO COMPUTADOR
29
MEMÓRIA DO SMARTPHONE
30
3.3) Entrada, processamento e saída de informações
31
Na programação, a variável além de representar uma posição na memória
também possui um rótulo (nome) que identifica aquela posição de memória no
computador (ou dispositivo móvel). Veja um exemplo abaixo:
MEMÓRIA DO DISPOSITIVO
Variável Valor
: :
Biscoito
Biscoito Maizena Descrição
Maizena
: :
R$ 240,00 Valor R$ 240,00
: :
: :
Tipo da Despesa Alimentação
: :
Método de Pagamento Dinheiro
: :
32
Cada variável possui os seguintes tipos de dados abaixo:
Inteiro: Esse tipo de dados permite que seja armazenado somente dados
do tipo numérico inteiro (positivos e negativos) . Exemplo : 1, 20,-35,
12499 e etc.
Real: Esse tipo de dados permite que seja armazenado somente dados
do tipo numérico inteiro e fracionários (positivos e negativos) . Exemplo :
10, 0.00321, -1.900121 e etc.
String (ou texto) : Esse tipo de dados permite armazenar dados do tipo
texto (caracteres), podendo ser utilizado números, letras e símbolos.
Exemplo : “Luciano”, “Rua Ribeiro”, “Sou Programador”, “12.201”,
“#FicaDica”, “@apostilaandroid” e etc.
Sintaxe:
var
<variável1> : <tipo>
<variável2> : <tipo>
:
<variáveln> : <tipo>
33
Exemplo:
var
nome : caractere
idade : inteiro
tem_habilitacao : lógico
Observe que na primeira linha que declarei uma variável (ou seja, reservei um
espaço de memória no meu computador) chamada “nome”, que irá guardar
tudo o que é conteúdo do tipo “texto”. Obviamente, quando declaramos uma
variável chamada “nome”, devemos então armazenar, logicamente, nomes de
pessoas.
Então, quer dizer que se eu guardar qualquer coisa que não seja nome na
variável “nome” vai estar errado (ou o programa vai dar erro) ? Se você acabou
de fazer essa pergunta, fique tranquilo que não está errado e o programa não
irá dar erro nenhum.
Na segunda linha do código declarei uma variável chamada “idade” que irá
armazenar valores do tipo “inteiro”.
34
Memória
Var
Nome “Lucas”
nome : caractere
idade : inteiro
Idade 19
tem_habilitacao : lógico
tem_habilitacao verdadeiro
1nota : real
ESTÁ ERRADO!!!
Var
nota1 : real
ESTÁ CORRETO!!!
35
2) Toda variável declarada não pode ter “espaço” no nome. Por exemplo
: Vamos supor que você precise declarar uma variável que vai guardar
o nome do aluno. Se você no algoritmo (PORTUGOL) declarar a
variável dessa forma:
var
ESTÁ ERRADO!!!
var
nomealuno : caractere
ESTÁ CORRETO!!!
var
nome_aluno : caractere
36
3) Toda variável declarada não pode ter o mesmo nome de uma palavra
reservada ou comando da linguagem de programação, ou seja, se
declararmos algo do tipo abaixo:
Var
escreva : caractere
ESTÁ ERRADO!!!
var
inicio : caractere
37
4) Toda variável declarada não pode acento, caracteres especiais,
símbolos e etc. Vejamos um exemplo abaixo:
Var
formatação : caractere
ESTÁ ERRADO!!!
Var
fone# : caractere
38
Na linguagem de programação em PORTUGOL, existe um comando padrão
para a leitura de dados via teclado, que é o comando leia (presente também no
Visualg ) . Vejamos a sua sintaxe:
Sintaxe:
leia (<variável>)
39
Programa em execução – Aguardando o usuário digitar algo
40
Entendendo o código
:
var
nome : caractere
inicio
// Seção de Comandos
leia (nome)
escreva ("Seu nome é ", nome)
fimalgoritmo
:
var
nome : caractere
inicio
// Seção de Comandos
leia (nome)
41
Que irá interromper a execução do programa, esperando você digitar algo e em
seguida pressionar ENTER. Vamos supor que você digite “Adriano” e em
seguida pressione ENTER, o que acontece ? Quando você PRESSIONA
ENTER , o que você digitou é armazenado dentro da variável que você passou
como parâmetro para a função leia , que neste caso é a variável “nome”. Veja
como acontece o processo:
Pressionou ENTER
Digitou : “Adriano”
MEMÓRIA
Guarda o que eu escrevi Nome
dentro da variável nome
“Adriano”
:
var
nome : caractere
inicio
// Seção de Comandos
fimalgoritmo
42
Que mostra o seguinte resultado abaixo :
43
Desenvolvendo mais um algoritmo
Para o exercício acima serão utilizadas duas variáveis : nome (que será do tipo
caractere) e idade (que será do tipo inteiro pois, irá armazenar somente
números).
fimalgoritmo
44
Programa em execução
Inicio
Executando a primeira
escreva("Digite seu nome : ")
instrução
leia(nome)
45
Inicio
Pressionou ENTER
Digitou : “Lucas”
MEMÓRIA
Guarda o que eu escrevi Nome
dentro da variável nome
“Lucas”
46
Inicio
leia(nome)
Executando a terceira
escreva("Digite sua idade : ")
instrução
leia(idade)
:
escreva("Digite sua idade : ")
Executando a quarta
leia(idade)
instrução
Pressionou ENTER
Digitou : 28
MEMÓRIA
Guarda o que eu digitei Idade
na variável idade
28
47
Inicio
Inicio
48
E ai, está entendendo aos poucos como funciona um programa de computador
e sua execução PASSO A PASSO ? Com certeza que sim.
Sintaxe :
Exemplo :
var
nome : caractere
idade : inteiro
inicio
nome <- "Luciano"
idade <- 29
escreval("Nome : ", nome)
escreval("Idade : ", idade)
fimalgoritmo
49
Execução PASSO A PASSO
var
nome : caractere
idade : inteiro
inicio Nome Idade
nome <- "Luciano" “Luciano”
idade <- 29
escreval("Nome : ", nome)
escreval("Idade : ", idade)
fimalgoritmo
var
nome : caractere
idade : inteiro
inicio Nome Idade
nome <- "Luciano" “Luciano” 29
idade <- 29
fimalgoritmo
50
algoritmo "Comando de atribuição"
var
nome : caractere
idade : inteiro
inicio
fimalgoritmo
var
nome : caractere
idade : inteiro
inicio
fimalgoritmo
51
3.8) Operadores aritméticos e expressões
Operador Descrição
+ Adição
- Subtração
* Multiplicação
/ Divisão
div Divisão inteira
mod Resto de uma divisão inteira
O operador DIV é aquele que retorna uma divisão inteira. Por exemplo,
sabemos naturalmente que 5 dividido por 2 dá 2,5 , conforme podemos ver na
expressão abaixo:
5 / 2 = 2,5
5 DIV 2 = 2
O resultado da expressão acima retorna 2 pois, como disse, o DIV retorna uma
divisão inteira , ou seja, ele irá IGNORAR o 0,5 (meio), retornando somente a
parte inteira da divisão.
52
O operador MOD é aquele que retorna o resto da divisão. Por exemplo,
sabemos naturalmente que 5 dividido por 2 dá 2,5 ou melhor, retorna 2 e
SOBRA 1. Veja abaixo:
5| 2
1 2
5 MOD 2 = 1
53
algoritmo "operadores aritmeticos"
var
fimalgoritmo
:
inicio
leia(numero1)
escreva("Digite o segundo número : ")
leia(numero2)
54
:
inicio
leia(numero1)
Pressionou ENTER
Digitou : 10
MEMÓRIA
Guarda o que eu digitei numero1
na variável numero1
101
55
:
inicio
leia(numero2)
:
inicio
leia(numero2)
Pressionou ENTER
Digitou : 9
56
MEMÓRIA
Guarda o que eu digitei numero2
na variável numero2
9
:
inicio
soma <- 10 + 9
MEMÓRIA
soma
soma <- 19 19
57
inicio
fimalgoritmo
Última instrução sendo executada.
58
algoritmo "operadores aritmeticos 2"
var
inicio
fimalgoritmo
Programa em execução
59
Capitulo 4 Estrutura
condicional
A
prendemos que a execução dos comandos de um programa segue uma
sequencia, como podemos conferir no algoritmo em PORTUGOL. Em
algumas circunstâncias, há algumas instruções que para serem
executadas precisam passar por uma avaliação condicional, ou seja, se uma
condição for satisfeita a instrução será executada, caso contrário não será
executada (ou será executada outra instrução). Para iremos utilizar o que nós
chamamos de estruturas condicionais (ou desvios condicionais).
Sintaxe:
Se (<condição>) Então
fimse
60
algoritmo "estrutura condicional 1"
var
numero : inteiro
inicio
fimalgoritmo
inicio
leia(numero)
fimalgoritmo
61
inicio
fimalgoritmo
Pressionou ENTER
Digitou : 15
MEMÓRIA
Guarda o que eu digitei numero
na variável numero
15
62
inicio
leia(numero)
fimalgoritmo
leia(numero)
fimse
fimalgoritmo
63
:
leia(numero)
inicio
leia(numero)
fimalgoritmo
64
inicio
fimalgoritmo
Pressionou ENTER
Digitou : 7
MEMÓRIA
Guarda o que eu digitei numero
na variável numero
7
65
inicio
:
escreva("Digite um número : ")
leia(numero)
fimalgoritmo
leia(numero)
66
4.2) A estrutura SE/ ENTÃO/SENÃO
Sintaxe:
Se (<condição>) Então
fimse
67
algoritmo "estrutura condicional 2"
var
media : real
inicio
senao
fimse
fimalgoritmo
inicio
leia(media)
68
inicio
Pressionou ENTER
Digitou : 9
MEMÓRIA
Guarda o que eu digitei media
na variável media
9
69
inicio
leia(media)
senao
fimse
70
se(media >= 7) entao
senao
fimalgoritmo
Resultado final:
inicio
leia(media)
71
inicio
Pressionou ENTER
Digitou : 5
MEMÓRIA
Guarda o que eu digitei media
na variável media
5
72
inicio
leia(media)
senao
73
:
se(media >= 7) entao
senao
fimalgoritmo
Resultado final:
Operador Descrição
>= Maior ou igual
> Maior
<= Menor ou igual
< Menor
= Igual
<> Diferente
74
4.4) Operadores lógicos
O operador lógico E
O operador lógico OU
75
O operador lógico NÃO
var
numero : inteiro
inicio
escreva("Digite um número : ")
leia(numero)
fimalgoritmo
76
Agora irei simular a execução desse programa em duas partes : A primeira irá
considerar o número dentro da faixa, a segunda execução um número fora da
faixa.
var
numero : inteiro
inicio
77
inicio
Pressionou ENTER
Digitou : 45
MEMÓRIA
Guarda o que eu digitei numero
na variável numero
45
78
:
leia(numero)
se(verdadeiro) entao
leia(numero)
79
SEGUNDA EXECUÇÃO : CONSIDERANDO O NÚMERO FORA DA FAIXA
inicio
inicio
Pressionou ENTER
Digitou : 5
MEMÓRIA
Guarda o que eu digitei numero
na variável numero
5
80
:
leia(numero)
se(falso) entao
:
se((numero >= 10) e (numero <= 90)) entao
81
Exemplo : Vamos construir um algoritmo para ler uma determinada opção
oferecida pelo programa (Opção “a” para “Abrir” e “s” para “Salvar”). Se a
opção lida for válida, mostrar na tela “Opção selecionada válida”, caso contrário
mostrar “Opção inválida”.
var
opcao : caractere
inicio
fimalgoritmo
Programa em execução
82
Quando digitamos uma opção válida (como por exemplo “A”), temos o seguinte
resultado:
Isso resultada em :
se(verdadeiro) entao
83
se((opcao = "A") ou (opcao = "B")) entao
senao
escreva("Opção inválida")
fimse
fimalgoritmo
Veja o resultado:
Agora executando novamente a opção , vamos supor que eu agora entre com
a opção “X” (“X” não é uma opção válida). Feito isso, será executada a
seguinte avaliação:
Isso resultada em :
se(falso) entao
84
se((opcao = "A") ou (opcao = "B")) entao
senão
escreva("Opção inválida")
fimse
fimalgoritmo
Veja o resultado:
85
algoritmo "operador lógico 3"
var
numero : inteiro
inicio
fimalgoritmo
Como 5 não é maior que 10, teremos como resultado dentro do parênteses :
se(nao(falso))entao
se(verdadeiro)entao
86
Feito isso será executada a seguinte instrução :
inicio
senao
escreva("Esse número É MAIOR QUE 10")
:
se(nao(verdadeiro))entao
se(falso)entao
87
Feito isso será executada a seguinte instrução :
inicio
senao
88
escolha(<variável>)
caso <valor1>
<instrucao1>
caso <valor2>
<instrucao2>
caso <valorn>
<instrucaon>
[ outrocaso
<instrução> ]
fimescolha
O – Novo
A – Abrir
S – Salvar
I – Imprimir
X – Sair
Caso o usuário digite uma das letras acima, mostrar a operação associada a
ela, caso contrário, mostrar “OPÇÃO INVÁLIDA”.
89
algoritmo "estrutura escolha/caso"
var
opcao : caractere
inicio
escreval(" ")
escreva("Qual sua opção : ")
leia(opcao)
escolha(opcao)
caso "O"
escreva("Você escolheu NOVO")
caso "A"
escreva("Você escolheu ABRIR")
caso "S"
escreva("Você escolheu SALVAR")
caso "I"
escreva("Você escolheu IMPRIMIR")
caso "X"
escreva("Você escolheu SAIR")
outrocaso
escreva("OPÇÃO INVÁLIDA!!!")
fimescolha
fimalgoritmo
90
Programa em execução
Vamos supor que como opção você digite “S” e em seguida PRESSIONE
ENTER. Na instrução seguinte será executada a seguinte avaliação:
:
escreval(" ")
escreva("Qual sua opção : ")
leia(opcao)
escolha(opcao)
caso "O"
escreva("Você escolheu NOVO")
caso "A"
Que verifica qual opção foi selecionada, que neste caso foi a opção “S”. Sendo
assim, será avaliada e executada a instrução a seguir:
:
caso "O"
escreva("Você escolheu NOVO")
caso "A"
escreva("Você escolheu ABRIR")
caso "S"
escreva("Você escolheu SALVAR")
escreva("OPÇÃO INVÁLIDA!!!")
91
Veja o resultado na figura abaixo:
Agora executando novamente o programa vamos supor que como opção você
digite “Y”, e em seguida PRESSIONE ENTER. Ao fazer isso será executada a
seguinte avaliação :
:
escreval(" ")
escreva("Qual sua opção : ")
leia(opcao)
escolha(opcao)
caso "O"
escreva("Você escolheu NOVO")
caso "A"
Que verifica qual opção foi selecionada, que neste caso foi a opção “Y”. Sendo
assim, como não existe nenhuma opção com “Y” será executado o seguinte
bloco:
:
caso "X"
escreva("Você escolheu SAIR")
outrocaso
escreva("OPÇÃO INVÁLIDA!!!")
fimescolha
92
Veja o resultado na figura abaixo:
Pra você que deve estar entusiasmado com o que está aprendendo,
possivelmente já quer pular para o desenvolvimento com Android, mas
CALMA! Ainda temos muito que aprender para nos tornarmos bons
desenvolvedores de aplicações Android. Até aqui já foi um GRANDE PASSO
que demos, mais ainda temos que caminhar. Estamos chegando lá.
93
Capitulo 5 Estrutura de
repetição
A
té agora aprendemos a desenvolver programas que executam
instruções seguindo uma determinada sequência de passos (e alguns
passos para serem executados precisavam passar por uma avaliação
condicional).
<bloco de comandos>
fimenquanto
Vamos fazer uma simulação onde eu tenha que imprimir valores na tela de 1
até 5, sabendo que os valores estarão armazenados em uma variável, sem
usar nenhum loop de repetição. Eis o código:
94
algoritmo "imprime na tela sem loop"
var
n : inteiro
inicio
n <- 1
escreval("Valor de n é ", n)
n <- n + 1
escreval("Valor de n é ", n)
n <- n + 1
escreval("Valor de n é ", n)
n <- n + 1
escreval("Valor de n é ", n)
n <- n + 1
escreval("Valor de n é ", n)
fimalgoritmo
var
n : inteiro
inicio
MEMÓRIA
n
n <- 1
1
escreval("Valor de n é ", n)
var
n : inteiro
inicio
n <- 1
escreval("Valor de n é ", n)
95
algoritmo "imprime na tela sem loop"
var
n : inteiro
inicio
Incrementa o valor atual MEMÓRIA
:
de “n” com mais 1
n
n <- n + 1
2
escreval("Valor de n é ", n)
var
n : inteiro
inicio
n <- n + 1
escreval("Valor de n é ", n)
var
n : inteiro
inicio
Incrementa o valor atual MEMÓRIA
:
de “n” com mais 1
n
n <- n + 1
3
escreval("Valor de n é ", n)
:
inicio
n <- n + 1
escreval("Valor de n é ", n)
96
algoritmo "imprime na tela sem loop"
var
n : inteiro
inicio
Incrementa o valor atual MEMÓRIA
:
de “n” com mais 1
n
n <- n + 1
4
escreval("Valor de n é ", n)
:
inicio
n <- n + 1
escreval("Valor de n é ", n)
var
n : inteiro
inicio
Incrementa o valor atual MEMÓRIA
:
de “n” com mais 1
n
n <- n + 1
5
escreval("Valor de n é ", n)
97
algoritmo "imprime na tela sem loop"
var
n : inteiro
inicio
:
n <- n + 1
escreval("Valor de n é ", n)
fimalgoritmo
98
Agora vamos desenvolver agora um algoritmo em PORTUGOL no Visualg que
utilize o loop de repetição ENQUANTO. Eis o código :
var
n : inteiro
inicio
n <- 1
enquanto (n <= 5) faca
escreval("Valor de n é ", n)
n <- n + 1
fimenquanto
fimalgoritmo
var
n : inteiro
inicio MEMÓRIA
n
n <- 1 Primeira instrução
1
enquanto (n <= 5) faca
escreval("Valor de n é ", n)
n <- n + 1
fimenquanto
fimalgoritmo
99
algoritmo "imprime na tela com loop"
var
n : inteiro
inicio
n <- 1
escreval("Valor de n é ", n)
n <- n + 1
fimenquanto
fimalgoritmo
var
n : inteiro
inicio
n <- 1
fimalgoritmo
100
algoritmo "imprime na tela com loop"
var
n : inteiro
inicio
n <- 1
fimalgoritmo
var
n : inteiro
inicio
n <- 1
101
algoritmo "imprime na tela com loop"
var
n : inteiro
inicio
n <- 1
fimalgoritmo
var
n : inteiro
inicio
n <- 1
fimalgoritmo
102
algoritmo "imprime na tela com loop"
var
n : inteiro
inicio
n <- 1
:
enquanto (n <= 5) faca
fimalgoritmo
103
algoritmo "imprime na tela com loop"
var
n : inteiro
inicio
n <- 1
fimalgoritmo
var
n : inteiro
inicio
n <- 1
104
algoritmo "imprime na tela com loop"
var
n : inteiro
inicio
n <- 1
fimalgoritmo
var
n : inteiro
inicio
n <- 1
fimalgoritmo
105
algoritmo "imprime na tela com loop"
var
n : inteiro
inicio
n <- 1
fimalgoritmo
106
algoritmo "imprime na tela com loop"
var
n : inteiro
inicio
n <- 1
fimalgoritmo
var
n : inteiro
inicio
n <- 1
107
Resultado final na tela:
repita
<bloco de comandos>
ate(<condição>)
var
n : inteiro
inicio
n <- 1
repita
escreval("Valor de n é ", n)
n <- n + 1
ate (n > 5)
fimalgoritmo
108
Executando o código anterior teremos o mesmo resultado do programa
anterior:
Programa em execução
<bloco de comandos>
fimpara
Se observarmos a estrutura acima, não existe uma condição maior que, menor
que e etc. O que existe é que o loop vai começar a repetir partindo de um valor
inicial “X” (que será armazenado em uma variável de controle) até um valor
final “Y”.
109
Vamos desenvolver agora o mesmo exercício do loop anterior (REPITA/ATE),
usando a estrutura PARA/FACA. A diferença desse exercício para os outros é
que só iremos repetir um bloco de comandos por três vezes (diferente de cinco
dos exercícios anteriores). Eis o código:
var
n : inteiro
inicio
fimpara
fimalgoritmo
Para esse loop irei mostrar o PASSO A PASSO da execução, pois esse loop
merece um pouco de atenção.
var
n : inteiro MEMÓRIA
inicio
n
para n de 1 ate 3 faca
1
escreval("O valor de n é ",n)
fimpara
Essa é a primeira instrução do nosso
fimalgoritmo programa, onde nela inicializamos o loop
PARA/FACA. A primeira que realizamos
quando o loop é executado pela primeira
vez é atribuir o valor inicial para a
variável de controle “n”, que no caso
será o valor 1.
110
algoritmo "loop para/faca"
var
n : inteiro Segunda instrução
inicio
fimpara
fimalgoritmo
var
n : inteiro
inicio
var
n : inteiro
inicio
MEMÓRIA
Quando voltamos para o início do loop n
PARA, ele efetua automaticamente o 2
incremento da variável, ou seja, a
variável passa a assumir o valor “2”.
111
algoritmo "loop para/faca"
var
n : inteiro Segunda instrução,
inicio
pela segunda vez
para n de 1 ate 3 faca
fimpara
fimalgoritmo
var
n : inteiro
inicio
var
n : inteiro
inicio
MEMÓRIA
Quando voltamos para o início do loop n
PARA, ele efetua automaticamente o 3
incremento da variável, ou seja, a
variável passa a assumir o valor “3”.
112
algoritmo "loop para/faca"
var
n : inteiro Segunda instrução,
inicio
pela terceira vez
para n de 1 ate 3 faca
fimpara
fimalgoritmo
var
n : inteiro
inicio
113
5.4) Observações a respeito dos loops de repetição
114
Capitulo 6 Trabalhando com
Vetores
A
té agora desenvolvemos programas (algoritmos) que são capazes de
armazenar informações na memória, porém, com uma quantidade de
dados bastante limitada (como por exemplo, gravar somente um nome,
duas notas, três médias e etc.) Porém, se eu quisesse agora guardar uma
quantidade bem grande de informações (considerando todas elas de um
mesmo tipo), como por exemplo : armazenar o nome de todos os 100
funcionários, armazenar a média de todos os 200 alunos. Para isso, faremos
uso de uma estrutura de dados conhecida como vetor (ou array).
var
Exemplo : Vamos supor que eu precise criar um programa que leia do teclado 3
nomes de alunos, e ao final o mesmo programa mostre os nomes lidos na tela.
Na primeira demonstração irei efetuar a leitura dos dados SEM USAR VETOR,
usando somente a técnica que aprendemos até agora.
Eis o código:
var
nome1 : caractere
nome2 : caractere
nome3 : caractere
115
inicio
fimalgoritmo
116
Observarmos no código acima que cada variável guarda um nome (nome1
guarda o valor “Aline”, nome2 guarda o valor “Bruno” e nome3 guarda o valor
“Carlos”).
var
fimalgoritmo
117
Porém, podemos dar uma melhorada em nosso código do programa acima,
utilizando como recurso a estrutura de repetição para diminuirmos o nosso
programa. Veja o resultado abaixo:
var
118
Para melhor entendimento do código anterior usando loop de repetição, irei
simular a execução dele aqui nesse material a partir de agora.
MEMÓRIA
algoritmo "leitura de dados com vetor 2"
contador
var
1
nome : vetor[1..3] de caractere
contador : inteiro
inicio
fimpara
:
inicio
leia(nome[contador])
fimpara
:
Como “contador” assume “1”, logo :
escreva(“Digite o 1 nome” )
119
:
inicio
fimpara
:
Pressionou ENTER
Digitou : “Aline”
MEMÓRIA
Guarda o que eu digitei nome
no vetor nome , na
“Aline” 1
primeira posição
2
120
:
inicio
leia(nome[contador])
Fim do loop PARA. Voltando
fimpara
agora para o início do loop.
inicio
leia(nome[contador])
Incrementa o valor de
“contator”.
MEMÓRIA
contador
121
:
inicio
Pressionou ENTER
Digitou : “Bruno”
MEMÓRIA
Guarda o que eu digitei nome
no vetor nome , na
“Aline” 1
segunda posição
“Bruno” 2
122
:
inicio
leia(nome[contador])
Fim do loop PARA. Voltando
fimpara
agora para o início do loop.
inicio
leia(nome[contador])
Incrementa o valor de
“contator”.
MEMÓRIA
contador
123
:
inicio
:
para contador de 1 ate 3 faca
Pressionou ENTER
Digitou : “Carlos”
MEMÓRIA
Guarda o que eu digitei nome
no vetor nome , na
“Aline” 1
terceira posição
“Bruno” 2
“Carlos” 3
124
:
inicio
leia(nome[contador])
Fim do loop PARA.
fimpara
ENCERRAMOS POR AQUI.
:
inicio
fimalgoritmo
125
E ai, entendeu para que serve e como funciona um vetor ? Com certeza que
sim.
var
nome1, nome2, nome3, nome4, nome5, nome6, nome7,
nome8,nome9: caractere
inicio
escreva("Digite o 1 nome : ")
leia(nome1)
escreva("Digite o 2 nome : ")
leia(nome2)
escreva("Digite o 3 nome : ")
leia(nome3)
escreva("Digite o 4 nome : ")
leia(nome4)
escreva("Digite o 5 nome : ")
leia(nome5)
escreva("Digite o 6 nome : ")
leia(nome6)
escreva("Digite o 7 nome : ")
leia(nome7)
escreva("Digite o 8 nome : ")
leia(nome8)
escreva("Digite o 9 nome : ")
leia(nome9)
escreval("O 1 nome e : ",nome1)
escreval("O 2 nome e : ",nome2)
escreval("O 3 nome e : ",nome3)
escreval("O 4 nome e : ",nome4)
escreval("O 5 nome e : ",nome5)
escreval("O 6 nome e : ",nome6)
escreval("O 7 nome e : ",nome7)
escreval("O 8 nome e : ",nome8)
escreval("O 9 nome e : ",nome9)
fimalgoritmo
126
Se observarmos o código do programa anterior , ele é bastante grande
(imagine se tivéssemos que cadastrar 50 nomes ?). Agora vamos ver o mesmo
programa acima utilizando o recurso dos vetores.
var
nome : vetor [1..10] de caractere
contador : inteiro
inicio
fimalgoritmo
E ai, aprendeu como se utiliza os vetores e para que serve eles ? Com certeza
que sim. Até aqui aprendemos os conceitos essenciais do desenvolvimento de
algoritmos, mas, ainda não acabou. Temos ainda muito pela frente.
127
Capitulo 7 Trabalhando com
Sub-rotinas
E
m alguns momentos durante o desenvolvimento do nosso programa
(algoritmo) precisaremos desenvolver códigos que envolvem uma certa
quantidade de linhas de comandos para realizar uma tarefa (por
exemplo, 10 linhas de código), até ai tudo bem. Agora , vamos supor que você
precise realizar essa mesma tarefa em vários pontos diferentes do seu
programa, será que eu vou ter que digitar novamente essas mesmas linhas de
código ? Para isso existe o que chamamos de sub-rotinas.
Para compreendermos melhor o que vem a ser uma sub-rotina irei desenvolver
um exemplo onde mostrar todos os números entre 1 e 10. Vejamos abaixo um
código em PORTUGOL, sem o uso de sub-rotina :
var
contador : inteiro
inicio
escreval("Mostrando todos os números entre 1 e 10")
para contador de 1 ate 10 faca
escreval(contador)
fimpara
fimalgoritmo
128
Muito bem, o código do nosso programa anterior irá mostrar todos os números
entre 1 e 10. Agora , se essa atividade tivesse que se repetir várias e várias
vezes em pontos diferentes do meu programa ? Será que teriamos que
escrever o loop de repetição várias vezes , como podemos ver no código
abaixo ?
var
contador : inteiro
inicio
escreval("Mostrando todos os números entre 1 e 10")
para contador de 1 ate 10 faca
escreval(contador)
fimpara
fimalgoritmo
Com certeza que não. Para isso devemos utilizar as sub-rotinas. Vejamos o
mesmo exemplo que desenvolvemos anteriormente, só que usando uma sub-
rotina própria para isso. Veja o código a seguir :
129
algoritmo "mostra de 1 ate 10 usando rotina"
procedimento Mostrar1Ate10()
var
contador : inteiro
inicio
para contador de 1 ate 10 faca
escreval(contador)
fimpara
fimprocedimento
inicio
escreval("Mostrando todos os números entre 1 e 10")
Mostrar1Ate10()
fimalgoritmo
procedimento Mostrar1Ate10()
var
contador : inteiro
inicio
para contador de 1 ate 10 faca Primeira instrução.
escreval(contador)
fimpara
fimprocedimento
inicio
Mostrar1Ate10()
fimalgoritmo
130
algoritmo "mostra de 1 ate 10 usando rotina"
procedimento Mostrar1Ate10()
var
contador : inteiro
inicio
para contador de 1 ate 10 faca
escreval(contador)
fimpara
fimprocedimento
inicio
procedimento Mostrar1Ate10()
var
contador : inteiro
inicio
para contador de 1 ate 10 facaChegamos na estrutura do procedimento
escreval(contador) “Mostrar1Ate10”, cuja função é mostrar
fimpara
os números de 1 até 10. Vamos continuar
fimprocedimento
a sua execução:
:
procedimento Mostrar1Ate10()
var
contador : inteiro
inicio
Início da execução do
para contador de 1 ate 10 faca procedimento :
escreval(contador)
fimpara
131
algoritmo "mostra de 1 ate 10 usando rotina"
procedimento Mostrar1Ate10()
var
contador : inteiro
inicio
procedimento Mostrar1Ate10()
var
contador : inteiro
inicio
:
inicio
Voltamos para o ponto onde a
sub-rotina
escreval("Mostrando todos os números entrefoi
1 e chamada
10") para
continuarmos com o fluxo normal
Mostrar1Ate10()
Fimalgoritmo do programa.
132
inicio
Mostrar1Ate10()
Fim da execução do nosso
fimalgoritmo
algoritmo.
A princípio vimos como utilizar a rotina desenvolvida onde ocorre uma única
chamada dela no código. Se houvesse várias chamadas daquela tarefa
(mostrar todos os números entre 1 até 10) em pontos diferentes, agora usando
uma rotina, olha como seria mais fácil a compreensão do código :
procedimento Mostrar1Ate10()
var
contador : inteiro
inicio
para contador de 1 ate 10 faca
escreval(contador)
fimpara
fimprocedimento
inicio
escreval("Mostrando todos os números entre 1 e 10")
Mostrar1Ate10()
Mostrar1Ate10()
Mostrar1Ate10()
:
Mostrar1Ate10()
Mostrar1Ate10()
:
fimalgoritmo
133
7.2) O que é procedimento ?
Um procedimento nada mais é do que uma sub-rotina, que foi o que utilizamos
agora pouco, que executa um bloco de código no ponto em que ele é chamado
(posso dizer que procedimento nada mais é do que outro nome que atribuímos
a sub-rotina). Vejamos a sintaxe da declaração do procedimento :
Sintaxe :
[ var
<variavel1>,<variável2>,...,<variáveln> : <tipo>
]
inicio
<bloco de comandos>
fimprocedimento
Vamos agora criar um algoritmo EM PORTUGOL que irá possuir uma rotina
para mostrar a mensagem “ESTOU APRENDENDO PROGRAMAÇÃO PARA
ANDROID”. Eis o código :
procedimento MostrarMensagem()
inicio
escreval("ESTOU APRENDENDO PROGRAMAÇÃO PARA ANDROID")
fimprocedimento
inicio
escreval("Minha mensagem : ")
MostrarMensagem()
escreval("FIM...")
fimalgoritmo
134
Executando o programa do código anterior teremos o seguinte resultado:
Programa em execução
procedimento MostrarMensagem()
inicio
escreval("ESTOU APRENDENDO PROGRAMAÇÃO PARA ANDROID")
fimprocedimento
inicio
MostrarMensagem()
escreval("FIM...")
fimalgoritmo
135
algoritmo "rotina mostrar mensagem"
procedimento MostrarMensagem()
inicio
escreval("ESTOU APRENDENDO PROGRAMAÇÃO PARA ANDROID")
fimprocedimento
inicio
procedimento MostrarMensagem()
inicio
escreval("ESTOU APRENDENDO PROGRAMAÇÃO PARA ANDROID")
fimprocedimento
procedimento MostrarMensagem()
inicio
escreval("ESTOU APRENDENDO PROGRAMAÇÃO PARA ANDROID")
fimprocedimento
inicio
Bloco “inicio” da nossa rotina.
136
algoritmo "rotina mostrar mensagem"
procedimento MostrarMensagem()
inicio
fimprocedimento
Mostrando a mensagem na tela.
inicio
procedimento MostrarMensagem()
inicio
procedimento MostrarMensagem()
inicio
escreval("ESTOU APRENDENDO PROGRAMAÇÃO PARA ANDROID")
fimprocedimento
inicio
fimalgoritmo
137
procedimento MostrarMensagem()
inicio
escreval("ESTOU APRENDENDO PROGRAMAÇÃO PARA ANDROID")
fimprocedimento
inicio
MostrarMensagem()
fimalgoritmo
procedimento MostrarMensagem()
inicio
escreval("ESTOU APRENDENDO PROGRAMAÇÃO PARA ANDROID")
fimprocedimento
inicio
MostrarMensagem()
escreval("FIM...")
138
7.3) O que é são parâmetros ?
Parâmetros nada mais são do que valores que são passados para as sub-
rotinas para a realização de algum processamento.
Sintaxe :
Para demonstrar o uso de parâmetros vamos criar um algoritmo para ler dois
números inteiros. Após a leitura dos números chamar uma rotina chamada
“Somar” para efetuar a soma dos dois números pelo teclado (passando os
mesmos via parâmetro na rotina). Eis o código :
var
numero1, numero2 : inteiro
inicio
fimalgoritmo
139
Para a melhor compreensão do programa acima, irei simular a execução do
código :
var
numero1, numero2 : inteiro
inicio
leia(numero1)
escreval("Digite o segundo número : ")
leia(numero2) Primeira instrução.
Somar(numero1,numero2)
fimalgoritmo
leia(numero1)
MEMÓRIA
escreval("Digite o segundo número : ") numero1
leia(numero2)
Somar(numero1,numero2) 9
fimalgoritmo
140
:
inicio
leia(numero2)
Somar(numero1,numero2)
Terceira instrução.
fimalgoritmo
6
Somar(numero1,numero2)
fimalgoritmo
141
algoritmo "rotina somar"
:
var
numero1, numero2 : inteiro
inicio
escreval("Digite o primeiro número : ")
leia(numero1)
escreval("Digite o segundo número : ")
leia(numero2)
Somar(numero1,numero2)
fimalgoritmo
142
algoritmo "rotina somar"
var
s : inteiro
s <- n1 + n2
var
s : inteiro
inicio
Efetua a soma de “n1” com “n2”
s <- n1 + n2
e armazena o resultado em “s”
escreval("A soma é : ", s)
fimprocedimento
MEMÓRIA
S=9+6 s
S = 15 15
143
algoritmo "rotina somar"
var
s : inteiro
inicio
s <- n1 + n2
fimprocedimento
:
inicio
escreval("Digite o primeiro número : ")
leia(numero1)
escreval("Digite o segundo número : ")
leia(numero2)
Agora a gente segue o fluxo
Somar(numero1,numero2)
normal do programa.
fimalgoritmo
144
7.4) O que é são funções ?
Sintaxe:
[ var
<variavel1>,<variável2>,...,<variáveln> : <tipo>
]
inicio
<bloco de comandos>
retorne <valor>
fimfuncao
Para demonstrar o uso de funções vamos criar uma função chamada Somar
(como o do exemplo anterior), só que ao invés da função mostrar na tela a
soma dos números, ela irá “retornar” o valor da soma para uma variável. Eis o
código :
145
algoritmo "função somar"
var
numero1, numero2 : inteiro
resultado : inteiro
inicio
fimalgoritmo
var
numero1, numero2 : inteiro
resultado : inteiro
inicio
leia(numero1)
escreval("Digite o segundo número : ")
leia(numero2)
:
Primeira instrução.
fimalgoritmo
146
algoritmo "função somar"
:
var
numero1, numero2 : inteiro
resultado : inteiro
inicio
escreval("Digite o primeiro número : ")
leia(numero1)
MEMÓRIA
escreval("Digite o segundo número : ") numero1
leia(numero2)
: 9
fimalgoritmo
leia(numero2)
resultado <- Somar(numero1,numero2)
Terceira instrução.
fimalgoritmo
147
algoritmo "função somar"
:
var
numero1, numero2 : inteiro
resultado : inteiro
inicio
escreval("Digite o primeiro número : ")
leia(numero1) MEMÓRIA
escreval("Digite o segundo número : ")
numero2
leia(numero2)
6
leia(numero2)
148
algoritmo "função somar"
var
s : inteiro
inicio
MEMÓRIA
s <- n1 + n2
Aqui chegamos na função “Somar”, n1 n2
retorne s
recebendo como argumento os 9 6
números lidos do teclado.
fimfuncao
var
s : inteiro
s <- n1 + n2
retorne s
fimfuncao
var
s : inteiro
inicio
Efetua a soma de “n1” com “n2”
s <- n1 + n2
e armazena o resultado em “s”
retorne s
fimfuncao
MEMÓRIA
S=9+6 s
S = 15 15
149
função Somar(n1 : inteiro ; n2: inteiro) : inteiro
var
s : inteiro
inicio
s <- n1 + n2
Aqui nesta linha a função retorna
retorne s ,no ponto em que ela foi
chamada, o valor contido em “s”.
fimfuncao
Veja :
leia(numero2)
resultado
resultado <- 15
15
150
algoritmo "função somar"
:
var
numero1, numero2 : inteiro
inicio
:
escreval("Digite o segundo número : ")
leia(numero2)
E ai, aprendeu como se utiliza uma função e sua finalidade ? Com certeza que
sim. Agora irei enfatizar algumas observações importantes que preciso falar a
respeito de procedimentos e funções à respeito das variáveis.
151
O que é uma variável local ?
fimprocedimento
fimalgoritmo
152
Muito bem, até aqui concluímos uma etapa muito importante em nosso
aprendizado : A programação com algoritmos (que é a base para tudo).
Aprendemos técnicas essenciais a respeito sobre programação com algoritmos
(usando o português estruturado ou PORTUGOL), que será de grande
importância para o desenvolvimento de aplicações para a plataforma Android
(ou para qualquer outro segmento como PC, WEB e etc.).
153
Capitulo 8 Lista de exercícios
de algoritmos.
N
este capitulo iremos realizar uma série de exercícios a respeito de
programação com algoritmos que aprendemos até agora para reforçar
o nosso aprendizado. Os exercícios estarão dividido em categorias, de
forma a facilitar o aprendizado. Alguns exercícios já estarão resolvidos e outros
você terá que desenvolver. Bom sorte.
inicio
fimalgoritmo
inicio
fimalgoritmo
154
Exercício 3 : Desenvolver um algoritmo para mostrar na tela a seguinte frase
popular :
inicio
fimalgoritmo
Bill Gates”
155
8.2) Variáveis
var
nota1, nota2, media : real
inicio
fimalgoritmo
var
salario_base, vale_transporte, inss, salario_liquido : real
inicio
156
Exercício 3 : Desenvolver um algoritmo que leia do teclado uma temperatura
em Celsius. Em seguida , a temperatura deverá ser convertida para Fahrenheit.
A fórmula de conversão é : F = C * 1,8 + 32. No final, o programa deverá
mostrar a temperatura convertida para Fahrenheit:
var
celsius, fahrenheit : real
inicio
fimalgoritmo
157
8.3) Estrutura condicional
var
nome : caractere
media : real
inicio
158
algoritmo "8.3) Exercício 2"
var
nome : caractere
media : real
inicio
senão
senão
fimse
fimse
fimalgoritmo
159
Exercício 3 : Desenvolver um algoritmo que leia do teclado dois números
inteiros A e B. Após a leitura verificar se B e maior A, caso verdadeiro, exibir os
números nessa ordem : A, B. Caso B seja menor que A mostrar os números
nessa ordem : B, A.
var
a,b : inteiro
inicio
fimalgoritmo
160
algoritmo "8.3) Exercício 4"
var
salario, novo_salario : real
inicio
senao
senao
fimse
fimse
fimalgoritmo
161
algoritmo "8.3) Exercício 5"
var
celsius, temp : real
opcao : inteiro
inicio
se(opcao = 1) entao
temp <- celsius * 1.8 + 32
escreva("A temperatura em Fahrenheit é : ",temp)
senao
temp <- celsius + 273,15
escreva("A temperatura em Kelvin é : ",temp)
fimse
fimalgoritmo
infantil A = 5 - 7 anos
162
algoritmo "8.3) Exercício 6"
var
idade : inteiro
inicio
senao
senao
senao
senao
escreval("Classificação : ADULTO")
fimse
fimse
fimse
fimse
fimalgoritmo
163
Exercício 6 [RESOLVER]: Desenvolver um algoritmo que leia do teclado o
sexo do usuário (“M” para masculino e “F” para feminino) e sua altura.
Obtido os dados, calcule e mostre o peso ideal desse usuário. Veja o
cálculo do peso ideal abaixo:
Condição Item
Salario Família = Nº Filhos *
Salário Base < 530
24,64
Salario Família = Nº Filhos *
Salário Base < 810
19,48
Salário Base > 810 Salário Família = 0
164
8.4) Estrutura de repetição
var
contador : inteiro
inicio
contador <- 1
fimalgoritmo
var
contador : inteiro
inicio
contador <- 1
repita
escreval(contador)
contador <- contador + 1
ate(contador > 50)
fimalgoritmo
165
Exercício 3 : Desenvolver um algoritmo que mostre todos os números entre 1
e 50 (usando o loop PARA).
var
contador : inteiro
inicio
fimalgoritmo
var
contador : inteiro
soma : inteiro
inicio
fimalgoritmo
166
Exercício 5 : Desenvolver um algoritmo que some e mostre :
var
contador : inteiro
soma_todos : inteiro
soma_pares : inteiro
soma_impares : inteiro
inicio
fimalgoritmo
167
Exercício 6 : Desenvolver um algoritmo que leia um número inteiro “n”. Ao
final o programa deverá mostrar todos os números impares e pares entre 1 e
“n” (usar loop ENQUANTO).
var
contador : inteiro
n : inteiro
soma_pares : inteiro
soma_impares : inteiro
inicio
contador <- 1
fimenquanto
Fimalgoritmo
168
Exercício 7 : Desenvolver um algoritmo que leia do teclado 10 números
inteiros do teclado. Ao final o programa deverá mostrar o total de números
pares e impares lidos, como também a soma de todos os números impares e
pares lidos do teclado (usar loop PARA).
var
contador : inteiro
n : inteiro
soma_pares : inteiro
soma_impares : inteiro
conta_par : inteiro
conta_impar : inteiro
inicio
fimpara
fimalgoritmo
169
Exercício 8 : Desenvolver um algoritmo que leia um número inteiro do teclado.
Em seguida o programa deverá calcular e retornar o fatorial do número lido.
Veja um exemplo abaixo do que seria um fatorial :
var
numero : inteiro
contador : inteiro
fatorial : inteiro
inicio
fatorial <- 1
fimalgoritmo
170
Exercício 9 : Desenvolver um algoritmo que leia dois números inteiros do
teclado. Em seguida, o programa deverá mostrar uma lista de opção para
usuário referente a operação aritmética.
var
numero1,numero2 : inteiro
resultado : real
opcao_aritmetica : inteiro
resposta : caractere
inicio
171
escolha(opcao_aritmetica)
caso 1
resultado <- numero1 + numero2
caso 2
resultado <- numero1 - numero2
caso 3
resultado <- numero1 * numero2
caso 4
resultado <- numero1 / numero2
fimescolha
fimenquanto
fimalgoritmo
23 = 2 * 2 * 2 = 8
172
8.5) Vetores
var
numeros : vetor[1..10] de inteiro
contador : inteiro
inicio
fimalgoritmo
173
Exercício 2 : Desenvolver um algoritmo para ler 10 números do teclado e
armazenar cada número lido dentro de um vetor. Em seguida, mostrar o
conteúdo do vetor na ordem INVERSA da leitura.
var
numeros : vetor[1..10] de inteiro
contador : inteiro
inicio
fimalgoritmo
B[índice] = A[índice] * 3
var
A,B : vetor[1..10] de inteiro
contador : inteiro
inicio
para contador de 1 ate 10 faca
escreva("Digite o ",contador," numero para o vetor A: ")
leia(A[contador])
B[contador] <- A[contador] * 3
fimpara
174
para contador de 1 ate 10 faca
escreval("O ",contador," valor do vetor B é : ",B[contador])
fimpara
fimalgoritmo
Condição Média
Média >= 7 APROVADO
Média >= 5 e Média < 7 RECUPERAÇÃO
Média < 5 REPROVADO
var
nome : vetor[1..10] de caractere
media : vetor[1..10] de real
contador : inteiro
inicio
175
escreval(", você está REPROVADO")
fimse
fimse
fimpara
fimalgoritmo
var
nome : vetor[1..10] de caractere
temp : caractere
i, j : inteiro
inicio
fimpara
176
Exercício 6 [RESOLVER]: Desenvolver um algoritmo para ler 20 nomes do
teclado, sabendo que esses nomes estarão armazenadas em um vetor. Em
seguida, o programa deverá ordenar o vetor de forma que os nomes estejam
em ORDEM DECRESCENTE. No final o programa deverá mostrar os nomes
ordenados na tela.
Condição Média
Salario < 500 Reajuste = Salario 20%
Salario >= 500 Salario < 900 Reajuste = Salario 15%
Salário >= 900 Reajuste = Salario 10%
177
8.6) Sub-rotinas
var
numero : inteiro
inicio
escreva("Digite um numero inteiro : ")
leia(numero)
fatorial(numero)
fimalgoritmo
178
var
numero : inteiro
resultado : inteiro
inicio
escreva("Digite um numero inteiro : ")
leia(numero)
resultado <- fatorial(numero)
escreva("O fatorial do numero ",numero," é : ",resultado)
fimalgoritmo
var
celsius : real
temp_fahrenheit : real
inicio
fimalgoritmo
179
Exercício 4 : Crie uma função parar retornar a média das quatro notas de um
aluno lidas do teclado. Ao final a média (retornada pela função) deverá ser
mostrada na tela.
inicio
retorne (n1 + n2 + n3 + n4) / 4
fimfuncao
var
media : real
nota1, nota2, nota3, nota4: real
inicio
inicio
escolha (num_mes)
caso 1
escreval("Janeiro")
180
caso 2
escreval("Fevereiro")
caso 3
escreval("Março")
caso 4
escreval("Abril")
caso 5
escreval("Maio")
caso 6
escreval("Junho")
caso 7
escreval("Julho")
caso 8
escreval("Agosto")
caso 9
escreval("Setembro")
caso 10
escreval("Outubro")
caso 11
escreval("novembro")
caso 12
escreval("Dezembro")
outrocaso
escreval("Mês inválido")
fimescolha
fimprocedimento
var
numero_mes : inteiro
inicio
fimalgoritmo
181
Exercício 6 [RESOLVER]: Crie uma função parar retornar um determinado
mês, de acordo com o valor passado como parâmetro para a sub-rotina. Por
exemplo, se o valor passado para a função for “1”, retornar “Janeiro”. Se o valor
for “2”, retornar “Fevereiro” e assim por diante. Ao final o programa deverá
mostrar o mês retornado pela função na tela.
Salário Família (a ser calculado e retornado por uma função) : Veja os critérios
para o cálculo do Salário Família :
Condição Retorno
Salário Base < 539,08 Número de Filhos * 27,64
(Salário Base >= 539,08) e
Número de Filhos * 19,48
(Salário Base < 810,18)
Salário Base > = 810,18 0
INSS (a ser calculado e retornado por uma função) : Veja a fórmula para o
cálculo do INSS : INNS = Salário Base * 8%
182
Capitulo 9 Linguagem de
programação Java
A
partir de agora iremos aprender neste capítulo a desenvolver programas
usando a linguagem Java, que é a linguagem que utilizamos para
desenvolver nossos programas no Android. Isso quer disse que já
vamos começar Android agora ? NÃO. Agora iremos conhecer somente a
linguagem de programação Java, e como desenvolver programas usando essa
linguagem voltado para Desktop (antes de começarmos a desenvolver para
Android).
Agora nós iremos mexer com uma linguagem de programação que está dentro
da realidade do dia a dia no desenvolvimento de aplicações, já que o
PORTUGOL nada mais é do que um PRÉ-REQUISITO no aprendizado de
desenvolvimento de programas (pois, teoricamente falando, ninguém constrói
softwares profissionais usando o português estruturado, já que ele possui
limitações se comparado a uma linguagem de programação usada no
mercado).
183
assim como qualquer outra linguagem, possui suas regras de desenvolvimento
(palavras, sintaxes, instruções e etc.)
Acho que você possivelmente já teve ter ouvido esse termo em algum lugar,
mas ainda desconhece do que se trata. O que vem a ser uma Máquina Virtual
Java ? Uma Máquina Virtual Java nada mais é do que uma plataforma (ou um
framework, melhor dizendo) que executa aplicações escritas em linguagem
Java. O computador não entende, diretamente, o código de um programa
escrito em Java, cabendo a Máquina Virtual Java (também chamada do JVM)
realizar essa tarefa. A Máquina Virtual Java pode ser baixada no site da
desenvolvedora (no site da Oracle, que irei mostrar mais adiante).
184
9.3) Compilação e Interpretação
Vamos supor que você esteja escrevendo um programa bem simples em uma
linguagem de programação (como por exemplo, EM LINGUAGEM “C’). O
computador NÃO ENTENDE nenhum comando escrito em linguagem C. Os
programas escritos em uma determinada linguagem são executados graças a
uma ferramenta chamada “Compilador” (que também é um programa), que
traduz tudo o que você escreveu (em linguagem “C”) para a linguagem que o
computador irá entender. Veja o processo abaixo:
#include <stdio.h>
Programa em linguagem C
Compilador de Executável do
Linguagem C Windows.
185
OBS : Lembre-se, só para deixar reforçado : Se você estiver desenvolvendo
um programa em linguagem C, você deverá utilizar um compilador de
linguagem C, não de outra linguagem. Para cada linguagem existe uma
ferramenta (compilador) voltado para ela.
Imagine que você, um cara brasileiro que fala português , precise passar uma
mensagem para um alemão (que está na sua frente, cara a cara). Já sabemos
de imediato que o alemão não irá entender nada do que você falar (em
português). Logo, precisaremos de um tradutor (um interprete, que será o
nosso “Compilador”).
186
Um exemplo bem clássico de interpretador, para aqueles que já ouviram falar,
temos o JavaScript (que não é Java), que executa em nossos navegadores de
Internet (Chrome, Firefox, Internet Explorer e etc.). Muitas páginas que a gente
visita na Web (podemos dizer, atualmente, todas elas) , possuem um código
JavaScript que executa instruções para dar alguma ação na página (ou vida,
interatividade). Vejamos um exemplo : Não tem o Facebook ? Pois bem, a
maioria do código dele é JavaScript. E o que o código JavaScript do Facebook
executa e processa ? Ah, o famoso chat (bate-papo), as notificações
automáticas que surgem lá em cima enquanto você está navegando pelo Face
(ou conversando com alguém) e etc.
algoritmo “Mensagem”
inicio
escreva(“Olá”)
fimalgoritmo
Imagine que você, um cara brasileiro que fala português , precise passar uma
mensagem para um alemão (que está na sua frente, cara a cara). Já sabemos
de imediato que o alemão não irá entender nada do que você falar (em
português). Logo, precisaremos de um tradutor (um interprete, que será o
nosso “Interpretador”).
187
A função do nosso interprete é falar tudo o que você está falando em português
para o alemão, no idioma dele, para que o mesmo possa entender a
mensagem que você precisa passar. Se por acaso o alemão esquecer a
mensagem que foi passada, ele será obrigado a recorrer a você (o cara
brasileiro) e ao interprete (o nosso interpretador).
Vantagens :
Desvantagens :
188
Vamos ver agora algumas vantagens e desvantagens da interpretação :
Vantagens :
Desvantagens :
Java é uma linguagem do tipo WORA (Write Once Run Anywhere), ou seja,
você escreve uma única vez e pode executar em qualquer sistema operacional
(teoricamente falando). Isso é possível porque quando escrevemos um
programa em Java, o mesmo é compilado gerando o seu bytecode (que é o
executável do Java, processado somente pela Máquina Virtual Java , nunca
diretamente pelo sistema operacional). Para executarmos um programa Java
(um arquivo de extensão “.class” conhecido como bytecode) precisaremos da
Máquina Virtual Java, que irá processar nosso bytecode e executar nosso
programa escrito em Java.
189
Uma das características fortes na linguagem Java é a PORTABILIDADE, ou
seja, a capacidade de um programa em Java ser executado em vários sistemas
operacionais (Windows, Linux, Solaris, Mac e etc.) , desde que o sistema
operacional possua a Máquina Virtual Java Instalada.
Compilador de Java
190
9.5) A ferramenta de desenvolvimento (Eclipse)
Bom, para você saber se você possui uma máquina virtual Java instalada, abra
o prompt de comando e digite o seguinte comando:
java –version
191
Verifique se o resultado foi “similar” ao que é mostrado abaixo:
A versão do Java que utilizo para o desenvolvimento do livro é 1.7 (Java 7). Se
a versão que se encontra instalada em sua máquina é inferior ao utilizado no
material (como 1.6 ou 1.5), recomendo a atualização da máquina virtual (que
será mostrado como instalar daqui a pouco).
192
Máquina virtual Java NÃO INSTALADA
Significa que sua máquina virtual , possivelmente, não está instalada em sua
máquina.
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-
1880260.html?ssSourceSiteId=otnpt
Procure pela versão mais recente do Java 7. Feito isso aceite os termos de
contrato e realize o download do arquivo de instalação, conforme é mostrado
abaixo:
193
Aceitando os termos de contrato e realizando o download
194
Com a máquina virtual Java instalada em seu computador, já podemos vamos
realizar o download da ferramenta Eclipse.
195
Role abaixo e encontre a opção destacada em verde. A versão que utilizarei
aqui do Eclipse será a versão de 32 Bits. Para realizar o download é só clicar
na opção destacada em azul.
Feito isso será aberta uma nova página. Para finalizar é só clicar no botão de
“DOWNLOAD”, conforme podemos ver na figura seguinte:
196
Caixa de diálogo – Download do Eclipse
197
Para executarmos o Eclipse basta dar um duplo clique executável (conforme
indicado na figura anterior). Quando a ferramenta é executada pela primeira
vez, será solicitado um diretório de “Workspace” (diretório de trabalho), que é o
local no qual o Eclipse vai gerar os projetos (em, Java), conforme você confere
na figura seguinte:
Diretório do Workspace
Escolha o diretório desejado para seu “Workspace” e , caso você deseje que
ela seja definitivo, marque a opção “Use this as the default and do not ask
again”. Depois disso clique em “OK”.
198
Ambiente de programação Eclipse
199
Feito isso visualizaremos a seguinte janela em seguida :
Vamos agora criar o nosso primeiro projeto para o desenvolvimento das nossas
aplicações em Java. Para criarmos um projeto basta irmos no menu
“File/New/Java Project”. Veja na figura abaixo:
200
Feito isso será aberta a seguinte caixa de diálogo abaixo:
No campo “Project name” iremos digitar o nome do nosso projeto, que irá
conter todas as nossas aplicações desenvolvidas em Java. O nome do nosso
projeto irá se chamar “Programas em Java”, veja abaixo:
201
Feito isso basta clicarmos em “Finish” para que o projeto possa ser criado. Veja
o resultado na guia “Package Explorer”, conforme mostra a figura a seguir :
Agora vamos criar nosso primeiro algoritmo (programa) em Java. Para isso,
clique com o botão direito do mouse sobre o nome do projeto e em seguida
selecione “New/Class” . Veja abaixo :
Classe é uma estrutura que irá conter todo o código do nosso programa em
Java. O conceito de “classe” vem da Programação Orientada a Objetos (POO),
que é o ponto forte da linguagem Java. Nesta apostila não irei focar nos
conceitos de Programação Orientada a Objetos (porém, recomendo “muito” a
202
leitura a respeito do assunto). Irei concentrar somente como desenvolver uma
aplicação em Java, fazendo comparações com algoritmos desenvolvidos em
PORTUGOL no Visualg, pra que possamos entender os fundamentos sobre
programação e desenvolvimento de aplicações.
No campo “Name” iremos digitar o nome da nossa classe, que irá se chamar
“PrimeiroPrograma” , veja :
203
Digitando o nome da classe
Depois disso vamos marcar a opção “public static void main(String[] args)”,
indicando que a nossa classe será um programa (pois também uma classe
pode ser somente uma estrutura que pode ser utilizada por outras classes que
venham a ser aplicações, como esta). Veja abaixo:
Depois disso vamos clicar no botão “Finish” para que nossa classe possa ser
gerada. Eis o resultado :
Todo o código que será executado em um programa em Java deve estar dentro
da função main (normalmente em linguagens de programação como Java não
se utiliza o termo “função”, como utilizamos em algoritmos, mais sim “método”,
que iremos utilizar a partir de agora)
204
Conceituando mais sobre método
Consiste em um comentário com várias linhas, que inicia sempre com “/*”
(barra seguido do asterisco), e finalizado com “*/” (asterisco seguido do barra).
205
Consiste em um comentário mono linha, ou seja, de uma única linha (expresso
por duas barras seguidas “//”, como no Visualg)
Bom (sem muito papo), vamos construir nossa primeira aplicação em Java,
cuja finalidade é mostrar a seguinte frase na tela : “Estou aprendendo Java”.
206
O comando que digitamos (em Java) acima imprime na tela a mensagem
“Estou aprendendo Java”. Se observarmos o código acima existe após a
instrução digitada um ponto e vírgula ( ; ), que finaliza a instrução daquela
linha.
207
Feito o que se foi pedido, poderá ser aberta a seguinte caixa de diálogo, caso o
arquivo não tenha sido salvo:
Basta clicarmos em “OK” para que o nosso programa possa ser executado.
Ué, mas não se abriu nenhuma tela preta como no Visualg. Claro, no Eclipse é
um pouco diferente. O resultado da execução pode ser conferido na seção
“Console”, conforme é mostrado na figura em segudia :
208
Programa em execução
Eis o código :
209
Vejamos o resultado:
Programa em execução
Sintaxe :
Diferente do Visualg, não é preciso utilizar uma clausula chamada var (até
porque no Java essa palavra reservada não existe), para declararmos uma
variável, e se observarmos na sintaxe acima, primeiramente informamos o tipo
de dados para em seguida informar as variáveis que serão usadas no código.
210
9.7.2) Tipos de dados existentes na linguagem Java
211
Tipo de dados Descrição
O tipo byte no Java também equivale ao
tipo inteiro lá do Visualg, ou seja, permite
declarar uma variável que armazene
somente números inteiros. A diferença
byte
do tipo byte para o tipo int no Java é que
esse tipo permite guardar valores inteiros
com representações numéricas limitadas,
ou seja, valores entre 0 e 255.
O tipo float no Java equivale ao tipo real
lá do Visualg, ou seja, permite declarar
float
uma variável que armazene números
inteiros e quebrados (em 32 bits).
O tipo double no Java também equivale
ao tipo real lá do Visualg, ou seja, permite
double declarar uma variável que armazene
números inteiros e quebrados (em 64
bits).
O tipo String equivale ao tipo caractere
lá do Visualg, ou seja, permite guardar
String
textos, frases e caracteres de uma forma
geral.
O tipo char do Java, diferente do tipo
char String, guarda somente um único
caractere na memória.
O tipo boolean equivale ao tipo lógico lá
do Visualg, ou seja, permite guardar
boolean valores lógicos como true (que equivale
ao verdadeiro) e false (que equivale ao
falso)
String nome;
float nota1,nota2,nota3,nota4;
212
Para uma demonstração prática vamos criar uma nova classe no Java (da
forma como já foi mostrado). O nome da nossa classe irá se chamar
Variaveis1 (escrito tudo junto e sem acentos). Lembre-se de marcar a opção
“public static void main(String[] args)”
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String nome;
int idade;
nome = "Luciano";
idade = 29;
String nome;
int idade;
Declara duas variáveis chamadas nome (tipo String) e idade (do tipo int), que
serão utilizadas dentro do programa.
213
Nas instruções a seguir :
nome = "Luciano";
idade = 29;
214
Feito isso, teremos o seguinte resultado abaixo:
Programa em execução
String nome;
int idade;
nome = "Luciano";
idade = 29;
String nome;
nome = "Luciano";
int idade;
idade = 29;
215
É possível também no Java atribuir os valores para uma variável já no
momento de sua declaração. Vejamos o código abaixo :
String nome;
nome = "Luciano";
int idade;
idade = 29;
<variável> = <valor>;
nome = "Carlos";
idade = 42;
tem_habilitacao = true;
216
Como utilizar a classe Scanner
Primeiramente vamos criar uma nova classe dentro do nosso projeto chamada
Variaveis2 (lembre-se de marcar a opção “public static void main(String[]
args)”. Feito isso termos o seguinte código abaixo :
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
import java.util.Scanner;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
import <pacote>.<classe>;
217
Logo, para utilizarmos a classe Scanner que se encontra no pacote “java.util”,
basta digitarmos :
import java.util.Scanner;
Agora , caso queiramos utilizar todas as classes presentes dentro desse pacote
(incluindo também a classe Scanner), basta digitarmos :
import java.util.*;
Na linguagem Java, quando declaramos uma variável que não seja no tipo
int, float, double, boolean, char e etc (conforme a tabela de tipos de
dados) , normalmente chamamos de objetos.
De uma forma mais clara, todas as variáveis cujo tipos primitivos sejam de
acordo com a tabela mostrada (referente aos tipos de dados) chamamos
de variáveis (e observe que não é preciso usar o new para carrega-las na
memória).
Agora, qualquer variável que veja a fazer uso da instrução new para
carrega-la na memória, chamaremos de objeto.
218
Agora vamos digitar o restante do código, conforme podemos ver abaixo:
String nome;
nome = teclado.nextLine();
Irei explicar linha a linha o que cada comando está realizando. Na primeira
instrução :
Estou criando um objeto chamado teclado, que irá armazenar o que chamamos
de “instância da classe” Scanner na memória. E observe que na classe
Scanner existe um parâmetro que passamos (e que é padrão) , cujo valor é
“System.in”.
Na instrução seguinte:
String nome;
Criamos uma variável chamada nome, do tipo String (Observe que não é
preciso usar nenhuma instrução new para carregar na memória, por isso
chamamos de variável).
Na instrução seguinte :
nome = teclado.nextLine();
219
tipo Scanner). Após a leitura dos dados via teclado, ocorre a atribuição do
valor lido para a variável nome. Veja abaixo como funciona o processo :
nome = teclado.nextLine();
Pressionou ENTER
Digitou : “Lucas”
nome = “Lucas”;
220
Na instrução abaixo :
Agora sim. Basta digitarmos agora um nome qualquer (como por exemplo
“Rodrigo”), e em seguida pressionarmos ENTER, para conferirmos o resultado:
221
Agora vamos supor que eu precise desenvolver um programa (algoritmo) em
Java para ler o nome de um aluno e as suas quatro notas, e no final o
programa deverá mostrar o nome do aluno e sua média. Para isso, vamos criar
uma nova classe chamada CalculaMedia no nosso projeto, com o seguinte
código abaixo:
import java.util.Scanner;
String nome_aluno;
double media;
nome_aluno = teclado.nextLine();
222
Vejamos agora, antes de executar o programa , os comandos destacados
abaixo :
nota1 = teclado.nextDouble();
nota2 = teclado.nextDouble();
nota3 = teclado.nextDouble();
nota4 = teclado.nextDouble();
Observe que para as leituras dos dados referentes as notas escolares (que são
variáveis do tipo double) fizemos uso do método nextDouble (da classe
Scanner), responsável por ler números dessa natureza.
223
Antes de prosseguirmos, vamos conhecer os todos métodos de leitura
referente para cada tipos de dados abaixo da classe Scanner:
Operador Descrição
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Resto de uma divisão inteira
224
9.8) Estrutura condicional
9.8.1) A estrutura IF
Sintaxe :
if(<condicao>)
<comando a ser executado> ;
if(<condicao>)
{
<comando1> ;
<comando2> ;
:
<comandon> ;
Ou seja, todos os comandos devem estar entre abra e fecha colchetes { ... }
225
Vejamos um exemplo abaixo :
if(media >= 7)
{
System.out.println(“MEUS PARABENS!!!”);
System.out.println(“Você está aprovado.”);
Sintaxe :
if(<condicao>)
<comando a ser executado caso a condição seja verdadeira> ;
else
<comando a ser executado caso a condição seja falsa> ;
Exemplos:
if(media >= 7)
{
System.out.println(“MEUS PARABENS!!!”);
System.out.println(“Você está aprovado.”);
}
else
{
System.out.println(“QUE PENA!!!”);
System.out.println(“Você foi reprovado.”);
}
226
EXEMPLO 1: Vamos construir um algoritmo para ler um número do teclado e
em seguida verificar se ele é maior do que 10. Caso o número seja maior do
que 10, mostrar a mensagem “ESSE NÚMERO É MAIOR DO QUE 10” (criar
uma classe chamada EstruturaIf1).
import java.util.Scanner;
int numero;
}
}
import java.util.Scanner;
227
9.8.3) Tabela de operadores relacionais
Operador Descrição
>= Maior ou igual
> Maior
<= Menor ou igual
< Menor
== Igual
!= Diferente
228
O operador lógico && (E)
Condição Operador !
Verdadeiro Falso
Falso Verdadeiro
229
Aplicando os operadores na prática no Java
import java.util.Scanner;
int numero;
230
import java.util.Scanner;
String opcao ;
if((opcao.equals("A")) || (opcao.equals("B")))
System.out.println("Opção selecionada válida");
else
System.out.println("Opção inválida");
opcao = teclado.nextLine();
opcao = opcao.toUpperCase();
O que significa essa atribuição ? Essa atribuição fará que a letra (opção)
informada, seja convertida para maiúscula caso a letra esteja minúscula pelo
método toUpperCase.
231
Vamos ver como todo esse processo funciona, conforme podemos ver abaixo:
opcao = teclado.nextLine();
Pressionou ENTER
Digitou : “a”
opcao = “a” ;
Converte para
opcao = opcao.toUpperCase();
maiúsculo.
opcao = “A”;
232
Agora na avaliação condição temos a seguinte expressão :
if((opcao.equals("A")) || (opcao.equals("B")))
Observe que para comparar se uma variável String do Java é igual a uma
determinada cadeia de caracteres (ou somente um único caractere), devemos
utilizar o método equals , pois o operador “==” não é correto para esse tipo de
situação (somente para tipo de dados String, pois para restante, se usa o “==”
normal).
import java.util.Scanner;
int numero;
233
9.8.5) A estrutura SWITCH/CASE
switch (<variável>)
{
case <valor1> : <instrução> break;
case <valor2> : <instrução> break;
case <valor3> : <instrução> break;
:
case <valorn> : <instrução> break;
[
default : <instrução>break;
]
O – Novo
A – Abrir
S – Salvar
I – Imprimir
X – Sair
234
Caso o usuário digite uma das letras acima, mostrar a operação associada a
ela, caso contrário, mostrar “OPÇÃO INVÁLIDA”.
import java.util.Scanner;
String opcao;
System.out.println(" ");
System.out.println("Qual sua opção : ");
opcao = teclado.nextLine();
opcao = opcao.toUpperCase();
switch(opcao)
{
case "O" : System.out.println("Você escolheu NOVO");
break;
case "A" : System.out.println("Você escolheu ABRIR");
break;
case "S" : System.out.println("Você escolheu SALVAR");
break;
case "I" : System.out.println("Você escolheu IMPRIMIR");
break;
case "X" : System.out.println("Você escolheu SAIR");
break;
default : System.out.println("OPÇÃO INVÁLIDA"); break;
235
A execução desse programa é similar ao que nós aprendemos lá no Visualg.
Vejamos o resultado na figura abaixo :
Programa em execução
236
Veja a sintaxe da estrutura WHILE abaixo:
while (<condição>)
<instrução>;
A sintaxe acima é válida quando temos uma única instrução somente a ser
executada dentro do loop. Caso a gente precise executar mais de uma
instrução dentro do loop, usar a sintaxe abaixo :
while (<condição>)
{
<instrução1>;
<instrução2>;
:
<instruçãon>;
Vamos fazer um algoritmo em Java onde tenha que imprimir valores na tela de
1 até 5, sabendo que os valores estarão armazenados em uma variável. Eis o
código (criar uma classe chamada Loop1):
int contador = 1;
while(contador <= 5)
{
System.out.println(contador);
contador++;
}
237
Assim como no Visualg, ele irá imprimir os números na tela, de 1 ate 5,
conforme podemos conferir na figura abaixo:
Programa em Execução
while(contador <= 5)
{
System.out.println(contador);
contador++;
O que faz esse “++” após a variável ? Esse “++” funciona como se fosse um
incremento de variável, ou seja, a linha destacada acima equivale a :
contador = contador + 1;
238
Vejamos a sintaxe da estrutura DO/WHILE abaixo :
do
{
<instrução1>;
<instrução2>;
:
<instruçãon>;
}
while(<condição>);
int contador = 1;
do
{
System.out.println(contador);
contador++;
}
while(contador <= 5);
}
239
9.9.3) A estrutura de repetição FOR
for(<inicialização ;<condição>;<incremento>)
<instrução>
O loop de repetição FOR é formado por três parâmetros que irei mencionar
aqui:
240
Bom, embora o código escrito em Java tenha consumido somente poucas
linhas de comando, será preciso mostrar para você como isso funciona (visto
que o loop FOR possui uma estrutura particularmente diferente do que
aprendemos no PORTUGOL do Visualg). Vamos a simulação :
System.out.println(contador);
}
A primeira instrução já começa
processando o loop de repetição “for”.
System.out.println(contador);
}
Temos a segunda etapa, onde avaliamos a condição
}
do loop. Como a condição é verdadeira, o loop é
iniciado.
241
public class Loop3 {
System.out.println(contador);
System.out.println(contador);
System.out.println(contador);
}
Voltamos agora para o início do
} loop.
242
public class Loop3 {
System.out.println(contador);
}
Novamente voltamos para a avaliação da condição do
}
loop. Como a condição AINDA É VERDADEIRA,
entramos dentro do bloco novamente.
System.out.println(contador);
System.out.println(contador);
243
public class Loop3 {
System.out.println(contador);
}
Voltamos agora para o início do
} loop.
System.out.println(contador);
}
Novamente voltamos para a avaliação da condição do
}
loop. AGORA A CONDIÇÃO TORNA-SE FALSA, pois o
valor da variável “contador” é acima de 5, finalizando
o loop.
244
9.10) Vetores (Arrays)
Posição 1 2 3 4 5 6 7 8 9
Índice 0 1 2 3 4 5 6 7 8
245
Para utilizarmos os arrays do Java na prática, vamos desenvolver um algoritmo
para ler 10 nomes de alunos e suas respectivas médias. Ao final, mostrar o
nome de cada aluno e sua respectiva situação (aprovado se a média for >= 7 e
reprovado caso contrário). Criar uma classe chamada Array1 :
import java.util.Scanner;
if(media[contador] >= 7)
System.out.println("Você ESTÁ APROVADO");
else
System.out.println("Você ESTÁ REPROVADO");
246
9.11) Usando métodos
void MostrarBomDia()
{
System.out.println(“Bom dia”);
}
247
Vamos agora criar um algoritmo em Java que irá possuir uma rotina para
mostrar a mensagem “ESTOU APRENDENDO PROGRAMAÇÃO PARA
ANDROID”. Criar uma classe chamada Metodo1 :
MostrarMensagem();
}
Gostaria de chamar atenção aqui para a palavra static usada antes da palavra
void. Por padrão no Java, quando chamamos algum método dentro de um
outro método cuja declaração é especificada como static, o método chamado
também deve ser declarado como static.
248
import java.util.Scanner;
numero1 = teclado.nextInt();
numero2 = teclado.nextInt();
Somar(numero1, numero2);
O outro tipo de método que havia abordado são os que retornam valores.
Vejamos abaixo como declarar a sua estrutura :
Para demonstrar o uso de funções vamos criar uma função chamada Somar
(como o do exemplo anterior), só que ao invés da função mostrar na tela a
soma dos números, ela irá “retornar” o valor da soma para uma variável. Criar
uma classe chamada Metodo3 :
249
import java.util.Scanner;
return resultado;
}
numero1 = teclado.nextInt();
numero2 = teclado.nextInt();
250
9.11) Lista de Exercícios em Java
251
public class Exercicio_Programacao_Sequencial_3 {
Bill Gates”
9.11.2) Variáveis
import java.util.Scanner;
252
System.out.println("Digite a primeira nota : ");
nota1 = teclado.nextDouble();
import java.util.Scanner;
253
Exercício 3 : Desenvolver um algoritmo que leia do teclado uma temperatura
em Celsius. Em seguida , a temperatura deverá ser convertida para Fahrenheit.
A fórmula de conversão é : F = C * 1,8 + 32. No final, o programa deverá
mostrar a temperatura convertida para Fahrenheit:
import java.util.Scanner;
254
9.11.3) Estrutura condicional
import java.util.Scanner;
String nome;
double media;
if(media >= 7)
System.out.println("Ele está APROVADO");
else
System.out.println("Ele está REPROVADO");
255
Exercício 2 : Desenvolver um algoritmo que leia do teclado o nome do aluno e
a sua média aritmética. Ao final o programa deverá mostrar o nome do aluno e
sua situação :
import java.util.Scanner;
String nome;
double media;
if(media >= 7)
{
System.out.println("O aluno" + nome + " está APROVADO");
}
else
{
if(media >= 4)
{
System.out.println("O aluno" + nome + " está EM
RECUPERAÇÃO");
}
else
{
System.out.println("O aluno" + nome + " está EM
REPROVADO");
}
}
256
Exercício 3 : Desenvolver um algoritmo que leia do teclado dois números
inteiros A e B. Após a leitura verificar se B e maior A, caso verdadeiro, exibir os
números nessa ordem : A, B. Caso B seja menor que A mostrar os números
nessa ordem : B, A.
import java.util.Scanner;
if(b > a)
{
System.out.println("Os números são : " + a + "," + b);
}
else
{
System.out.println("Os números são : " + b + "," + a);
}
}
257
import java.util.Scanner;
double salario,novo_salario;
Scanner teclado = new Scanner(System.in);
import java.util.Scanner;
int opcao;
double temp_convertida;
double celsius;
Scanner teclado = new Scanner(System.in);
258
//O símbolo \n equivale a uma quebra de linha
System.out.println("Escolha sua opção de conversão\n");
System.out.println("[1] - Fahrenheit");
System.out.println("[2] - Kelvin\n");
if(opcao == 1)
{
temp_convertida = celsius * 1.8 + 32;
System.out.println("A temperatura convertida em Fahrenheit
é : " + temp_convertida);
}
else
{
temp_convertida = celsius + 273.15;
System.out.println("A temperatura convertida em Kelvin é :
" + temp_convertida);
}
infantil A = 5 - 7 anos
259
import java.util.Scanner;
int idade;
260
Exercício 6 [RESOLVER]: Desenvolver um algoritmo que leia do teclado o
sexo do usuário (“M” para masculino e “F” para feminino) e sua altura.
Obtido os dados, calcule e mostre o peso ideal desse usuário. Veja o
cálculo do peso ideal abaixo:
Condição Item
Salario Família = Nº Filhos *
Salário Base < 530
24,64
Salario Família = Nº Filhos *
Salário Base < 810
19,48
Salário Base > 810 Salário Família = 0
261
9.11.4) Estrutura de repetição
int contador = 1;
while(contador <= 50)
{
System.out.println(contador);
contador++;
}
int contador = 1;
do
{
System.out.println(contador);
contador++;
}
while(contador <= 50);
262
Exercício 3 : Desenvolver um algoritmo que mostre todos os números entre 1
e 50 (usando o loop FOR).
}
}
}
int soma = 0;
}
System.out.println("A soma dos números é : " + soma);
}
}
263
public class Exercicio_Repeticao_5 {
}
System.out.println("A soma de todos os números entre 10 e 50 é :
" + soma_todos);
System.out.println("A soma de todos os números pares entre 10 e
50 é : " + soma_pares);
System.out.println("A soma de todos os números impares entre 10
e 50 é : " + soma_impares);
import java.util.Scanner;
int n;
264
System.out.println("Digite um número inteiro :");
n = teclado.nextInt();
// É um número par
if ((contador % 2) == 0)
soma_pares = soma_pares + contador;
else
soma_impares = soma_impares + contador;
}
}
}
import java.util.Scanner;
int numero;
if((numero % 2) == 0)
{
conta_par++;
soma_par= soma_par + numero;
}
265
else
{
conta_impar++;
soma_impar= soma_impar + numero;
}
}
}
}
import java.util.Scanner;
int fatorial = 1;
int numero;
int contador = 1;
}
}
266
Exercício 9 : Desenvolver um algoritmo que leia dois números inteiros do
teclado. Em seguida, o programa deverá mostrar uma lista de opção para
usuário referente a operação aritmética.
import java.util.Scanner;
double numero1,numero2;
double resultado = 0;
int opcao;
String resposta = "S";
Scanner teclado = new Scanner(System.in);
while(resposta.equals("S"))
{
System.out.println("Digite o primeiro numero : ");
numero1 = teclado.nextDouble();
switch(opcao)
{
case 1 : resultado = numero1 + numero2; break;
case 2 : resultado = numero1 - numero2; break;
case 3 : resultado = numero1 * numero2; break;
case 4 : resultado = numero1 / numero2; break;
}
267
System.out.println("O resultado da operação é : " +
resultado);
System.out.println("\nContinua ? [S/N]");
resposta = teclado.nextLine();
resposta = resposta.toUpperCase();
}
}
}
23 = 2 * 2 * 2 = 8
268
9.11.5) Arrays
import java.util.Scanner;
if((numero[contador] % 2) == 0)
numero[contador] = numero[contador] * 2;
else
numero[contador] = numero[contador] * 3;
}
for(int contador = 0 ; contador < 10 ; contador++)
{
System.out.println("O valor do " + (contador + 1) +
" numero é : " + numero[contador]);
}
269
Exercício 2 : Desenvolver um algoritmo para ler 10 números do teclado e
armazenar cada número lido dentro de um vetor. Em seguida, mostrar o
conteúdo do vetor na ordem INVERSA da leitura.
import java.util.Scanner;
B[índice] = A[índice] * 3
270
import java.util.Scanner;
Condição Média
Média >= 7 APROVADO
Média >= 5 e Média < 7 RECUPERAÇÃO
Média < 5 REPROVADO
271
import java.util.Scanner;
272
Exercício 5 : Desenvolver um algoritmo para ler 20 nomes do teclado, sabendo
que esses nomes estarão armazenadas em um vetor. Em seguida, o programa
deverá ordenar o vetor de forma que os nomes estejam em ORDEM
CRESCENTE. No final o programa deverá mostrar os nomes ordenados na
tela.
import java.util.Scanner;
273
Exercício 6 [RESOLVER]: Desenvolver um algoritmo para ler 20 nomes do
teclado, sabendo que esses nomes estarão armazenadas em um vetor. Em
seguida, o programa deverá ordenar o vetor de forma que os nomes estejam
em ORDEM DECRESCENTE. No final o programa deverá mostrar os nomes
ordenados na tela.
Condição Média
Salario < 500 Reajuste = Salario 20%
Salario >= 500 Salario < 900 Reajuste = Salario 15%
Salário >= 900 Reajuste = Salario 10%
274
9.11.6) Métodos
import java.util.Scanner;
int numero;
Scanner teclado = new Scanner(System.in);
import java.util.Scanner;
return fat;
}
275
public static void main(String[] args) {
int numero;
Scanner teclado = new Scanner(System.in);
var
celsius : real
temp_fahrenheit : real
inicio
fimalgoritmo
276
Exercício 4 : Crie um método parar retornar a média das quatro notas de um
aluno lidas do teclado. Ao final a média (retornada pelo método) deverá ser
mostrada na tela.
import java.util.Scanner;
{
return (n1 + n2 + n3 + n4) / 4;
}
277
Exercício 5 : Crie um método parar mostrar um determinado mês na tela, de
acordo com o valor passado como parâmetro para a sub-rotina. Por exemplo,
se o valor passado para o procedimento for “1”, mostrar na tela “Janeiro”. Se o
valor for “2”, mostrar “Fevereiro” e assim por diante.
import java.util.Scanner;
int mes;
278
Exercício 6 [RESOLVER]: Crie uma função parar retornar um determinado
mês, de acordo com o valor passado como parâmetro para a sub-rotina. Por
exemplo, se o valor passado para a função for “1”, retornar “Janeiro”. Se o valor
for “2”, retornar “Fevereiro” e assim por diante. Ao final o programa deverá
mostrar o mês retornado pela função na tela.
Salário Família (a ser calculado e retornado por uma função) : Veja os critérios
para o cálculo do Salário Família :
Condição Retorno
Salário Base < 539,08 Número de Filhos * 27,64
(Salário Base >= 539,08) e
Número de Filhos * 19,48
(Salário Base < 810,18)
Salário Base > = 810,18 0
INSS (a ser calculado e retornado por uma função) : Veja a fórmula para o
cálculo do INSS : INNS = Salário Base * 8%
279
Capitulo 10 Fundamentos
sobre Programação Orientada a
Objetos
A
té aqui aprendemos as técnicas fundamentais de desenvolvimento de
aplicações usando a linguagem de Java (com ela já é possível
desenvolvermos nossas aplicações para Android), mas, antes de
começarmos por definitivo a programação com Android, vamos aprender
algumas técnicas muito importantes que havia citado durante o
desenvolvimento de aplicações em Java : A Programação Orientada a Objetos
(POO).
280
Sintaxe :
Um atributo de uma classe nada são é do que as variáveis que são declaradas
dentro dela. Para que vocês possam entender claramente o que vem a ser
atributo, traduzindo isso para o PORTUGOL do Visualg, seriam as variáveis
globais que são acessadas pelas sub-rotinas (chamadas aqui de métodos).
Sintaxe :
Exemplo : Não tem o exemplo que demos agora do carro ? Vejamos como isso
seria estruturado em uma classe, com os seus devidos atributos :
class Carro
{
String modelo;
String cor;
String placa;
int ano;
}
281
10.4) O que é um método ?
Reforçando mais uma vez aqui, só que agora de uma forma bem mais clara, os
métodos nada mais são do que as funções (sub-rotinas) que são declaradas
dentro da classe, que executam alguma ação.
Sintaxe :
282
Vejamos abaixo um exemplo da classe Carro (citada anteriormente) declarada
com os seus respectivos métodos (incluindo também seus atributos)
class Carro
{
String modelo;
String cor;
String placa;
int ano;
void andarPraFrente()
{
void andarPraTras()
{
void virarPraDireita()
{
void virarPraEsquerda()
{
283
private : Esse modificador define que todos os atributos e métodos
especificados com essa palavra possuam escopo “privado”, sendo visível
e acessado somente pela classe onde os mesmos foram declarados,
nunca por outros programas.
OBS: Por padrão, é muito comum utilizamos esses modificadores também para
classes, como o public por exemplo.
284
10.6) O que é um objeto ?
Se lembra que já usamos a palavra new ? Então, ela serve para criar instância
de classe (objeto) na memória.
Não tem o Scanner que utilizamos para ler os dados do teclado ? Então, aquilo
na verdade é uma classe, que possui uma série de métodos (como nextInt,
nextDouble, nextLine e etc), onde cada um realiza uma determinada tarefa. E
ai, as coisas estão ficando mais claras para você agora ? Com certeza que sim.
285
Vejamos um exemplo :
286
Feito isso irá se abrir aquela caixa de diálogo, beleza ? Vamos agora digitar no
campo “Name” o nome da nossa classe que vai se chamar Triangulo.
Opção desmarcada
Agora vamos criar o código da nossa classe, conforme podemos ver abaixo :
287
Uma metodologia muito comum utilizada na Programação Orientada a Objetos
é definir todos os atributos com o escopo private (como realizamos para base
altura) e criar um método para cada atributo, de escopo public , para
podermos acessar/modificar cada um deles (como é o caso do método
setBase (que modifica o atributo base) e setAltura (que modifica o atributo
altura) que criamos na classe).
import java.util.Scanner;
triangulo.setBase(base);
triangulo.setAltura(altura);
Voltando aquela nossa velha prática, irei simular passo a passo a execução do
nosso programa acima, para que possamos entender como todo esse processo
da programação orientada a objetos funciona.
288
import java.util.Scanner;
Objeto Triângulo
base altura
0 0
public void setBase(double b) { ... }
public void setAltura(double b) { ... }
public int calculaArea (double b) { ... }
289
public static void main(String[] args) {
:
Scanner teclado = new Scanner(System.in);
:
System.out.println("Digite a base do triângulo : ");
base
12
290
public static void main(String[] args) {
altura
291
public static void main(String[] args) {
:
System.out.println("Digite a altura do triângulo : ");
double altura = teclado.nextDouble();
triangulo.setBase(base);
Objeto Triângulo
base altura
12 0
public void setBase(double b) { ... }
public void setAltura(double b) { ... }
public int calculaArea (double b) { ... }
292
public static void main(String[] args) {
:
double altura = teclado.nextDouble();
triangulo.setBase(base);
triangulo.setAltura(altura);
Objeto Triângulo
base altura
12 3
public void setBase(double b) { ... }
public void setAltura(double b) { ... }
public int calculaArea (double b) { ... }
293
public static void main(String[] args) {
:
triangulo.setBase(base);
triangulo.setAltura(altura);
E ai, está endentando como funciona todo o processo ? com certeza que sim.
294
10.8) Herança
Sintaxe :
Logo, vamos supor uma classe genérica chamada Veiculo, conforme abaixo :
295
Conforme havia falado, o carro é um veículo correto ? Vamos então agora criar
uma classe chamada Carro cujas propriedades (atributos) e métodos serão
herdados da classe Veiculo :
296
10.9) Polimorfismo
Primeiramente vamos criar uma classe chamada Animal (que não irá possuir
nenhum método main), com o seguinte código abaixo :
Essa é uma classe genérica, que será utilizada por uma outra classe (que
iremos desenvolver a seguir). A classe que desenvolvemos representa um
animal qualquer, que pode emitir qualquer ruído (representado pelo método
chamado Ruido).
Agora vamos desenvolver uma classe chamada Gato, que irá herdar todos os
métodos/atributos da classe Animal. Segue o código :
297
Agora vamos criar uma nova classe que irá utilizar todas as classes que
definimos até agora. O nome da nossa classe irá se chamar ExemploPOO2
(essa irá possuir o método main). Segue o código :
Programa em execução
298
A execução foi bastante simples não é mesmo ? Pois bem, agora na classe
que desenvolvemos (a classe ExemploPOO2) vamos adicionar o seguinte
trecho de código destacado em azul abaixo:
Temos uma atribuição que aparentemente está errada, porém, por incrível que
pareça, a atribuição está correta. O nosso objeto (a variável animal), que
declaramos como um tipo Animal, recebe como atribuição uma instância da
classe Gato. Isso é permitido ? Sim, isso é permito. Isso ocorre porque a
classe Gato herda todos os métodos e atributos da classe Animal, logo, o
comando acima será executado sem problemas.
299
Bom, para entendermos de vez como funciona o POLIMORFISMO, acompanhe
passo a passo a execução do nosso programa abaixo :
animal.Ruido();
animal.Ruido();
300
public static void main(String[] args) {
animal.Ruido();
animal.Ruido();
animal.Ruido();
301
Vejamos abaixo o resultado da execução do nosso programa :
Programa em execução
Agora vamos voltar para a classe Gato para adicionarmos o seguinte método
destacado em azul abaixo :
animal.PuloDoGato();
}
}
302
Agora, se observarmos la no editor do Eclipse , ocorreu o seguinte erro :
Veja como deveríamos fazer para chamar o método PuloDoGato (da classe
Gato) no código abaixo :
((Gato)animal).PuloDoGato();
303
Vejamos abaixo o código final do nosso programa :
((Gato) animal).PuloDoGato();
}
}
Programa em execução
304
Capitulo 11 Introdução a
Plataforma Google Android
M
uito bem. Este possivelmente deve ser para você um dos capítulos
mais esperados, pois é a partir dele que iremos conhecer e ter o
nosso primeiro contato com desenvolvimento para a plataforma
Google Android. Veremos nesse capítulo uma introdução à plataforma e as
suas características fundamentais.
305
G1 - T-Mobile
306
Tablet Samgung Galaxy Note
Possivelmente você já deve ter pensado : Será que eu vou ter que comprar um
Smartphone ou Tablet na loja agora (correndo) para poder desenvolver e
executar minhas aplicações feitas no Android ? NÃO. O Kit de
desenvolvimento para Android (o Android Studio) já oferece um emulador de
Android, onde podemos executar e conferir todas as aplicações que
desenvolvermos para a plataforma.
307
Vejamos agora os recursos oferecidos pelo Android SDK :
Dalvik virtual machine: É uma Máquina Virtual Java (JVM) voltada para
dispositivos móveis ;
308
11.3) Versões do Android
Data de
Versão Code Name API Level Logotipo
lançamento
30 de abril de
1.5 Cupcake 3
2009
15 de
1.6 Donut 4 setembro de
2009
11 de janeiro
2.1 Eclair 7
de 2010
20 de maio de
2.2 Froyo 8
2010
06 de
2.3.x Gingerbread 9-10 dezembro de
2010
309
Data de
Versão Code Name API Level Logotipo
lançamento
22 de
3.x Honeycomb 11-13 fevereiro de
2011
19 de outubro
4.0.x Icecream Sandwish 14-15
de 2011
09 de julho de
4.1-4.3 Jelly Bean 14-18
2012
31 de outubro
4.4 KitKat 19
de 2013
04 de
5.x.x Lollipop 21-22 novembro de
2014
Outubro de
6.0 Marshmallow 23
2015 *
310
11.4) Para qual versão do Android devemos desenvolver as aplicações ?
Considero esse um dos pontos mais importantes que devemos refletir antes de
desenvolvermos uma aplicação. Como neste material iremos desenvolver
aplicações voltados para a plataforma Android, devemos pensar para qual
versão da plataforma precisamos desenvolver.
Para falar a respeito dessa situação, irei mostrar aqui um gráfico que mostra
quais versões do Android são as mais usadas no mundo todo :
O gráfico da estática acima foi feito em setembro de 2015, onde nele podemos
observar que as versões do Android mais utilizadas são o Kitkat (versão 4.4),
Jelly Bean (versão 4.1 – 4.3) e o Lollipop (Versão 5.0). As versões mais
antigas do Android como Eclair (versão 2.1) e Donut (versão 1.6) já nem são
mais citadas e faladas hoje em dia, e durante a atualização dessa apostila,
conforme já havia falado, a versão 6.0 (Marshmallow) do Android estava
prestes de ser lançada.
311
Hoje em dia, se fomos em alguma loja para comprar um aparelho (Smartphone
ou Tablet Android) iremos adquiri-lo com o S.O Android versão 4.3 para cima.
Se olharmos por esse ponto de vista, devemos pensar em desenvolvermos
nossa aplicação utilizando, como base, a versão 4.3.
1.3.2) O Publico
312
Capitulo 12 Desenvolvendo
nosso primeiro projeto no
Android
N
este capítulo iremos aprender passo a passo como construir a nossa
primeira aplicação para a plataforma Google Android, através do uso da
linguagem de programação Java e outros recursos oferecidos pelo
Android Studio.
Muito bem, vamos desenvolver agora (depois de muita espera) nossa primeira
aplicação para a plataforma Google Android.
313
Caixa de diálogo – Quick Start
Para criarmos um novo projeto no Android Studio basta clicar no botão “Start a
new Android Studio project”, conforme indicado na figura em seguida:
Feito isso será aberta a seguinte caixa de diálogo , conforme mostra a próxima
figura:
314
Criando um novo projeto no Android Studio
315
Criando um novo projeto no Android Studio
Observe que um dos campos, que ainda não citei acima , é preenchido
automaticamente (o campo “Package name”). Ele é formado pelo nome da
aplicação “concatenado” com o nome do campo “Company Domain”. Vejamos
abaixo :
316
Criando um novo projeto no Android Studio
317
Criando uma nova Activity
318
Informações da Activity
319
Informações da Activity
Depois disso, clique em “Finish” para nosso projeto possa ser gerado. O
resultado você confere na figura seguinte:
320
Projeto criado
Mensaegem de erro
321
Conhecendo a estrutura geral de um projeto no Android Studio
322
Visualização dos diretórios do projeto
Irei comentar agora toda a estrutura de um projeto Android. Ele é composto por
várias pastas e arquivos, cada um com uma finalidade em especifico.
323
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.usuario.helloandroid" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".HelloActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</manifest>
Dentro da pasta “java” temos as nossas classes (arquivos “.java”) que fazem
parte da nossa aplicação. Observe que dentro da nossa pasta existem dois
pacotes de mesmo nome (“android.usuario.helloandroid”), sendo o último
voltado para testes, onde dentro dele existe uma classe chamada
“AndroidTest.java” , com o seguinte conteúdo abaixo :
324
Visão geral do arquivo “ApplicationTest.java”
package android.usuario.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
325
public class HelloActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
//present.
getMenuInflater().inflate(R.menu.menu_hello, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
326
A classe “HelloActivity” possui como método principal o onCreate. A primeira
linha de código presente neste método faz chamada ao método onCreate da
classe base (a classe Activity), conforme podemos conferir abaixo:
super.onCreate(savedInstanceState);
Logo após esse método vem o método setContentView, responsável por exibir
a tela da minha aplicação baseado nos layouts “xml". Por padrão ele chama o
arquivo “activity_hello.xml”.
O diretório “drawable”
O diretório “layout”
O diretório “values”
Um dos recursos que o Android permite que usemos na construção das telas
de nossa aplicação são “constantes”. Como bom programador que todos nós
327
somos, sabemos que uma “constante” nada mais é do que um endereço de
memória que vai armazenar um determinador valor, que será único até o fim da
execução do programa. Mas, o que isso tem a ver com as telas da nossa
aplicação ? Vou explicar.
O diretório “mipmap”
328
somente imagens referentes ao ícone da nossa aplicação Android, que possa
se comportar em várias resoluções de tela.
O diretório “menu”
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".HelloActivity">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100" android:showAsAction="never" />
</menu>
Os itens de menu podem ser adicionados através do uso das tags específicas
do XML para esse propósito (veremos isso mais adiante).
329
(6)
(1)
(4)
(2)
(3)
(5)
Visão geral da ferramenta de desenvolvimento
Na indicação (4) temos uma seção chamada “Component Tree”. Nessa seção
podemos ver , de forma hierárquica, todos os componentes que estão
presentes na tela da nossa aplicação
330
Na indicação (5) podemos alternar entre o modo gráfico (“Design”, onde temos
a visualização da tela da aplicação) e o modo XML (“Text”, onde visualizamos o
código XML do arquivo, que corresponde a estrutura que forma a tela de nossa
aplicação).
331
Botão “Run” do Android Studio
332
imagem do sistema Android 4.0.3 ,mas, ainda não efetuamos nenhuma
configuração e criação de dispositivo).
Vamos nesse exato momento criar um dispositivo virtual que irá executar as
nossas aplicações Android. Para criarmos um dispositivo basta clicarmos no
botão (...) presente ao lado do campo “Android virtual device”, conforme indica
a figura a seguir :
333
Vamos clicar agora no botão “Create a virtual device”. Feito isso será aberta a
seguinte tela :
Escolhendo a categoria
334
Como modelo de smatphone utilizado para executar as nossas aplicações
selecione a opção “3.2 QVGA (ADP2)”,conforme indicado na figura abaixo :
Selecionado o modelo
Agora vamos clicar no botão “Next” para avançarmos para a próxima etapa,
conforme indica a próxima figura:
335
Virtual Device Configuration
Muito bem, nesta seção escolhemos o sistema Android que iremos utilizar , que
no caso será o que baixamos através do Android SDK (a versão 4.0.3 Ice
Cream Sandwish). Primeiramente, certifique-se de que a opção “Show
downloadable system images” ESTA DESMARCADA, se estiver marcada,
DESMARQUE (já que não iremos fazer nenhum donwload de imagem
nenhuma) :
336
Virtual Device Configuration
337
Dispositivo virtual criado
338
Selecionando o emulador
339
Emulador do Android em Execução
340
Emulador do Android em Execução
341
Bom, vamos fazer algumas modificações em nossa aplicação. Minimize o
emulador e vamos no projeto. Para começar vamos mudar o texto que está
sendo exibido na tela. Selecione o texto (componente TextView), conforme
demonstra a figura seguinte:
Componente selecionado
342
Para alterarmos o conteúdo do texto, devemos alterar a propriedade “text”
(conforme você pode ver na figura acima). Se você observar, o conteúdo que
está dentro dessa propriedade é “@string/hello_world”. Mas espere ai, o que
significa esse expressão se o conteúdo que está sendo exibido é uma frase ?
Essa expressão significa que o conteúdo exibido na tela está dentro de uma
“constante”.
O arquivo “strings.xml”
343
Constante criada
A guia “actitivy_hello.xml”
Agora vamos na propriedade “text” e em seguida clique no botão (...) que está
aparecendo ao lado do conteúdo da propriedade. Veja abaixo :
344
Alterando o conteúdo da propriedade
Observe que nessa caixa de diálogo temos todas as constantes que existem
dentro do arquivo “strings.xml”, incluindo a nossa constante “frase” que
345
acabamos de criar. Vamos selecionar a nossa constante e em seguida clique
no botão “OK”. O resultado você confere em seguida :
Conteúdo modificado
Aplicação em execução
347
Capitulo 13 Criando uma
aplicação básica no Android
N
o capítulo anterior nós demos nosso primeiros passos no
desenvolvimento com a plataforma Google Android usando a
ferramenta Android Studio. Agora, iremos construir uma aplicação
básica usando os componentes essenciais oferecidos pelo Android SDK.
Bom, mãos a obra. Crie um novo projeto no Android Studio indo no menu
“File/New Project”.
348
Caixa de diálogo – Create New Project
349
Vejamos como ficou ja figura seguinte :
Informações preenchidas
350
Projeto criado com sucesso
351
Paleta de componentes do Android – Em destaque
352
Arrastre e solte o componente
aqui.
(1)
353
Frase inserida na propriedade Text
Muito bem, agora vamos adicionar um componente do tipo campo de texto (ou
caixa de texto) do Android, conhecido como EditText (podemos dizer que sua
utilização é bastante similar ao método nextLine que aprendemos no Java).
354
Onde se encontra o componente EditText ?
355
Poxa, estou vendo vários componentes de campos dentro da seção “Text
Fields”. Qual deles é o componente EditText que você havia mencionado ?
Resposta : TODOS ELES.
356
Clique e MANTENHA O BOTÃO
Arrastre e solte o componente
DO MOUSE PRESSIONADO.
aqui.
Resultado :
Componente inserido
Muito bem. Agora , o que você precisa saber é que iremos trabalhar com esse
componente dentro do nosso código em Java (para obtermos os valores que
são digitados dentro dele, similar ao que fazíamos com o método nextDouble).
357
No Android, todos os componentes possuem uma propriedade chamada “Id”,
cuja finalidade é definirmos um nome para o mesmo, de forma a facilitar a sua
identificação, caso seja necessário manipula-lo via programação.
Vamos definir uma “Id” para o nosso componente que adicionamos. Para isso,
basta dar um duplo clique sobre o componente. Feito isso, será aberta uma
pequena caixa de diálogo a seguir :
Caixa de diálogo
No campo “Id” vamos digitar uma nova “Id” para o nosso componente, que vai
se chamar “edtemperatura” (sem aspas, é claro). Veja o resultado :
358
Agora vamos adicionar um componente do tipo Button, onde nele iremos clicar
para que o mesmo realize a conversão e mostre o resultado na tela (através de
uma caixa de diálogo, que iremos aprender a utiliza-la logo mais).
Vejamos o resultado :
359
Com o componente selecionado vamos guia “Properties” e expanda a
propriedade “Layout Parameters”, conforme podemos conferir na figura abaixo :
360
OBS : Na propriedade layout:width também temos a opção “fill_parent”, que
praticamente tem o mesmo efeito do “match_parent”.
Agora vamos atribuir uma “Id” ao nosso componente Button (da forma como já
foi mostrado). O nome do nosso componente será “btconverter” (sem aspas, é
claro).
A tela que visualizamos e que acabamos de construir nada mais é do que uma
estrutura baseada na linguagem XML. O que seria esse tal de XML ? Esse
XML (Extensive Markup Language) nada mais é do que uma linguagem de
marcação, baseada em “tags” (rótulos), onde cada uma delas define um
componente a ser exibido, uma propriedade a ser aplicada e etc.
Vamos ver agora o que existe “por trás” dessa tela que acabamos de
desenvolver.
361
Clique na guia “Text”, conforme podemos ver na figura abaixo :
362
Código XML da tela da aplicação
Que código “louco” é esse todo colorido que estamos acabando de ver ? Ah,
esse é o código XML , que é responsável por gerar aquela tela “bonita” que
acabamos de construir no nosso projeto.
Nas figuras a seguir, vamos acompanhar e descobrir o que cada código (“tags”)
do XML representa la na tela de nossa aplicação.
363
A estrutura RelativeLayout representa a tela onde os
componentes são inseridos (a nossa tela branca, conforme
indicação da seta abaixo)
364
A estrutura TextView representa a mensagem que
escrevemos na tela da nossa aplicação (a frase “Digite a
temperatura em Celsius), conforme a seta abaixo :
365
A estrutura EditText representa o campo onde iremos
digitar a nossa temperatura,conforme mostra a seta abaixo :
366
A estrutura Button representa aquele botão que iremos
apertar para que a temperatura seja convertida :
Entendeu melhor agora como a coisa funciona ? Com certeza que sim.
Agora vamos voltar para o modo gráfico, clicando na guia “Design”, conforme
mostra a figura a seguir :
367
Selecionando o modo Design
Uma forma que uso bastante para visualizar a classe principal da aplicação e
seguindo os seguintes passos abaixo , conforme mostra as imagens :
368
Clique no local indicado e selecione “Open ConverteTemperatura”, conforme é
mostrado na figura abaixo :
369
Agora sim, chegou o momento de colocarmos tudo o que aprendemos na
prática com Java agora o Android.
370
Pacotes declarados
Atributos declarados
371
Agora dentro do método onCreate vamos escrever as seguinte linhas de
código destacadas abaixo :
Instruções inseridas
R.id.<nome do componente>
372
Nome do componente Como ele é referenciado no código Java
(Na tela do dispositivo) (usando o findViewById)
edtemperatura R.id.edtemperatura
btconverter R.id.btconverter
btsalvar R.id.btsalvar
Na instrução a seguir :
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_converte_temperatura);
btconverter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double tempcelsius =
Double.parseDouble(edtemperatura.getText().toString());
}
});
373
O código que inserimos aparentemente parece um pouco “complexo”, mas irei
explicar para você. Observe que estamos executando um método chamado
setOnClickListener :
btconverter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
:
btconverter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double tempcelsius =
Double.parseDouble(edtemperatura.getText().toString());
}
});
double tempcelsius =
Double.parseDouble(edtemperatura.getText().toString());
374
A conversão torna-se obrigatória , pois, mesmo que a gente digite um número
dentro da caixa de texto, ele estará no formato texto, sendo necessário a sua
conversão para o formato numérico, caso o valor que estiver dentro da caixa
precisar passar por alguma operação aritmética.
btconverter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double tempcelsius =
Double.parseDouble(edtemperatura.getText().toString());
dialogo.setTitle("Aviso");
dialogo.setMessage("A temperatura em Fahrenheit é " +
tempfahrenheit);
dialogo.setNeutralButton("OK", null);
dialogo.show();
});
375
Na próxima instrução:
dialogo.setTitle("Aviso");
Na instrução seguinte :
dialogo.setNeutralButton("OK", null);
dialogo.show();
376
Aplicação em execução
Temperatura digitada
377
Em seguida vamos clicar no botão “Converter temperatura”, e teremos o
seguinte resultado :
378
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_converte_temperatura);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_converte_temperatura);
setContentView(R.layout.activity_converte_temperatura);
379
protected void onCreate(Bundle savedInstanceState) {
:
btconverter = (Button) findViewById(R.id.btconverter);
btconverter.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
double tempcelsius =
Double.parseDouble(edtemperatura.getText().
toString());
dialogo.setTitle("Aviso");
dialogo.setMessage("A temperatura em Fahrenheit é
" + tempfahrenheit);
dialogo.setNeutralButton("OK", null);
dialogo.show();
}
});
}
380
Aplicação em execução. Agora vamos digitar o
valor correspondente a temperatura no campo
indicado pela seta abaixo :
381
Depois de digitada a temperatura desejada, vamos clicar no
botão “Converter temperatura”.
double tempcelsius =
Double.parseDouble(edtemperatura.getText().
toString());
double tempfahrenheit = tempcelsius * 1.8 + 32;
382
A execução do bloco de código dentro do método onClick irá
nos mostrar o seguinte resultado :
383
Capitulo 14 Conhecendo os
componentes do Android
384
A paleta de componentes
Nesta seção estão disponíveis os componentes mais básicos que podem ser
utilizados em uma aplicação Android, são eles:
385
está disponível em quatro estilos (Plain , Large, Medium e Small). Veja os
ícones desse componente na imagem seguinte:
CheckBox : Esse componente funciona como uma opção, onde nele podemos
marcá-lo e desmarcá-lo. Veja o ícone do componente abaixo:
386
Ícone do componente Spinner
387
imagens suportados por esse componente são : PNG, JPEG, BMP, GIF. Veja o
ícone desse componente abaixo:
Gallery : Esse componente funciona como uma galeria de imagens, onde nele
podemos adicionar várias imagens e ao mesmo, visualiza-las. Veja o ícone
desse componente abaixo:
388
Password: Esse modelo de caixa de texto permite a digitação de senhas e
está disponível tanto na versão alfanumérica quanto na numérica (Numeric).
Veja os ícones de componente abaixo:
Multiline Text : Esse modelo de caixa de texto permite várias linhas de texto,
de acordo com a nossa necessidade. Veja o ícone desse componente abaixo:
389
Nesta seção estão disponíveis estruturas de layouts que podemos utilizar em
nossas aplicações para organizar a disponibilidade dos componentes dentro da
tela, no dispositivo. Vejamos esses componentes:
390
4.1.4) A seção “Containers”
ListView : Esse componente funciona como uma lista onde nele podemos
adicionar itens e visualizar os mesmos (conhecido em algumas ferramentas de
desenvolvimento como “ListBox”). Vejamos o ícone desse componente:
391
TimePicker : Esse componente é muito útil , nele podemos estipular ou definir
uma determinada hora, de acordo com a nossa necessidade. Veja o ícone
desse componente em seguida:
392
Ícone do componente DigitalClock
393
Capitulo 15 Desenvolvendo
mais aplicações para Android
C
om base do que já foi visto no capítulo anterior, onde tivemos a
oportunidade de conhecermos os componentes que formam uma
aplicação Android, vamos agora dar inicio a construção de um conjunto
de aplicações para Android para enriquecer o nosso conhecimento à respeito
sobre o desenvolvimento de aplicações para a plataforma, utilizando alguns
dos componentes citados .
394
Após criarmos o nosso projeto vamos selecionar o componente TextView
(escrito com a frase “Hello World”) para alterarmos a propriedade Text. Na
propriedade text vamos digitar a seguinte frase : “Bem vindo a lanchonete
ServeTudoMix, aqui você encontra as mais diversas variedades.”
Aplicação em desenvolvimento
Propriedade Valor
text Confira o código dos produtos
textSize 16sp
Confira o resultado :
395
Aplicação em desenvolvimento
Expandindo as propriedades
396
Aplicação em desenvolvimento – O texto se afasta
TextView
Propriedade Valor
text 1001 – Cachorro Quente ($ 5,00)
textSize 16sp
layout:margin (top) 10dp
TextView
Propriedade Valor
text 3001 – X – Tudo (R$ 10,00)
textSize 16sp
layout:margin (top) 10dp
397
Aplicação em desenvolvimento:
TextView
Propriedade Valor
text Informe o código
textSize 16sp
textColor #0000ff
layout:margin (top) 15dp
Propriedade Valor
id edcodigo
layout:width match_parent
398
TextView
Propriedade Valor
text Quantidade
textSize 16sp
textColor #0000ff
layout:margin (top) 15dp
Propriedade Valor
id edquantidade
layout:width match_parent
Button
Propriedade Valor
id btcalcular
text Calcular Preço
layout:width match_parent
399
Aplicação em desenvolvimento
Como já havia falado, toda tela da aplicação consiste em um código XML certo
? Confira agora o código XML (que é gerado quando vamos inserindo os
componentes) que produz toda a tela da figura acima :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".LanchoneteActivity">
400
android:textSize="16sp"
android:id="@+id/textView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Confira código os produtos"
android:id="@+id/textView2"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:textSize="16sp"
android:layout_marginTop="10dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1001 – Cachorro Quente ($ 5,00)"
android:id="@+id/textView3"
android:layout_below="@+id/textView2"
android:layout_alignParentLeft="true"
android:textSize="16sp"
android:layout_marginTop="10dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3001 – X – Tudo (R$ 10,00)"
android:id="@+id/textView4"
android:layout_below="@+id/textView3"
android:layout_alignParentLeft="true"
android:textSize="16sp"
android:layout_marginTop="10dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Informe o código"
android:id="@+id/textView5"
android:layout_below="@+id/textView4"
android:layout_alignParentLeft="true"
android:singleLine="true"
android:textSize="16sp"
android:textColor="#0000ff"
android:paddingTop="15dp" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edcodigo"
android:layout_below="@+id/textView5"
android:layout_alignParentLeft="true" />
<TextView
401
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Quantidade"
android:id="@+id/textView6"
android:layout_below="@+id/edcodigo"
android:layout_alignParentLeft="true"
android:textSize="16sp"
android:singleLine="false"
android:paddingTop="15dp"
android:textColor="#0000ff" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edquantidade"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Calcular"
android:id="@+id/btcalcular"
android:layout_below="@+id/edquantidade"
android:layout_alignParentLeft="true" />
</RelativeLayout>
package android.app.aplicacaolanchonete;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.*;
import android.view.*;
import android.app.*;
Button btcalcular;
@Override
402
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lanchonete);
btcalcular.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int codigo =
Integer.parseInt(edcodigo.getText().toString());
int quantidade =
Integer.parseInt(edquantidade.getText().toString());
int total = 0;
}
}
});
}
dialogo.setTitle("Aviso");
dialogo.setMessage(mensagem);
dialogo.setNeutralButton("OK", null);
dialogo.show();
}
403
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
//present.
getMenuInflater().inflate(R.menu.lanchonete, menu);
return true;
}
Aplicação em execução
404
if((codigo == 1001) || (codigo == 3001))
{
if(codigo == 1001)
total = 5 * quantidade;
else
total = 10 * quantidade;
MostrarMensagem("O preço total é R$ " + total +
",00");
}
405
Layout Name : activity_compras
Após a criação do projeto, exclua o título “Hello World” da tela e sem seguida
coloque os seguintes itens, na sequencia abaixo :
TextView
Propriedade Valor
text Escolha seu produto
textSize 16sp
padding (bottom) 15dp
CheckBox
Propriedade Valor
text Arroz (R$ 2,69)
id chkarroz
CheckBox
Propriedade Valor
text Leite (R$ 5,00)
id chkleite
CheckBox
Propriedade Valor
text Carne (R$ 9,70)
id chkcarne
406
CheckBox
Propriedade Valor
text Feijão (R$ 2,30)
id chkfeijao
Button
Propriedade Valor
text Total das compras
id bttotal
layout:width match_parent
407
Aplicação em desenvolvimento
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".ComprasActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Escolha o seu produto"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:singleLine="false"
android:textSize="16dp"
android:paddingBottom="15dp" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Arroz (R$ 2,69)"
android:id="@+id/chkarroz"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Leite (R$ 5,00)"
android:id="@+id/chkleite"
android:layout_below="@+id/chkarroz"
android:layout_alignParentLeft="true"
android:checked="false" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Carne (R$ 9,70)"
android:id="@+id/chkcarne"
android:layout_below="@+id/chkleite"
android:layout_alignParentLeft="true"
android:checked="false" />
408
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Feijão (R$ 2,30)"
android:id="@+id/chkfeijao"
android:layout_below="@+id/chkcarne"
android:layout_alignParentLeft="true"
android:checked="false" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Total das compras"
android:id="@+id/bttotal"
android:layout_below="@+id/chkfeijao"
android:layout_alignParentLeft="true" />
</RelativeLayout>
package android.app.aplicacaocompras;
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.*;
import android.view.*;
import android.app.*;
Button bttotal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_compras);
409
bttotal = (Button) findViewById(R.id.bttotal);
bttotal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
double total = 0;
if (chkarroz.isChecked())
total += 2.69;
if (chkleite.isChecked())
total += 5.00;
if (chkcarne.isChecked())
total += 9.7;
if (chkfeijao.isChecked())
total += 2.30;
dialogo.setTitle("Aviso");
dialogo.setMessage("Valor total da compra : R$ "
+ df.format(total));
dialogo.setNeutralButton("OK", null);
dialogo.show();
}
});
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
//present.
getMenuInflater().inflate(R.menu.compras, menu);
return true;
}
Dentro do código que digitamos dentro do método onClick (que será disparado
toda vez que o botão for clicado) existem algumas expressões na linguagem
410
Java que preciso explicar como funciona (embora seja até fácil de se
compreender).
Em algumas linhas de código do onClick encontramos a seguinte expressão :
total += 2.69;
Talvez você deva estar se perguntando : O que é esse “+=” (sinal de “mais”
seguido de igual juntos) ? O que está ocorrendo nessa linha nada mais é do
que um incremento, ou seja :
Aplicação em execução
411
Está aplicação é bastante simples, basta selecionar os itens e em seguida
clicar no botão “Total das compras” para que você possa o valor total de suas
compras.
Se o número de dias para ficar com o filme for acima de 3, aplicar 15% de
desconto no valor do preço do aluguel.
Se o usuário que for alugar filme, tiver cadastro na locadora, aplicar 10%
de desconto no valor do aluguel.
412
funciona como uma lista onde podemos cadastrar valores e também
visualizarmos para selecionar, agregado à um componente do tipo TextView.
Vamos criar então a nossa aplicação. Eis aqui os dados do nosso projeto :
TextView
Propriedade Valor
Bem vindo a locadora FilmeMax, onde
você encontra todos os
text
filmes (lançamentos e antigos) para
a sua escolha
textSize 16sp
padding (bottom) 10dp
TextView
Propriedade Valor
text Escolha um filme abaixo:
textSize 16sp
padding (bottom) 10dp
413
Spinner
Propriedade Valor
id spnfilmes
layout:width match_parent
TextView
Propriedade Valor
text Já é cadastro ?
textSize 16sp
padding (bottom) 10dp
Aplicação em desenvolvimento
414
Aplicação em desenvolvimento
Por padrão, o componente RadioGroup (na Android Studio que estou usando)
fica vazio. Agora, vamos adicionar dentro desse RadioGroup dois
componentes do tipo RadioButton, um embaixo do outro, como podemos ver
na figura seguinte :
415
Agora para cada RadioButton, definir as seguintes propriedades abaixo :
RadioButton (radioButton)
Propriedade Valor
id rbtsim
text Sim
checked (marcar opção)
RadioButton (radioButton2)
Propriedade Valor
id rbtnao
text Não
Eis o resultado:
Aplicação em desenvolvimento
RadioGroup
Propriedade Valor
layout:height wrap_content
416
orientation horizontal
Agora vamos continuar o desenvolvimento da nossa aplicação. Vamos inserir
os seguintes componentes na sequencia:
TextView
Propriedade Valor
text Dias :
textSize 16sp
padding (top) 10dp
EditText (Number)
Propriedade Valor
id eddias
Button
Propriedade Valor
id bttotal
text Total
layout:width match_parent
Após efetuar o que se foi pedido, teremos o seguinte resultado que podemos
conferir na figura a seguir:
417
Aplicação em desenvolvimento
Muito bem, acabamos de construir a nossa interface, porém, está faltando uma
coisa : colocar a lista de filmes dentro do componente Spinner. A lista dos
filmes que iremos selecionar no componentes estarão armazenadas dentro do
um arquivo XML, que está dentro do diretório “values” (o arquivo “strings.xml”).
418
Arquivo “strings.xml”
<string-array name="listafilmes">
<item >Transformers : A era da extinção</item>
<item >Capitão América : Soldado Inveral</item>
<item >Divergente</item>
<item >Os Vingadores</item>
<item >Thor : Mundo Sombrio</item>
<item >Sem Escalas</item>
</string-array>
</resources>
419
Agora vamos voltar para o nosso projeto que estávamos desenvolvendo. Dê
um clique no componente Spínner para selecionarmos e em seguida vamos
alterar a seguinte propriedade abaixo:
Spinner
Propriedade Valor
entries @array/listafilmes
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".LocadoraActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bem vindo a locadora FilmeMax, onde você
encontra todos os filmes (lançamentos e antigos)
para a sua escolha"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:textSize="16sp"
android:paddingBottom="10dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Escolha um filme abaixo:"
android:id="@+id/textView2"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:textSize="16sp"
android:paddingBottom="10dp" />
420
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/spnfilmes"
android:layout_below="@+id/textView2"
android:layout_alignParentLeft="true"
android:entries="@array/listafilmes" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Já é cadastrado ?"
android:id="@+id/textView3"
android:layout_below="@+id/spnfilmes"
android:layout_alignParentLeft="true"
android:textSize="16sp"
android:paddingBottom="15dp" />
<RadioGroup
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView3"
android:layout_alignParentLeft="true"
android:orientation="horizontal"
android:id="@+id/radioGroup">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sim"
android:id="@+id/rbtsim"
android:checked="true" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Não"
android:id="@+id/rbtnao"
android:checked="false" />
</RadioGroup>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dias"
android:id="@+id/textView4"
android:paddingTop="10dp"
android:layout_below="@+id/radioGroup"
android:layout_alignParentLeft="true"
android:textSize="16sp" />
<EditText
android:layout_width="match_parent"
421
android:layout_height="wrap_content"
android:id="@+id/eddias"
android:layout_below="@+id/textView4"
android:layout_alignParentLeft="true" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Total"
android:id="@+id/bttotal"
android:layout_below="@+id/eddias"
android:layout_alignParentLeft="true" />
</RelativeLayout>
package android.app.aplicacaolocadora;
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
Spinner spnfilmes;
RadioButton rbtsim;
EditText eddias;
Button bttotal;
int indexFilme;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_locadora);
indexFilme = 0;
422
bttotal = (Button) findViewById(R.id.bttotal);
bttotal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double preco_filme;
if(indexFilme < 3)
preco_filme = 5.00;
else
preco_filme = 3.50;
if(rbtsim.isChecked())
total = total - (total * 0.1);
if(dias > 3)
total = total - (total * 0.15);
dialogo.setTitle("Aviso");
dialogo.setNeutralButton("OK", null);
dialogo.show();
}
});
spnfilmes.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
indexFilme = position;
423
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
});
}
spnfilmes.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
indexFilme = position;
}
if(rbtsim.isChecked())
total = total - (total * 0.1);
424
Que verifica se se a opção “sim” (referente a pergunta do cadastrado do
usuário) está marcada (através do método isChecked, que possui essa
finalidade).
Aplicação em execução
425
Como será a nossa aplicação ?
426
Diretório selecionado
427
Arquivos copiados
Para o desenvolvimento deste projeto irei trabalhar com a Skin “Nexus S” (cuja
resolução é 480x800 hdpi). Para alterar a Skin basta seguir o procedimento a
figura a seguir:
428
Mudando a Skin
RelativeLayout
Propriedade Valor
padding (left) (DEIXAR EM BRANCO)
padding (top) (DEIXAR EM BRANCO)
padding (right) (DEIXAR EM BRANCO)
padding (bottom) (DEIXAR EM BRANCO)
429
“Properties” para encontrarmos a propriedade “src”, conforme é indicado na
figura a seguir:
Clique no botão reticências (...) ao lado da propriedades. Feito isso será aberta
a seguinte caixa de diálogo a seguir :
Nessa caixa de diálogo vamos escolher a imagem que queremos que seja
exibida no componente. Vamos escolher a imagem “top_titulo_adorocinema” e
em seguida clique em “OK”. Vejamos o resultado na figura abaixo :
430
Caixa de diálogo – Resources
Aplicação em desenvolvimento
431
Agora, vamos inserir o seguintes componentes na sequencia :
Propriedade Valor
text Escolha um filme
Spinner
Propriedade Valor
id spnfilmes
layout:width match_parent
Vejamos o resultado :
Aplicação em desenvolvimento
432
Aplicação em desenvolvimento
ImageView
Propriedade Valor
id imgBanner
TextView
Propriedade Valor
id txtnomefilme
text Transformers : A era da extinção
Button
Propriedade Valor
id btsinopse
text Ver sinopse do filme
layout:width match_parent
433
Eis o resultado :
Aplicação em desenvolvimento
<string-array name="nomedosfilmes">
<item >Transformers : A era da extinção</item>
<item >Capitão América : Soldado Inveral</item>
<item >Divergente</item>
<item >Os Vingadores</item>
<item >Thor : Mundo Sombrio</item>
<item >Sem Escalas</item>
</string-array>
434
<string-array name="sinopsedosfilmes">
<item>Após o confronto entre Autobots e Decepticons,todos os robôs
desaparecem. Cade (Mark Wahlberg) encontra um caminhão
abandonado, ele jamais poderia imaginar que o veículo é na
verdade Optimus Prime, o líder dos Autobots. Muito menos que,
ao ajudar a trazê-lo de volta à vida, Cade e sua filha Tessa
entrariam na mira das autoridades americanas.
</item>
</resources>
435
Agora vamos voltar para o nosso projeto, e no componente Spinner vamos
alterar a seguinte propriedade abaixo:
Spinner
Propriedade Valor
entries @array/nomedosfilmes
package android.app.aplicacaoadorocinema;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.res.Resources;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
ImageView imgBanner;
Spinner spnfilmes;
Button btsinopse;
TextView txtnomefilme;
int indexFilme = 0;
String[] sinopsedosfilmes;
String[] nomedosfilmes ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
436
setContentView(R.layout.activity_aplicacao);
spnfilmes = (Spinner) findViewById(R.id.spnfilmes);
imgBanner = (ImageView) findViewById(R.id.imgBanner);
txtnomefilme = (TextView) findViewById(R.id.txtnomefilme);
btsinopse = (Button) findViewById(R.id.btsinopse);
Resources res = getResources();
sinopsedosfilmes = res.getStringArray(R.array.sinopsedosfilmes);
nomedosfilmes = res.getStringArray(R.array.nomedosfilmes);
btsinopse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
spnfilmes.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
indexFilme = position;
switch (indexFilme) {
case 0: imgBanner.setImageResource
(R.drawable.banner_filme_transformers);break;
case 1: imgBanner.setImageResource
(R.drawable.banner_filme_capitao_america);break;
case 2: imgBanner.setImageResource
(R.drawable.banner_filme_divergente);break;
case 3: imgBanner.setImageResource
(R.drawable.banner_filme_os_vingadores);break;
case 4: imgBanner.setImageResource
(R.drawable.banner_filme_thor);break;
case 5: imgBanner.setImageResource
(R.drawable.banner_filme_sem_escalas);break;
}
txtnomefilme.setText(nomedosfilmes[indexFilme]);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
437
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
//present.
getMenuInflater().inflate(R.menu.aplicacao, menu);
return true;
}
Aplicação em execução
438
É responsável por carregar dentro do objeto res todos os recursos necessários
que serão utilizados para gerenciar o conteúdo do arquivo “strings.xml” (além
de outros recursos a mais) através do método getResources.
Na instrução seguinte :
sinopsedosfilmes = res.getStringArray(R.array.sinopsedosfilmes);
nomedosfilmes = res.getStringArray(R.array.nomedosfilmes);
switch (indexFilme) {
case 0: imgBanner.setImageResource
(R.drawable.banner_filme_transformers);break;
case 1: imgBanner.setImageResource
(R.drawable.banner_filme_capitao_america);break;
case 2: imgBanner.setImageResource
(R.drawable.banner_filme_divergente);break;
case 3: imgBanner.setImageResource
(R.drawable.banner_filme_os_vingadores);break;
case 4: imgBanner.setImageResource
(R.drawable.banner_filme_thor);break;
case 5: imgBanner.setImageResource
(R.drawable.banner_filme_sem_escalas);break;
439
Que é responsável por carregar a imagem (banner) do filme selecionado dentro
do componente ImageView, através do método setImageResource, de acordo
com o índice do filme.
R.drawable.<nome da imagem>
440
Feito isso arraste um componente ImageView para dentro da tela, e em
seguida defina para a propriedade src a imagem “top_titulo_mega_sena”
(conforme já foi mostrado). Vejamos o resultado :
Aplicação em desenvolvimento
441
Eis o resultado :
Aplicação em desenvolvimento
LinearLayout
Propriedade Valor
background #00A853
layout:height wrap_content
442
Agora vamos inserir um componente TextView (Medium Text) dentro da
estrutura LinearLayout que acabamos de inserir. Vejamos a operação sendo
realizada na figura a seguir :
Propriedade Valor
textColor #ffffff
Gostaria de um palpite para seu jogo?
text Clique no botão abaixo para gerar um
palpite para você. Boa sorte.
padding (top) 10dp
padding (bottom) 10dp
443
Vejamos o resultado na figura seguinte :
Aplicação em desenvolvimento
LinearLayout
Propriedade Valor
background #E0E0E0
gravity center
layout:height wrap_content
Propriedade Valor
id txtnum1
text 00
textColor #02A650
444
padding (top) 20dp
padding (bottom) 20dp
padding (left) 10dp
padding (right) 10dp
Propriedade Valor
id txtnum2
text 00
textColor #02A650
padding (top) 20dp
padding (bottom) 20dp
padding (left) 10dp
padding (right) 10dp
Propriedade Valor
id txtnum3
text 00
textColor #02A650
padding (top) 20dp
padding (bottom) 20dp
padding (left) 10dp
padding (right) 10dp
Propriedade Valor
id txtnum4
text 00
textColor #02A650
padding (top) 20dp
padding (bottom) 20dp
padding (left) 10dp
padding (right) 10dp
445
TextView (Large Text)
Propriedade Valor
id txtnum5
text 00
textColor #02A650
padding (top) 20dp
padding (bottom) 20dp
padding (left) 10dp
padding (right) 10dp
Propriedade Valor
id txtnum6
text 00
textColor #02A650
padding (top) 20dp
padding (bottom) 20dp
padding (left) 10dp
padding (right) 10dp
446
:
Aplicação em desenvolvimento
Button
Propriedade Valor
id btgerarpalpite
text Gerar palpite
layout:width match_parent
447
Aplicação em desenvolvimento
RelativeLayout
448
Vejamos o código XML da tela da nossa aplicação :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".MegaSenaActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:src="@drawable/top_titulo_mega_sena" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/imageView"
android:layout_alignParentLeft="true"
android:background="#00A853"
android:id="@+id/linearLayout">
449
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Gostaria de um palpite para seu jogo?
Clique no botão abaixo para gerar um palpite
para você. Boa sorte."
android:id="@+id/textView"
android:textColor="#ffffff"
android:paddingTop="10dp"
android:paddingBottom="10dp" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout"
android:layout_alignParentLeft="true"
android:background="#E0E0E0"
android:gravity="center"
android:id="@+id/linearLayout2">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="00"
android:id="@+id/txtnum1"
android:textColor="#02A650"
android:paddingLeft="10dp"
android:paddingTop="20dp"
android:paddingRight="10dp"
android:paddingBottom="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="00"
android:id="@+id/txtnum2"
android:textColor="#02A650"
android:paddingLeft="10dp"
android:paddingTop="20dp"
android:paddingRight="10dp"
android:paddingBottom="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="00"
android:id="@+id/txtnum3"
android:textColor="#02A650"
android:paddingLeft="10dp"
450
android:paddingTop="20dp"
android:paddingRight="10dp"
android:paddingBottom="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="00"
android:id="@+id/txtnum4"
android:textColor="#02A650"
android:paddingLeft="10dp"
android:paddingTop="20dp"
android:paddingRight="10dp"
android:paddingBottom="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="00"
android:id="@+id/txtnum5"
android:textColor="#02A650"
android:paddingLeft="10dp"
android:paddingTop="20dp"
android:paddingRight="10dp"
android:paddingBottom="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="00"
android:id="@+id/txtnum6"
android:textColor="#02A650"
android:paddingLeft="10dp"
android:paddingTop="20dp"
android:paddingRight="10dp"
android:paddingBottom="20dp" />
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Gerar palpite"
android:id="@+id/btgerarpalpite"
android:layout_below="@+id/linearLayout2"
android:layout_alignParentLeft="true" />
</RelativeLayout>
451
Agora na classe MegaSenaActivity (o arquivo “MegaSenaActivity.java”) vamos
digitar o seguinte código abaixo:
package android.app.aplicacaomegasena;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
Button btgerarplapite;
TextView txtnum1, txtnum2, txtnum3, txtnum4, txtnum5, txtnum6;
ArrayList<Integer> aNumerosGerados;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mega_sena);
btgerarplapite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int numero_gerado;
String str_numero_gerado;
aNumerosGerados.clear();
452
while(aNumerosGerados.indexOf(numero_gerado) != -1)
{
//Sorteia um novo numero aleatório, diferente
numero_gerado = (int) Math.round(Math.random() *
59) + 1;
}
aNumerosGerados.add(numero_gerado);
453
Aplicação em execução
ArrayList<Integer> aNumerosGerados;
A instrução :
454
No loop de repetição abaixo :
while(aNumerosGerados.indexOf(numero_gerado) != -1)
{
//Sorteia um novo numero aleatório, diferente
numero_gerado = (int) Math.round(Math.random() *
59) + 1;
}
aNumerosGerados.add(numero_gerado);
Na próxima instrução :
455
Na estrutura switch/case abaixo :
switch (indice) {
case 1: txtnum1.setText(str_numero_gerado);break;
case 2: txtnum2.setText(str_numero_gerado);break;
case 3: txtnum3.setText(str_numero_gerado);break;
case 4: txtnum4.setText(str_numero_gerado);break;
case 5: txtnum5.setText(str_numero_gerado);break;
case 6: txtnum6.setText(str_numero_gerado);break;
a) Internet Explorer
b) Firefox
c) Chrome
d) Outros
2) Qual rede social que você mais utiliza o seu dia a dia ?
a) Facebook
b) Twitter
c) Google+
d) Outros
456
3) Qual aplicativo para Bate-Papo para Android que você mais usa ?
a) Whatsapp
b) Messenger
c) Skype
d) Outros
Cada pergunta feita para o usuário estará em uma tela da aplicação, ou seja,
se iremos realizar três perguntas para o usuário estará em uma tela. Haverá
também uma quarta tela onde nela serão mostradas as perguntas com as suas
devidas respostas , juntamente com uma mensagem de agradecimento por
participar da pesquisa de opinião.
Bom, vamos criar agora o nosso projeto onde iremos construir a nossa
aplicação de pesquisa de opinião. Segue os dados do projeto :
Para esta aplicação iremos trabalhar também com a Skin do “Nexus S”. Troque
a Skin conforme já foi mostrado.
457
Para facilitar (e acelerar) a construção da nossa tela, vamos abrir a guia
referente ao código XML da tela (referente ao arquivo “tela_pergunta_1.xml”)
para substituirmos o código existente pelo seguinte código abaixo :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fundo_tela_pesquisa_opiniao"
android:orientation="vertical"
tools:context=".PesquisaOpiniaoActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/top_titulo_pesquisa_opiniao" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1) Qual navegador de Internet que você mais usa ?"
android:textAppearance="?android:attr/textAppearanceMedium" />
<RadioGroup
android:id="@+id/rgropcoes_pergunta_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/rbtopcao1_p1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Internet Explorer" />
<RadioButton
android:id="@+id/rbtopcao2_p1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Firefox" />
<RadioButton
android:id="@+id/rbtopcao3_p1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Chrome" />
<RadioButton
android:id="@+id/rbtopcao4_p1"
458
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Outros" />
</RadioGroup>
<Button
android:id="@+id/bt_pergunta2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ir para segunda pergunta" />
</LinearLayout>
Aplicação em desenvolvimento
459
Conforme havia falado, nossa aplicação será formada por 4 telas diferentes, a
primeira tela já foi desenvolvida. Agora, como fazer para adicionar mais uma
tela a nossa aplicação :
Para adicionarmos mais uma tela em nosso projeto, basta clicar com botão
direito sobre a pasta “layout” (a mesma pasta onde se encontra o arquivo
“tela_pergunta_1.xml”), e em seguida selecionar “New/Layout resource file”.
Veja na figura abaixo:
Feito isso será aberta a caixa de diálogo, conforme mostra a figura seguinte :
460
Caixa de diálogo – New Android XML File
No campo “File name” vamos digitar o nome da nossa tela que se chamada
“tela_pergunta_2” (sem aspas e sem a extensão XML, pois a mesma já fica
implícita). Na seção “Root Element” certifique-se se a opção “LinearLayout”
está marcada. Depois disso basta clicar no botão “Finish” para gerarmos a
nossa tela.
Veja verá que surgirá uma nova tela da aplicação Android toda EM BRANCO.
Agora vamos na guia referente ao código XML da segunda tela da nossa
aplicação para digitarmos a seguinte estrutura a seguir:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fundo_tela_pesquisa_opiniao"
android:orientation="vertical"
tools:context=".PesquisaOpiniaoActivity" >
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/top_titulo_pesquisa_opiniao" />
461
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2) Qual rede social que você mais utiliza o seu
dia a dia ?"
android:textAppearance="?android:attr/textAppearanceMedium" />
<RadioGroup
android:id="@+id/rgropcoes_pergunta_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/rbtopcao1_p2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Facebook" />
<RadioButton
android:id="@+id/rbtopcao2_p2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Twitter" />
<RadioButton
android:id="@+id/rbtopcao3_p2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Google+" />
<RadioButton
android:id="@+id/rbtopcao4_p2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Outros" />
</RadioGroup>
<Button
android:id="@+id/bt_pergunta3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ir para terceira pergunta" />
</LinearLayout>
Eis o resultado :
462
Segunda tela da nossa aplicação
Agora, de acordo como já foi mostrado, vamos criar mais uma tela para a
nossa aplicação (o arquivo “tela_pergunta_3.xml”). O arquivo referente à tela
da nossa aplicação terá o seguinte código a seguir:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fundo_tela_pesquisa_opiniao"
android:orientation="vertical"
tools:context=".PesquisaOpiniaoActivity" >
<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/top_titulo_pesquisa_opiniao" />
463
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3) Qual aplicativo para Bate-Papo para Android que você
mais usa ?"
android:textAppearance="?android:attr/textAppearanceMedium" />
<RadioGroup
android:id="@+id/rgropcoes_pergunta_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/rbtopcao1_p3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="WhatsApp" />
<RadioButton
android:id="@+id/rbtopcao2_p3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Messenger" />
<RadioButton
android:id="@+id/rbtopcao3_p3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Skype" />
<RadioButton
android:id="@+id/rbtopcao4_p3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Outros" />
</RadioGroup>
<Button
android:id="@+id/btterminarpesquisa"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Terminar pesquisa" />
</LinearLayout>
464
Eis o resultado:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fundo_tela_pesquisa_opiniao"
android:orientation="vertical"
tools:context=".PesquisaOpiniaoActivity" >
<ImageView
android:id="@+id/imageView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/top_titulo_pesquisa_opiniao_final" />
465
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="OBRIGADO PELA PARTICIPAÇÃO!"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1) Qual navegador de Internet que você mais usa ?"
android:textColor="#000000"
android:textSize="16sp" />
<TextView
android:id="@+id/txtresposta1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RESPOSTA"
android:textColor="#0026FF"
android:textSize="16sp" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2) Qual rede social que você mais utiliza o seu dia a
dia ?"
android:textColor="#000000"
android:textSize="16sp" />
<TextView
android:id="@+id/txtresposta2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RESPOSTA"
android:textColor="#0026FF"
android:textSize="16sp" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3) Qual aplicativo para Bate-Papo para Android que você
mais usa ?"
android:textColor="#000000"
android:textSize="16sp" />
<TextView
466
android:id="@+id/txtresposta3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="RESPOSTA"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#0026FF"
android:textSize="16sp" />
<Button
android:id="@+id/btfecharaplicacao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Finalizar aplicação" />
</LinearLayout>
Eis o resultado :
467
Agora dentro do nosso pacote “android.app.aplicacaopesquisaopiniao”
(presente dentro da pasta “java”), vamos criar uma classe chamada Resposta (
sem método main, até porque que no Android não trabalha e nem usa esse
método). Para criarmos uma classe no Android Studio basta clicarmos com o
botão direito sobre o nome do pacote citado e selecionar “New” / “Java Class”.
Veja na figura a seguir:
No campo “Name” vamos digitar o nome da nossa classe, que irá se chamar
Resposta. Feito isso clique em “OK” para que a classe possa ser criada.
package android.app.aplicacaopesquisaopiniao;
468
public String resposta2;
package com.example.aplicacaopesquisaopiniao;
import android.view.View;
import android.webkit.WebView.FindListener;
import android.widget.Button;
import android.widget.TextView;
PesquisaOpiniaoActivity activity;
Button btfecharaplicacao;
TextView txtresposta1,txtresposta2,txtresposta3;
Resposta resp;
txtresposta1 = (TextView)
activity.findViewById(R.id.txtresposta1);
txtresposta2 = (TextView)
activity.findViewById(R.id.txtresposta2);
txtresposta3 = (TextView)
activity.findViewById(R.id.txtresposta3);
txtresposta1.setText(resp.resposta1);
txtresposta2.setText(resp.resposta2);
txtresposta3.setText(resp.resposta3);
btfecharaplicacao = (Button)
activity.findViewById(R.id.btfecharaplicacao);
469
btfecharaplicacao.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
//Fecha a aplicação
activity.finish();
}
});
}
package com.example.aplicacaopesquisaopiniao;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
PesquisaOpiniaoActivity activity;
Button btterminarpesquisa;
Resposta resp;
TelaFinalizacao tela_finalizacao;
RadioGroup rgropcoes_pergunta_3;
RadioButton rbtopcaoEscolhida;
470
activity.setContentView(R.layout.tela_pergunta_3);
btterminarpesquisa = (Button)
activity.findViewById(R.id.btterminarpesquisa);
rgropcoes_pergunta_3 = (RadioGroup)
activity.findViewById(R.id.rgropcoes_pergunta_3);
btterminarpesquisa.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
rbtopcaoEscolhida = (RadioButton)
activity.findViewById(rgropcoes_pergunta_3.
getCheckedRadioButtonId());
resp.resposta3 =
rbtopcaoEscolhida.getText().toString();
tela_finalizacao.CarregarTela();
}
});
package com.example.aplicacaopesquisaopiniao;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
PesquisaOpiniaoActivity activity;
Button btpergunta_3;
Resposta resp;
471
TelaPergunta3 tela_pergunta_3;
RadioGroup rgropcoes_pergunta_2;
RadioButton rbtopcaoEscolhida;
btpergunta_3 = (Button)
activity.findViewById(R.id.bt_pergunta3);
rgropcoes_pergunta_2 = (RadioGroup)
activity.findViewById(R.id.rgropcoes_pergunta_2);
btpergunta_3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rbtopcaoEscolhida = (RadioButton)
activity.findViewById(rgropcoes_pergunta_2.
getCheckedRadioButtonId());
resp.resposta2 =
rbtopcaoEscolhida.getText().toString();
tela_pergunta_3.CarregarTela();
}
});
472
Agora, dentro do mesmo pacote, vamos criar uma classe chamada
TelaPergunta1, com o seguinte código em seguida :
package com.example.aplicacaopesquisaopiniao;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
PesquisaOpiniaoActivity activity;
Button btpergunta_2;
Resposta resp;
TelaPergunta2 tela_pergunta_2;
RadioGroup rgropcoes_pergunta_1;
RadioButton rbtopcaoEscolhida;
btpergunta_2 = (Button)
activity.findViewById(R.id.bt_pergunta2);
rgropcoes_pergunta_1 = (RadioGroup)
activity.findViewById(R.id.rgropcoes_pergunta_1);
btpergunta_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rbtopcaoEscolhida = (RadioButton)
activity.findViewById
473
(rgropcoes_pergunta_1.
getCheckedRadioButtonId());
resp.resposta1 = rbtopcaoEscolhida.getText().
toString();
tela_pergunta_2.CarregarTela();
}
});
package com.example.aplicacaopesquisaopiniao;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
TelaFinalizacao tela_finalizacao;
TelaPergunta3 tela_pergunta3;
TelaPergunta2 tela_pergunta2;
TelaPergunta1 tela_pergunta1;
Resposta resposta;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tela_pergunta1.CarregarTela();
474
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
//present.
getMenuInflater().inflate(R.menu.pesquisa_opiniao, menu);
return true;
}
Aplicação em execução
475
Aplicação em execução
476
Aplicação em execução
477
Aplicação em execução
478
Aplicação em execução
Observe na aplicação acima que podemos ver todas as respostas de cada uma
das perguntas que nos foi feita. Agora , clique no botão “Finalizar aplicação”
para que a aplicação seja encerrada.
TelaFinalizacao tela_finalizacao;
TelaPergunta3 tela_pergunta3;
TelaPergunta2 tela_pergunta2;
TelaPergunta1 tela_pergunta1;
Resposta resposta;
479
Declaramos todos os objetos que irão representar todas as telas de nossa
aplicação , incluindo também um objeto chamado resposta que irá armazenar
as respostas do usuário.
Na instrução a seguir :
tela_pergunta1.CarregarTela();
480
rgropcoes_pergunta_1 = (RadioGroup)
activity.findViewById(R.id.rgropcoes_pergunta_1);
btpergunta_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rbtopcaoEscolhida = (RadioButton)
activity.findViewById
(rgropcoes_pergunta_1.getCheckedRadioButtonId());
resp.resposta1 = rbtopcaoEscolhida.getText().toString();
tela_pergunta_2.CarregarTela();
}
});
rgropcoes_pergunta_1 = (RadioGroup)
activity.findViewById(R.id.rgropcoes_pergunta_1);
rbtopcaoEscolhida = (RadioButton)
activity.findViewById
(rgropcoes_pergunta_1.getCheckedRadioButtonId());
Olhando assim parece meio confuso, mas , irei esclarecer para você. O método
getCheckedRadioButtonId (da classe RadioGroup) retorna o nome do
componente RadioButton que foi selecionado. Por exemplo, supondo que
estamos na primeira tela e que o item selecionado tela sido “Firefox” (cujo o
nome do componente que representa esta opção seja rbtopcao2_p1), a
instrução mencionada anteriormente equivale a :
481
rbtopcaoEscolhida = (RadioButton) activity.findViewById
(R.id.rbtopcao2_p1);
resp.resposta1 = rbtopcaoEscolhida.getText().toString();
tela_pergunta_2.CarregarTela();
activity.finish();
482
Capitulo 16 Publicando as
aplicações Android no Google
Play
A
té agora aprendemos a desenvolver as aplicações voltadas para a
plataforma Android utilizando o emulador oferecido pelo Android SDK.
Mas agora, como nós fazemos para publicar as nossas aplicações na
loja virtual de aplicativos do Android, o Google Play. Neste capítulo iremos
aprender passo a passo como realizar esta tarefa.
483
Site do “Google Play”
484
Site dos desenvolvedores do Android
485
Android Developer Console
486
Conclusão a respeito do
material
Um forte abraço
Luciano, o autor
487