Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...
Introd aplicjava
1. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
1
Capítulo 2
Introdução aos
aplicativos Java
PROGRAMAÇÃO ORIENTADA A OBJETOS
POO
2. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
CONTEÚDO
• Introdução aos aplicativos Java
• Primeiro programa Java
• Exibindo texto com printf
• Outro aplicativo: adicionando inteiros
• Conceitos de memória
• Aritmética
• Tomada de decisão
• Considerações finais
• Exercícios de autorrevisão
2
3. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
3
INTRODUÇÃO
Neste capítulo é
apresentada a
programação de
aplicativos Java
com programas
simples para uma
introdução à
criação de
programas Java.
Inicia-se com
exemplos que
exibem mensagens
de textos na tela e,
então, é
demonstrado um
programa que
obtém dois
números de um
usuário, calcula sua
soma e exibe o
resultado.
Aprende-se a
realizar cálculos
aritméticos e salvar
os resultados para
utilização posterior.
Por último,
demonstra-se a
tomada de decisão
mostrando como
comparar números
e exibir mensagens
baseadas nos
resultados de
comparação.
4. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
4
O PRIMEIRO PROGRAMA JAVA
Imprimindo
uma linha de
texto
Saída do programa
após a execução
5. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
5
COMENTANDO O PROGRAMA
Linhas 1 a 6 - linhas de comentários
(documentar o programa. Comentários
não são executados;
// - notação de comentários de fim
de linha ( linha 10 );
/* */ - notação de comentário
tradicional. Delimitam comentários de
várias linhas;
/** */ - comentário no estilo
Javadoc. Permitem incorporar a
documentação do programa
diretamente aos seus programas
(linhas 1 a 6);
Linhas 7 e 9 – espaço em branco
(não são compilados);
Linha 8 – declaração de classe
(classes definidas pelo programador)Saída do programa
após a execução
6. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
6
DOCUMENTAÇÃO GERADA PELO
JAVADOC DO ECLIPSE 3.4.1
7. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
7
A palavra-chave class (linha 8) introduz
uma declaração de classe e é
imediatamente seguida pelo nome da
classe (Welcome1);
Palavras-chave (às vezes chamadas de
palavras reservadas) são reservadas para
uso pelo Java e sempre escritas com
todas as letras minúsculas;
Por convenção, os nomes de classes
iniciam com uma letra maiúscula e
apresenta a letra inicial de cada palavra
que eles incluem em maiúscula. Por
exemplo SampleClassName. O nome de
uma classe é um identificador – uma
série de caracteres que consiste em
letras, dígitos, sublinhados ( _ ) e sinais
de cifrão ( $ ) que não iniciam com um
dígito e não contém espaços.
Identificadores válidos em Java:
Bemvindo1, $valor, _valor,
m_campoDeEntrada1 e botao7
O Java faz distinção entre
letras maiúsculas e
minúsculas
A1 ≠≠≠≠ a1
COMENTANDO O PROGRAMA
Saída do programa após
a execução
8. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
8
Palavras-chave do Java
abstract assert boolean break continue
case catch char class enum
default do double else for
extends final finally float int
if implements import instanceof package
interface long native new short
private protected public return synchronized
static strictfp super switch try
this throw throws transient
void volatile while byte
Palavras-chave que não são atualmente utilizadas:
const go to
O Java também contém as palavras reservadas true e false, que são literais
boolean e null, que é o literal que representa uma referência a nada. Assim
como as palavras-chave, essas palavras reservadas não podem ser utilizadas
como identificadores.
9. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
9
COMENTANDO O PROGRAMA
Cada classe que definimos
(declaramos - linha 8) inicia com a
palavra-chave public. O nome da
classe é Welcome1. Temos classe
public e não public (private);
Uma chave esquerda (na linha 8), {,
inicia o corpo de cada declaração de
classe. Uma chave direita, },
correspondente (linha 14) deve
terminar cada declaração de classe;
Linha 10 – comentário descrevendo
o propósito do programa;
Linha 11 – declaração de um
método. A declaração de um método
é o ponto de partida de cada aplicativo
Java. Declarações de classe Java
contêm um ou mais métodos. Para um
aplicativo Java, um dos métodos deve
ser chamado main e deve ser definido
como mostra a linha 11, caso
contrário, a JVM não executará o
aplicativo.
10. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
10
COMENTANDO O PROGRAMA
Os métodos realizam tarefas e
podem retornar informações quando
completam suas tarefas;
A palavra-chave void (linha 11) indica
que o método main não devolverá
nenhuma informação;
Na linha 11, a String[ ] args entre
parênteses é uma parte requerida da
declaração do método main;
A chave esquerda, {, na linha 11,
inicia o corpo da definição de método.
Uma chave direita correspondente,
linha 13, deve terminar o corpo da
declaração do método;
A linha 12, System.out.println(
“Welcome to Java Programming!”);
instrui o computador a realizar uma
ação – a saber, imprimir a string de
caracteres contida entre aspas duplas
(mas não as próprias aspas duplas). ou
string literal.
11. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
1111
COMENTANDO O PROGRAMA Uma string às vezes é chamada de
string de caractere ou string literal;
Os caracteres de espaço em branco
em strings não são ignorados pelo
compilador;
O objeto System.out é conhecido
como o objeto de saída padrão. Ele
permite que aplicativos Java exibam
strings na janela de comando (ver
Figura do meio) a partir da qual o
aplicativo de Java executa;
O método System.out.println, linha
12, exibe (ou imprime) uma linha de
texto na janela de comando (ou
console). A string entre parênteses na
linha 12 é o argumento para o
método. Quando o método completa
sua tarefa, ele posiciona o cursor de
saída no começo da linha seguinte na
janela de comando (ver Figura de
baixo).
Figura: Janela do prompt de comando
do Windows 7.
12. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
121212
COMENTANDO O PROGRAMA A linha 12 inteira, incluindo
System.out.println, o argumento
“Welcome to Java Programming!”
entre parênteses e o ponto-e-vírgula
(;), é uma instrução.
Os comentários de fim de linha após
as chaves de fechamento dos métodos
main e da classe Welcome1, linhas 13
e 14, respectivamente, é uma prática
recomendável, de forma a melhorar a
legibilidade de programa.
Figura: Janela do prompt de comando
do Windows 7.
Saída do programa
13. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
13
MODIFICANDO NOSSO PRIMEIRO
PROGRAMA JAVA
Nessa seção, modificaremos o exemplo da classe Welcome1
(Figura 2.1) para imprimir texto em uma linha utilizando várias
instruções e imprimir texto em várias linhas utilizando uma
única instrução.
Figura 2.1: Classe Welcome1
14. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
14
EXIBINDO UMA LINHA DE TEXTO COM
MÚLTIPLAS INSTRUÇÕES
Welcome to Java Programming! pode ser exibido de várias
maneiras.
A classe Welcome2, mostrada na Figura 2.3, utiliza
duas instruções para produzir a mesma saída mostrada na
linha 12 da Figura 2.1.
Figura 2.1: Classe Welcome1
15. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
15
EXIBINDO UMA LINHA DE TEXTO COM
MÚLTIPLAS INSTRUÇÕES
Figura 2.3: Classe Welcome2
Saída do programa
NOVIDADE:
Linhas 12 e 13 da classe Welcome2
Múltiplas instruções
Uma linha de texto
16. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
16
EXIBINDO MÚLTIPLAS LINHAS DE TEXTO COM
UMA ÚNICA INSTRUÇÃO
Saída do programa
A linha 14
System.out.println(
“WelcomentonJavanProgramming!
” );
exibe quatro linhas separadas de texto
na janela de comando;
Normalmente, os caracteres em uma
string são exibidos exatamente como
aparecem entre as aspas duplas.
Observe, porém, que os dois
caracteres e n (repetidos três vezes
na instrução) não aparecem na tela;
A barra invertida ( ) é chamada
caractere de escape. Ela indica para os
métodos print e println de System.out
que a saída de um “caractere especial”
deve ser gerada.
17. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
17
EXIBINDO MÚLTIPLAS LINHAS DE TEXTO COM
UMA ÚNICA INSTRUÇÃO
Saída do programa
Quando aparece uma barra invertida
em uma string de caracteres, o Java
combina o próximo caractere com as
barras invertidas para formar uma
sequência de escape ( n );
A sequência de escape n representa
o caractere de nova linha;
A Figura 2.5 lista várias sequências
de escape comuns e descreve como
elas afetam a exibição de caracteres na
janela de comando;
Para obter a lista completa de
sequências de escape, clique aqui.
18. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
18
SEQUÊNCIA DE ESCAPE
Sequência de
escape
Descrição
n Nova linha
t Tabulação horizontal
r Retorno de carro
Barras invertidas
” Aspas duplas
Permitem modificar a forma de como strings de textos podem
ser exibidas através do método System.out.println
19. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
19
EXIBINDO TEXTO COM PRINTF
O método System.out.printf (f significa “formated”) exibe os
dados formatados. A Figura 2.6 utiliza esse método para gerar
a saída das strings “Welcome to” e “Java Programming!”.
Saída do programa
O método printf tem a forma (ou sintaxe) abaixo:
printf( string-de-formato, lista de argumentos );
20. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
20
COMENTANDO O PROGRAMA A linha 13 chama o método
System.out.printf para exibir a saída do
programa. A chamada de método
especifica três argumentos;
Quando um método exige múltiplos
argumentos, estes são colocados em
uma lista separada por vírgulas;
O primeiro argumento do método
printf é uma string de formato que
pode consistir em texto fixo e
especificadores de formato;
Cada especificador de formato é um
marcador de lugar para um valor e
especifica o tipo de saída de dados;
Especificadores de formato iniciam
com um sinal de porcentagem (%) e
são seguidos por um caractere que
representa o tipo de dados.
21. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
21
COMENTANDO O PROGRAMA O especificador de formato %s é um
marcador de lugar para uma string;
A string de formato na linha 13
especifica que printf dever gerar a
saída de duas strings, cada uma
seguida por um caractere de nova
linha;
Na primeira posição do especificador
de formato, printf substitui o valor do
primeiro argumento depois da string
de formato;
Em cada posição subsequente, printf
substitui o valor do próximo
argumento na lista de argumentos.
Portanto, esse exemplo coloca
“Welcome to” no lugar do primeiro %s
e “Java Programming!” no lugar do
segundo %s.
O especificador de formato %d é um
marcador de lugar para um valor int.
22. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
22
IMPRIMINDO INTEIROS
Caractere de
conversão
Descrição
d Exibe um inteiro decimal (base 10)
o Exibe um inteiro octal (base 8)
x ou X Exibe um número inteiro hexadecimal
(base 16). X utiliza letras maiúsculas
A Tabela abaixo descreve os caracteres de conversão
integrais.
23. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
23
APLICAÇÃO DO PRINTF
Saída do programa
24. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
24
IMPRIMINDO NÚMEROS DE PONTO
FLUTUANTE
A Tabela abaixo descreve as conversões de ponto flutuante.
CARACTERE DE
CONVERSÃO
DESCRIÇÃO
e ou E
Exibe um valor de ponto flutuante em notação exponencial. O caractere de
conversão E exibe a saída em letras maiúsculas. Por exemplo, o valor
150,4582 é representado por 1, 504582x102 (notação científica
matemática) e é representado na notação exponencial 1,504582e+02 no
Java.
f Exibe um valor de ponto flutuante no formato decimal.
g ou G
Exibe um valor de ponto flutuante no formato de ponto flutuante f ou no
formato exponencial e com base na magnitude do valor. Se a magnitude for
menor que 10-3, maior ou igual a 107, o valor de ponto flutuante será
impresso com e (ou E). Caso contrário, o valor é impresso no formato f.
Quando o caractere de conversão G é utilizado, a saída é exibida em letras
maiúsculas.
a ou A
Exibe um número de ponto flutuante no formato hexadecimal. O caractere
de conversão A exibe a saída em letras maiúsculas.
25. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
25
IMPRIMINDO NÚMEROS DE PONTO
FLUTUANTE
1,504582e+02
Essa notação indica que 1,504582
é multiplicado por 10 elevado à
segunda potência (e+02). O e
significa “expoente”.
LEMBRETE!
A saída dos valores impressos com os caracteres de
conversão e, E e f é gerada, por padrão, com seis
dígitos de precisão à direita do ponto de fração
decimal (por exemplo, 1,045921) – outras precisões
devem ser especificadas explicitamente.
26. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
26
IMPRIMINDO NÚMEROS DE PONTO
FLUTUANTE
LEMBRETE!
Para valores impressos com o caractere de
conversão g, a precisão representa o número total de
dígitos exibidos sem o expoente. O padrão é seis
dígitos (por exemplo, 12345678,9 é exibido como
1,23457e+07;
O caractere de conversão f sempre imprime pelo
menos um dígito à esquerda do ponto de fração
decimal;
Os caracteres de conversão e e E imprimem o e em
minúscula e o E em maiúscula antes do expoente e
sempre imprime exatamente um dígito à esquerda
do ponto de fração decimal;
O arredondamento ocorre se o valor sendo
formatado tiver mais dígitos significativos do que de
precisão.
27. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
27
APLICAÇÃO DO
PRINTF
Saída do programa
28. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
28
IMPRIMINDO STRINGS E CARACTERES
Os caracteres
de conversão c e
s imprimem
caracteres e
strings
específicos,
respectivamente;
Os caracteres
de conversão c e
C requerem um
argumento do
tipo char.
Os caracteres
de conversão s e
S podem receber
uma String ou
algum Object
como um
argumento.
Quando os
caracteres de
conversão C e S
são utilizados, a
saída é exibida em
letras maiúsculas;
A Figura G.5
exibe caracteres,
strings e objetos
com os caracteres
de conversão c e s.
29. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
29
IMPRIMINDO STRINGS E CARACTERES -
APLICAÇÃO
Saída do programa
30. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
30
COMENTANDO O CÓDIGO-FONTE
Linha 14 – ocorre o
autoboxing
(“empacotamento”) quando
uma constante int é atribuída a
um objeto Integer;
Linha 20 – gera saída de um
argumento Integer com o
caractere de conversão s, que
invoca implicitamente o
método toString para obter o
valor de inteiro;
Também poderia ser gerada
a saída de um objeto Integer
utilizando o especificador de
formato %d. Nesse caso, o
valor int no objeto será
“desempacotado” (unboxing) e
impresso.
31. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
31
IMPRIMINDO DATAS E HORAS
O caractere de
conversão t (ou
T) é utilizado
para imprimir
datas e horas em
vários formatos;
Ele sempre é
seguido por um
caractere de
sufixo de
conversão que
especifica que o
formato de data
e/ou hora.
Quando o
caractere de
conversão T é
utilizado, a saída é
exibida em letras
maiúsculas;
A Tabela A a
seguir lista os
caracteres de
sufixo de
conversão comuns
para formatar
composições de
data e hora que
exibem tanto a
data como a hora.
A Tabela B lista os
caracteres de sufixo
de conversão comuns
para formatar datas;
A Tabela C lista os
caracteres de sufixo
de conversão comuns
para formatar horas;
Para a lista completa
de caracteres de
sufixo de conversão,
visite
java.sun.com/javase/6
/docs/api/java/util/Fo
rmatter.html.
1 2
3
32. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
32
IMPRIMINDO DATAS E HORAS
TABELA A – Caracteres de sufixo de conversão de composição de data e hora
Caractere de sufixo
de conversão
Descrição
c
Exibe a data e hora formatadas como
day month date hour:minute:second time-zone year
com três caracteres para day e month, dois dígitos para date, hour, minute e
second e quatro dígitos para year – por exemplo, Wed Mar 03 16:30:25 GMT-
05:00 2004. O relógio de 24 horas é utilizado. GMT-05:00 é o fuso horário.
F
Exibe a data formatada como year-month-date com quatro dígitos para o
year e dois dígitos cada para o month e a date (por exemplo, 2004-05-04).
D
Exibe a data formatada como month/day/year com dois dígitos cada para o
month, day e year (por exemplo, 03/03/04).
r
Exibe a hora no formato de 12 horas como hour:minute:second AM|PM com
dois dígitos cada para a hour, minute e second (por exemplo, 04:30:25 PM).
R
Exibe a hora formatada como hour:minute com dois dígitos cada para a hour
e minute (por exemplo, 16:30). O relógio de 24 horas é utilizado.
T
Exibe a hora como hour:minute:second com dois dígitos para hour, minute e
second (por exemplo, 16:30:25). O relógio de 24 horas é utilizado
33. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
33
IMPRIMINDO DATAS E HORAS
TABELA B – Caracteres de sufixo de conversão de formatação de data
Caractere de sufixo
de conversão
Descrição
A Exibe o nome completo do dia da semana (por exemplo, Wednesday).
a Exibe o nome com três caracteres do dia da semana (por exemplo, Wed).
B Exibe o nome completo do mês (por exemplo, March).
b Exibe o nome abreviado com três caracteres do mês (por exemplo, Mar).
d
Exibe o dia do mês com dois dígitos, preenchendo com zeros à esquerda
conforme necessário (por exemplo, 03).
m
Exibe o mês com dois dígitos, preenchendo com zeros à esquerda conforme
necessário (por exemplo, 07).
e Exibe o dia de mês sem zeros à esquerda (por exemplo, 3).
Y Exibe o ano com quatro dígitos (por exemplo, 2004).
y Exibe os dois últimos dígitos do ano com zeros à esquerda (por exemplo, 04).
j
Exibe o dia do ano com três dígitos, preenchendo com zeros à esquerda
conforme necessário (por exemplo, 016).
34. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
34
IMPRIMINDO DATAS E HORAS
TABELA C – Caracteres de sufixo de conversão de formatação de hora
Caractere de sufixo de
conversão
Descrição
H
Exibe horas no relógio de 24 horas com um zero à esquerda conforme
necessário (por exemplo, 16).
I
Exibe horas no relógio de 12 horas com um zero à esquerda conforme
necessário (por exemplo, 04).
K Exibe horas em relógio de 24 horas sem zeros à esquerda (por exemplo, 16).
Exibe horas em relógio de 12 horas sem zeros à esquerda (por exemplo, 4)
M
Exibe minutos com um zero à esquerda conforme necessário (por exemplo,
06).
S
Exibe segundos com um zero à esquerda conforme necessário (por exemplo,
05).
Z
Exibe a abreviação para o fuso horário (por exemplo, EST, significa Eastern
Standard Time, que está 5 horas atrás do Greenwich Mean Time).
p
Exibe marcador de manhã ou de tarde em letras minúsculas (por exemplo,
pm).
P
Exibe marcador de manhã ou de tarde em letras maiúsculas (por exemplo,
PM).
35. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
35
IMPRIMINDO DATAS E HORAS - LABORATÓRIO
A Figura G.9 utiliza os caracteres de conversão t e T com
os caracteres de sufixo de conversão para exibir datas e
horas em vários formatos;
O caractere de conversão t requer que o argumento
correspondente seja uma data ou hora do tipo long,
Calendar (pacote java.util) ou Date (pacote java.util);
Os objetos de cada uma dessas classes podem
representar datas e horas
36. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
36
37. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
37
OUTROS CARACTERES DE CONVERSÃO
Os caracteres de conversão restantes são b, B, h, H, % e n.
Estes são discutidos na Tabela abaixo:
Caractere de
conversão
Descrição
b ou B Imprime “true” ou “false” para o valor de um boolean ou Boolean.
Esses caracteres de conversão também podem formatar o valor de
qualquer referência. Se a referência for null, “true” será impresso,
do contrário, “false”. Quando o caractere de conversão B é
utilizado, a saída é exibida em letras maiúsculas.
h ou H Imprime a representação de string de um valor de código de hash
do objeto em formato hexadecimal. Se o argumento
correspondente for null, “null” será impresso. Quando o caractere
de conversão H é utilizado, a saída é exibida em letras maiúsculas.
% Imprime o caractere de porcentagem.
n Imprime o separador de linha específico à plataforma (por
exemplo, rn no Windows ou n no UNIX/LINUX.
38. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
38
COMENTANDO O CÓDIGO As linhas 14 e 15 utilizam %b
para imprimir o valor de valores
boolean (ou Boolean) false e
true;
A linha 16 associa uma linha
String a %b que retorna true
porque não é null;
A linha 17 associa um objeto
null a %B, que exibe FALSE
porque test é null;
As linhas 18 e 19 utilizam %h
para imprimir as representações
de string dos valores de código
de hash para as strings “hello” e
“Hello”;
A linha 20 utiliza %H para
imprimir null em letras
maiúsculas;
As duas últimas instruções
printf (linhas 21 e 22) utilizam
%% para imprimir o caractere %
em uma string e %n para
imprimir um separador de linha
específico à plataforma.
39. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
39
IMPRIMINDO COM LARGURAS E
PRECISÕES DE CAMPOS
O tamanho exato de um campo em que dados são impressos é
especificado por uma largura de campo.
Se a largura de campo for maior que os dados a serem
impressos, os dados serão alinhados por padrão à direita no
campo.
Insira um inteiro que representa a largura de campo entre o %
e o caractere de conversão (por exemplo, %4d) no especificador
de formato.
A Figura G.12 imprime dois grupos de cinco números cada,
alinhando à direita os números que contém menos dígitos do
que a largura do campo.
40. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
40
Considerações
Observe que a largura de campo é aumentada para imprimir
valores com largura maior do que o campo e que o sinal de
subtração para um valor negativo utiliza uma posição de caractere
no campo;
Se nenhuma largura de campo for especificada, os dados serão
impressos exatamente de acordo com o número de posições
necessárias;
As larguras de campo podem ser usadas com todos os
especificadores de formato, exceto o separador de linha (%n).
41. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
41
IMPRIMINDO COM LARGURAS E
PRECISÕES DE CAMPOS
O método printf também fornece a capacidade de especificar
a precisão com que os dados são impressos;
A precisão tem diferentes significados para diferentes tipos:
Quando usada com caracteres de conversão de ponto
flutuante e e f, a precisão é o número de dígitos que aparece depois do ponto
de fração decimal;
Quando usada com os caracteres de conversão g, a ou A,
a precisão é o número máximo de dígitos significativos a ser impresso;
Quando usada com o caractere de conversão s, a
precisão é o número máximo de caracteres a ser gravado da string;
Para utilizar a precisão, coloque entre o sinal de
postagem e o especificador de conversão um ponto de fração decimal ( . )
seguido por um inteiro que representa a precisão.
42. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
42
IMPRIMINDO COM LARGURAS E
PRECISÕES DE CAMPOS
A Figura g.13 demonstra o uso da precisão em strings de
formato:
43. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
43
IMPRIMINDO COM LARGURAS E
PRECISÕES DE CAMPOS
COMENTÁRIOS
Quando um valor de ponto
flutuante é impresso com uma
precisão menor do que o número
original de casas decimais no valor, o
valor é arredondado;
O especificador de formato %.3g
indica que o número total de dígitos
usado para exibir o valor de ponto
flutuante é 3;
Como o valor tem três dígitos à
esquerda do ponto de fração decimal,
ele é arredondado para a casa das
unidades;
A largura e a precisão de campo
podem ser combinadas colocando a
largura de campo, seguida por um
ponto de fração decimal, seguido por
uma precisão entre o sinal de
porcentagem e o caractere de
conversão, como na instrução abaixo:
printf( “%9.3f”, 123.456789 );
44. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
44
UTILIZANDO FLAGS NA STRING DE FORMATO
PRINTF
Vários flags podem ser utilizados com o método printf para
suplementar suas capacidades de formatação de saída. Sete
flags estão disponíveis para utilização nas strings de formato
(Tabela abaixo).
FLAG DESCRIÇÃO
- (sinal de subtração) Alinha a saída à esquerda dentro do campo especificado
+ (sinal de adição) Exibe um sinal de adição precedendo valores positivos e um sinal de
subtração precedendo valores negativos.
espaço Imprime um espaço antes de um valor positivo não impresso com o flag +.
≠ O prefixo 0 para o valor de saída quando utilizado com o caractere de
conversão octal o. Adiciona o prefixo 0x ao valor de saída quando utilizado
com o caractere de conversão hexadecimal x.
0 (zero) Preenche um campo com zeros à esquerda.
, (vírgula) Utiliza o separador específico de localidade de milhares (isto é, ‘ , ‘ para
localidade nos EUA) para exibir números decimais e de ponto flutuante.
( Inclui números negativos dentro de parênteses.
45. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
45
UTILIZANDO FLAGS NA STRING DE FORMATO
PRINTF
Para utilizar um flag em uma string de formato, coloque-o
imediatamente à direita do sinal de porcentagem.
Vários flags podem ser utilizados no mesmo especificador de
formato.
A Figura G.15 demonstra o alinhamento à direita e o
alinhamento à esquerda de uma string, um inteiro, um caractere
e um número de ponto flutuante.
46. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
Saída do programa
47. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
UTILIZANDO FLAGS NA STRING DE FORMATO
PRINTF
A Figura G.16 imprime um número positivo e um número
negativo, cada um com e sem o flag +.
Observe que o sinal de subtração é exibido nos dois casos, mas
o sinal de adição somente quando o flag + é utilizado.
Saída do aplicativo Java
48. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
UTILIZANDO FLAGS NA STRING DE FORMATO
PRINTF
A Figura G.17 prefixa um espaço para o número positivo com o
flag espaço. Isso é útil para alinhar números positivos e
negativos com o mesmo número de dígitos.
Observe que o valor -547 não é precedido por um espaço na
saída por causa do seu sinal de subtração.
Saída do aplicativo Java
49. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
UTILIZANDO FLAGS NA STRING DE FORMATO
PRINTF
A Figura G.18 utiliza o flag # para prefixar O para o valor octal e
Ox para o valor hexadecimal.
Saída do aplicativo Java
50. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
UTILIZANDO FLAGS NA STRING DE FORMATO
PRINTF
A Figura G.19 combina o flag +, o flag 0 e o flag espaço para
imprimir 452 em um campo de largura 9 com um sinal + e zeros
à esquerda, em seguida imprime 452 em um campo de largura 9
utilizando somente o flag 0 e, então, imprime 452 em um campo
de largura 9 utilizando somente o flag espaço.
Saída do aplicativo Java
51. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
UTILIZANDO FLAGS NA STRING DE FORMATO
PRINTF
A Figura G.20 utiliza o flag vírgula ( , ) para exibir números
de ponto flutuante com o separador de milhares;
A Figura G.21 inclui números negativos entre parênteses
utilizando o flag ( ;
Observe que o valor 50 não é incluído entre parênteses na
saída porque é um número positivo.
52. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
Saída do programa
53. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
Saída do programa
54. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
IMPRIMINDO COM ÍNDICES DE ARGUMENTO
Um índice de argumentos é um inteiro opcional seguido por um
sinal $ que indica a posição do argumento na lista de
argumentos.
Por exemplo, as linhas 26-28 e 31-32 na Figura G.9
utilizam o índice de argumentos “1$” para indicar que todos os
especificadores de formato utilizam o primeiro argumento da
lista de argumentos.
55. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
... IMPRIMINDO COM ÍNDICES DE ARGUMENTO
Os índices de argumentos permitem que os programadores
reordenem a saída de modo que os argumentos na lista de
argumentos não necessariamente estejam na ordem dos seus
especificadores de formato correspondentes;
Os índices de argumento também ajudam a evitar a duplicação
de argumentos;
A Figura G.22 imprime os argumentos da lista de argumentos
na ordem inversa utilizando o índice de argumentos.
56. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
Saída do programa
57. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
IMPRIMINDO LITERAIS E SEQUÊNCIAS DE
ESCAPE
A maioria dos caracteres literais a ser impressa em uma
instrução printf pode ser simplesmente incluída na string de
formato. Entretanto, há vários caracteres “problemáticos”, como
aspas ( “ ) que delimitam a própria string de formato;
Vários caracteres de controle, com a nova linha e tabulação,
devem ser representados por sequências de escape;
Uma sequência de escape é representada por uma barra
invertida ( ), seguida por um caractere de escape;
A Tabela a seguir lista as sequências de escape e as ações
resultantes:
58. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
SEQUÊNCIAS DE
ESCAPE
DESCRIÇÃO
’ (aspa simples) Gera saída do caractere de aspa simples ( ‘ )
” (aspas duplas) Gera a saída do caractere de aspas duplas ( “ )
(barras invertidas) Gera a saída do Caractere de barra invertida ( )
b (backspace) Move o cursor de volta uma posição na linha atual
f (nova página ou
avanço de formulário)
Move o cursor para o início da próxima página lógica
n (nova linha) Move o cursor para o começo da próxima linha
r (retorno de carro) Move o cursor para o começo da linha atual
t (tabulação
horizontal)
Move o cursor para a próxima posição da tabulação
horizontal
59. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
FORMATANDO SAÍDA COM A CLASSE
FORMATTER
Até agora, discutimos a exibição de saída formatada para o
fluxo de saída padrão;
O que devemos fazer se quisermos enviar saídas formatadas a
outros fluxos de saída ou dispositivos, como um JTextArea ou
um arquivo?
A solução conta com a classe
Formatter (do pacote Formatter),
que fornece as mesmas capacidades
de formatação de printf;
Formatter é uma classe utilitária
que permite aos programadores
gerar saída formatada de dados para
um destino especificado, como um
arquivo em disco;
Por padrão, uma Formatter cria
uma string na memória.
Fonte: http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JTextArea.html
60. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
Saída do programa
61. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O PROGRAMA A linha 21 cria um objeto Formater utilizando
o construtor padrão, assim esse objeto
construirá uma string na memória;
Outros construtores são fornecidos para que
você possa especificar o destino em que os
dados formatados devem ser impressos. Para
detalhes, consulte as URL´s abaixo:
www.java.sun.com/javase/6/docs/api/java/util
/Formatter.html
http://download.oracle.com/javase/6/docs/api
/
A linha 22 invoca o método format para
formatar a saída. Como ocorre com printf, o
método format recebe uma string de formato
e uma lista de argumentos;
A diferença é que printf envia a saída
formatada diretamente para o fluxo de saída
padrão, enquanto o método format envia a
saída formatada para o destino especificado
pelo seu construtor (nesse programa, uma
string na memória.
62. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O PROGRAMA
A linha 25 invoca o método toString de
Formatter para obter os dados formatados
como uma string, que então é exibida em uma
caixa de diálogo de mensagem;
Observe que a classe String também fornece
um método static de conveniência chamado
format que permite criar uma string na
memória sem precisar antes criar um objeto
Formatter;
As linhas 21-22 e a linha 25 na Figura G.24
poderiam ter sido substituídas por;
String s = String.format( “%d = %#o = %#x”,
10, 10, 10 );
JOptionPane.showMessageDialog( null, s );
63. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
OUTRO APLICATIVO: SOMANDO INTEIROS
Nosso próximo aplicativo lê (ou insere) dois inteiros (números
integrais, como -22, 7, 0 e 1024) digitados por um usuário no
teclado, calcula a soma dos valores e exibe o resultado ;
Esse programa deve manter um registro dos números
fornecidos pelo usuário para o cálculo posterior no programa;
Os programas lembram-se dos números e outros dados na
memória do computador e acessam esses dados por meio de
elementos de programa chamados variáveis;
O programa da Figura 2.7 demonstra esses conceitos. Na saída
de exemplo, usamos o texto em negrito para identificar a
entrada do usuário (isto é, 45 e 72).
64. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
Linhas de 1 – 6 são comentários
padrão;
Linha 9 é uma declaração import que
ajuda o compilador a localizar uma
classe utilizada ou necessária nesse
programa;
Um dos pontos fortes do Java é seu
rico conjunto de classes predefinidas
que podemos reutilizar em vez de
“reinventar a roda”;
Essas classes são agrupadas em
pacotes – chamados de grupos de
classes relacionadas – e, coletivamente,
são chamadas de biblioteca de classes
Java, ou Java Application Programming
Interface (Java API);
65. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
Utilize declarações import para
identificar as classes predefinidas
utilizadas em um programa Java;
A declaração import na linha 9 indica
que esse exemplo usa a classe Scanner
predefinida do Java do pacote java.util;
A linha 11 public class Addition inicia a
declaração da classe Addition. O nome
de arquivo para essa classe public deve
ser Addition.java;
{ e } são as chaves de abertura e
fechamento do corpo de cada
declaração de classe, respectivamente;
O aplicativo inicia a execução com o
método main (linhas 13-31);
A linha 15 Scanner input = new
Scanner( System.in ); é uma instrução
de declaração de variável que
especifica o nome (input) e o tipo
(Scanner) de uma variável que é usada
nesse programa;
66. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
Uma variável é uma posição na
memória do computador onde um valor
pode ser armazenado para uso
posterior em um programa;
Todas as variáveis Java devem ser
declaradas com um nome e um tipo
antes que elas possam ser utilizadas;
O nome de uma variável permite que
o programa acesse o valor da variável
na memória;
Memória
Variável
Valor
67. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
O nome de uma variável pode ser
qualquer identificador válido;
O tipo de uma variável especifica o tipo de
informações armazenado nessa posição na
memória;
As instruções de declaração terminam
com um ponto-e-vírgula ( ; );
A declaração na linha 15 especifica que a
variável nomeada input seja do tipo
Scanner;
Um Scanner permite a um programa ler os
dados (por exemplo, números) para
utilização em um programa;
O sinal de igual ( = ) na linha 15 indica que
a variável Scanner input deve ser
inicializada (isto é, preparada para
utilização no programa) na sua declaração
com o resultado da expressão new Scanner(
System.in ) à direita do sinal de igual;
Essa expressão utiliza a palavra-chave new
para criar um objeto Scanner que lê
caracteres digitados pelo usuário no
teclado;
68. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
Na linha 15, o objeto de entrada padrão,
System.in, permite que aplicativos leiam
bytes de informações digitadas pelo usuário.
O objeto Scanner traduz esses bytes em tipos
(como ints) que podem ser utilizados em um
programa;
As instruções de declaração de variável nas
linhas 17-19:
int x; // primeiro número a adicionar
int y; // segundo número a adicionar
int soma; // soma de x e y
Declaram que as variáveis x, y e soma
armazenam dados do tipo int – elas podem
armazenar valores inteiros (números inteiros
como 72, -1127 e 0);
O intervalo de valores para um int é -
2.147.483.648 a +2.147.483.648;
A seguir, serão discutidos os tipos float e
double, para armazenar números reais, e o
tipo char, para armazenar dados de
caracteres;
69. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
Os números reais contêm pontos decimais,
como 3.4, 0.0 e -11.19;
Variáveis do tipo char representam
caracteres individuais, como uma letra
maiúscula (por exemplo, A), um dígito (por
exemplo, 7), um caractere especial (por
exemplo, * ou %) ou uma sequência de
escape (por exemplo, o caractere de nova
linha, n);
Os tipos boolean (true ou false), char, byte,
short, int, long, float e double são chamados
de tipos primitivos do Java (ver Apêndice D
do Deitel);
Os nomes dos tipos primitivos são palavras-
chave e devem aparecer em letras
minúsculas;
Diversas variáveis do mesmo tipo podem ser
declaradas em uma declaração com os nomes
de variável separadas por vírgulas (isto é, uma
lista separada por vírgulas de nomes de
variáveis. Por exemplo:
int x, y, soma;
70. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
A linha 21 System.out.print( “Digite um
valor para x: “); // prompt utiliza
System.out.print para exibir a mensagem
Digite um valor para x: Essa mensagem é
chamada prompt porque direciona o usuário
para uma ação específica;
Utilizamos o método print aqui em vez de
println para que a entrada do usuário apareça
na mesma linha que o prompt;
System é uma classe. A classe System faz
parte do pacote java.lang (ver slide seguinte);
Observe que a classe System não é
importada com uma declaração import no
começo do programa;
A linha 22, x = input.nextInt(); // lê o valor
de x utiliza o método nextInt do valor de input
do objeto Scanner para obter um inteiro
digitado pelo usuário;
O programa assume que o usuário insira um
valor válido de inteiro. Caso não válido, um
erro de lógica em tempo de execução
ocorrerá e o programa terminará. O Capítulo
11 discute como tornar os programas Java
mais robustos permitindo que esses tratem
tais erros, tornando-os tolerantes a falhas.
71. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
API java.lang
72. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
Na linha 22, x = input.nextInt(); // lê o valor
de x, o resultado da chamada ao método
nextInt (um valor int) é colocado na variável x
utilizando o operador de atribuição, =.;
O operador = é chamado de operador
binário, porque tem dois operandos – x e o
resultado da chamada de método
input.nextInt();
A linha 24 System.out.print( “Digite um
valor para y: “); // prompt pede para o
usuário inserir o segundo inteiro;
A linha 25 y = input.nextInt(); // lê o
segundo inteiro fornecido pelo usuário e o
atribui à variável y;
A linha 27, soma = x + y; é uma instrução de
atribuição que calcula a soma das variáveis x e
y e, então, atribui o resultado à variável soma;
As partes das instruções que contém
cálculos são chamadas de expressões;
Uma expressão é qualquer parte de uma
instrução que tem um valor associado com
ela. Por exemplo, o valor da expressão
input.nextInt() é um inteiro digitado pelo
usuário.
73. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
A linha 29, System.out.prinf( “Soma de x+y =
%dn”, soma); utiliza o método
System.out.printf para exibir a soma;
O especificador de formato %d é um
marcador de lugar para um valor int (nesse
caso o valor de sum) – a letra d significa
“inteiro decimal”;
Observe que além do especificador de
formato %d, todos os caracteres restantes na
string de formato são texto fixo. Portanto, o
método printf exibe “soma de x+y = “, seguido
pelo valor de soma (na posição do
especificador de formato %d) e por uma nova
linha;
Os cálculos também podem ser realizados
dentro de instruções printf, como segue
abaixo:
System.out.printf( “Soma de x+y = %dn”, x+y).
74. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
DOCUMENTAÇÃO DA JAVA API
Para cada nova classe da Java API que usamos, indicamos o
pacote em que ela está localizada;
Essas informações ajudam a localizar descrições de
cada pacote e classe na documentação da Java API;
Uma versão baseada na Web dessa documentação
pode ser obtida em:
java.sun.com/javase/6/docs/api
Java.sun.com/javase/downloads
O Apêndice E mostra como utilizar
essa documentação
75. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
CONCEITOS DE MEMÓRIA
Os nomes de variável como x, y e soma realmente
correspondem às posições na memória do computador;
Cada variável tem um nome, um tipo, um tamanho
(em bytes) e um valor, por exemplo:
x = input.nextInt();
x 45
Posição da memória mostrando o
nome e o valor da variável x
MEMÓRIA
76. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
ARITMÉTICA
A maioria dos programas realiza cálculos aritméticos;
Os operadores aritméticos (símbolos ou sinais) são resumidos
na Tabela abaixo:
Operação Java Operador Expressão algébrica Expressão Java
Adição + f + 7 f + 7
Subtração - p - c p - c
Multiplicação * bm b * m
Divisão / x/y ou x ÷ y x / y
Resto % r mod s r % s
y
x
77. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
CONSIDERAÇÕES SOBRE OS OPERADORES
ARITMÉTICOS
O asterisco ( * ) indica multiplicação, e o sinal de porcentagem
( % ) é o operador de resto (módulo);
Os operadores aritméticos da Tabela anterior são operadores
binários porque cada um deles opera em dois operandos. Por
exemplo, a expressão f + 7 contém o operador binário + e os dois
operandos f e 7;
A divisão de inteiros produz um quociente do tipo inteiro; por
exemplo, a expressão 7 / 4 é avaliada como 1 e a expressão 17 /
5 é avaliada como 3. Qualquer parte fracionária na divisão de
inteiros é simplesmente descartada (isto é, truncada);
O Java fornece o operador de módulo, % que fornece o resto
da divisão. A expressão x % y produz o restante depois que x é
dividido por (por exemplo: 7 % 4 = 3 e 17 % 5 = 2
78. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
ARITMÉTICA
Expressões aritméticas na forma de reta
As expressões aritméticas em Java devem ser escritas na
forma de linha reta para facilitar a inserção de programas no
computador
(certo)
(errado)
ba
b
a
79. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
ARITMÉTICA
Parênteses para agrupar subexpressões
Os parêntese são utilizados para agrupar termos em
expressões Java da mesma maneira como em expressões
algébricas. Por exemplo, para multiplicar a vezes a quantidade b
+ c, escreveremos:
a * (b + c);
Se uma expressão contiver parênteses aninhados,
como:
( (a + b ) * c )
a expressão no conjunto de parêntese mais interno ( a + b nesse
caso ) é avaliada primeiro.
80. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
ARITMÉTICA
Regras de precedência de operadores
O Java aplica os operadores em expressões aritméticas
em uma sequência precisa determinada pelas seguintes regras
de precedência de operadores, conforme Tabela abaixo:
Operador Operação Ordem de avaliação (precedência)
* Multiplicação Avaliado primeiro. Se houver vários operadores desse
tipo, eles são avaliados da esquerda para a direita./ Divisão
% Resto
+ Adição Avaliado em seguida. Se houver vários operadores
desse tipo, eles são avaliados da esquerda para a
direita.
- Subtração
= Atribuição Avaliado por último
81. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
ARITMÉTICA
Exemplos de expressões algébricas e Java
Nesse exemplo, vamos considerar várias expressões à luz
das regras de precedência de operador. Cada exemplo lista uma
expressão algébrica e seu equivalente Java. O seguinte é um
exemplo de uma média aritmética de cinco termos:
ÁLGEBRA
JAVA m = (a + b + c + d + e) / 5;
5
edcba
m
++++
=
OBS.: Os parênteses são exigidos porque a divisão tem precedência mais alta que a
adição. Se não houvessem os parênteses, a expressão seria do tipo
m = a + b + c + d + e / 5;
82. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
ARITMÉTICA
Exemplos de expressões algébricas e Java
Eis um exemplo da equação de uma linha reta:
Álgebra: y = mx + b
Java: y = m * x + b;
Nenhum parêntese é requerido. O operador de multiplicação ( *
) é aplicado primeiro porque a multiplicação tem uma
precedência mais alta que a adição.
A atribuição ( = ) ocorre por último porque ela tem uma
precedência mais baixa que a multiplicação ou adição.
83. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
ARITMÉTICA
Exemplos de expressões algébricas e Java
O exemplo seguinte contém operações de resto ( % ),
multiplicação, divisão, adição e subtração:
Álgebra: z = pr%q + w/x – y
Java: z = p * r % q + w / x - y;
A atribuição ( = ) ocorre por último porque ela tem uma
precedência mais baixa que a multiplicação ou adição.
1
2
3
4 5
6
Ordem em que
o Java aplica os
operadores
84. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
ARITMÉTICA
Avaliação de um polinômio de segundo grau
Para entender melhor as regras de precedência de
operadores, considere a avaliação de uma expressão de
atribuição que inclui um polinômio de segundo grau y = ax2 + bx
+ c
y = a * x * x + b * x + c
A atribuição ( = ) ocorre por último porque ela tem uma
precedência mais baixa que a multiplicação ou adição.
6 1 2 34 5
Da esquerda para a
direita
85. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
TOMADA DE DECISÃO: OPERADORES DE
IGUALDADE E OPERADORES RELACIONAIS
Uma condição é uma expressão que pode ser true
(verdadeira) ou false (falsa). Essa seção apresenta a
instrução de seleção if do Java que permite a um
programa tomar uma decisão com base no valor de
uma condição.
Por exemplo, a condição “nota é maior ou igual a 7.0”
determina se um aluno passou em um teste;
Se a condição em uma estrutura if for
verdadeira, o corpo da estrutura if é executada. Se a condição for
falsa, o corpo não é executado
As condições nas instruções if podem
ser formadas utilizando os operadores de igualdade ( == e != ) e
operadores relacionais ( >, <, >= e <= ) resumidos na tabela a
seguir:
86. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
TOMADA DE DECISÃO: OPERADORES DE
IGUALDADE E OPERADORES RELACIONAIS
Operador de igualdade
ou relacional algébrico
padrão
Operador de igualdade
ou relacional Java
Exemplo de
condição em
Java
Significado da
condição em
Java
Operadores de
igualdade
= == x == y x é igual a y
≠ != x != y x é diferente de y
Operadores relacionais
> > x > y x é maior que y
< < x < y x é menor que y
≥ >= x >= y x é maior que ou
igual a y
≤ <= x <= y x é menor que ou
igual a y
87. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
Laboratório: uso da instrução if
A Figura 2.15 utiliza seis instruções if para
comparar duas entradas de inteiros pelo usuário.
Se a condição em alguma dessas instruções if for
verdadeira, a instrução de saída associada com
essa instrução if é executada; caso contrário, a
instrução é pulada. O programa utiliza um
Scanner para inserir os dois inteiros do usuário e
armazena-os nas variáveis number1 e number2.
O programa então compara os números e exibe
os resultados das comparações que são
verdadeiras. São mostradas três saídas de
exemplo.
88. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
Três saídas diferentes do
aplicativo
89. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
COMENTANDO O CÓDIGO
Linha 20,
Scanner input = new Scanner( System.in
); - declara a variável Scanner input e lhe
atribui um Scanner que insere dados a partir
da entrada padrão (teclado);
Linhas 25 e 26,
System.out.print( “Enter first integer: “ );
number1 = input.nextInt();
solicitam que o usuário digite o primeiro
inteiro e insira o valor, respectivamente;
Uma instrução if espera uma instrução em
seu corpo, mas pode conter múltiplas
instruções se elas estiverem entre
parênteses ( { } );
Não há ponto-e-vírgula ( ; ) no final da
primeira linha de cada instrução if. Um
ponto-e-vírgula resultaria em um erro de
lógica em tempo de execução. Por exemplo:
if( number1 == number2 ); // erro de lógica
System.out.printf( “%d == %dn”,
number1, number2 );
Seria interpretado pelo Java como:
if( number1 == number2 )
; // estrutura vazia ou instrução
vazia
90. Programação Orientada a Objetos / Prof. Msc. Cícero Costa Quarto – cicero@engcomp.uema.br
REFERÊNCIA