Ebook Programação Java - Ênfase em Orientação A Objetos
Ebook Programação Java - Ênfase em Orientação A Objetos
Ebook Programação Java - Ênfase em Orientação A Objetos
Novatec
captulo 1
O captulo 1 inclui o histrico da linguagem Java, detalhes que formam a linguagem, a plataforma Java, uma breve descrio sobre orientao a objetos, operadores
matemticos, tipos de dados primitivos e, por fim, as estruturas de controle e repetio. No final do captulo est disponvel uma lista de exerccios e o laboratrio 1,
que exercita a teoria apresentada no captulo. Esse laboratrio ser progressivo e
se estender at o captulo 9.
16
17
1.2.1 Simples
A linguagem Java considerada simples porque permite o desenvolvimento de
sistemas em diferentes sistemas operacionais e arquiteturas de hardware, sem que
o programador tenha que se preocupar com detalhes de infra-estrutura. Dessa
forma, o programador consegue desempenhar seu trabalho de uma forma mais
produtiva e eficiente.
Pensando em tornar a linguagem o mais simples possvel, os projetistas da linguagem Java optaram por no implementar o uso do conceito de herana mltipla,
de sobrecarga de operadores, ponteiros nem a operao aritmtica com esse tipo
de dado. Essas caractersticas podem ser encontradas em outras linguagens, como
C ou C++.
18
Manter conta (envolvendo abrir conta, fechar conta, alterar conta, pesquisar
conta e remover conta).
No paradigma utilizado pelo modelo estruturado seria necessrio criar um programa para manter clientes, um programa para manter conta, um programa para
movimentar caixa e um programa para emitir os relatrios. Cada programa dever
19
1.2.3 Multithread
A plataforma Java permite a criao de programas que implementam o conceito
multithread, incluindo sofisticados mecanismos de sincronizao entre processos.
O multithreading uma tcnica de programao concorrente, que permite projetar
e implementar aplicaes paralelas de forma eficiente.
20
1.2.4 Interpretada
A linguagem Java interpretada, ou seja, aps a compilao gerado um arquivo
intermedirio (nem texto nem executvel) no formato bytecode, que poder ser
executado em qualquer arquitetura (Windows, Linux, Mac e Unix) que tenha uma
mquina virtual Java instalada. A linkedio do programa no formato bytecode
realizada no momento de sua execuo de forma simples e totalmente gerenciada
pela JVM (Java Virtual Machine).
1.2.6 Portabilidade
O que garante a portabilidade dos programas desenvolvidos em Java a Mquina
Virtual Java (Java Virtual Machine JVM). Trata-se de uma especificao na qual o
compilador Java de cada plataforma ir se basear para gerar o cdigo em bytecode.
Na linguagem de programao Java, todo cdigo-fonte deve ser primeiramente
escrito em um arquivo no formato de texto e ser gravado em um arquivo com a
extenso .java. Aps a compilao desse arquivo pelo compilador (javac.exe), um
novo arquivo ser automaticamente criado com o mesmo nome do arquivo-fonte,
entretanto, com a extenso .class. O arquivo com extenso .class gerado representa
um arquivo no formato bytecode e poder ser executado em qualquer plataforma
que tiver uma JVM instalada. Uma vez gerado o arquivo no formato bytecode, ser
possvel executar o programa com o arquivo java.exe. O programa java.exe executa
um programa Java como uma instncia da JVM. A figura 1.2 apresenta as etapas
para compilao e execuo de um programa Java.
Na figura 1.2 h um programa Java sendo submetido ao compilador que ir
gerar um arquivo bytecode com a extenso .class independente da arquitetura do
sistema operacional utilizado. Esse .class poder ser executado por qualquer JVM
em qualquer ambiente operacional.
21
0100101...
Mquina
Virtual Java
Compilador
MeuPrograma.java
MeuPrograma.class
MeuPrograma.class
Compilao
Meu Programa
Execuo
Mquina
Virtual Java
Windows
Mquina
Virtual Java
UNIX
Mquina
Virtual Java
MacOS
22
como uma thread com baixa prioridade, procurando liberar memria que no est
sendo mais utilizada. Isso faz com que a memria liberada seja reutilizada por outra
parte do sistema, gerando um bom desempenho do sistema.
A linguagem Java tambm permite que um programa seja compilado em uma
plataforma (Windows, Linux ou Unix) especfica. Entretanto, nesse caso o programa
no poder ser portado em outra plataforma automaticamente, exigindo a necessidade de uma nova compilao.
1.2.8 Robusta
A linguagem Java foi projetada para gerar sistemas confiveis, pois fornece j em
tempo de compilao, por exemplo, uma checagem para identificar cdigo no-alcanvel. Entenda-se como cdigo no-alcanvel uma linha de cdigo que por algum
motivo na lgica de programao nunca ser executada. Como exemplo podemos
ter um comando return e logo abaixo a impresso de uma string. Nesse caso, a string
nunca seria impressa, por isso o compilador java gera um erro. A linguagem java
tambm oferece uma checagem para identificar variveis que foram definidas, porm
no foram inicializadas. O modelo de gerenciamento de memria extremamente
simples, sendo que aps a alocao de memria por meio do operador new no
necessrio que o programador libere esse espao alocado, pois o garbage collector
realiza essa atividade.
Outros fatores que contribuem para o rtulo de linguagem robusta so:
Inicializao das variveis e atributos inteiros com o valor 0 automaticamente ou com vazio no caso de variveis ou atributos do tipo string.
1.2.9 Segura
A linguagem Java foi criada para operar em ambientes distribudos, o que significa
que segurana de extrema importncia. Com as caractersticas projetadas na
linguagem Java, e principalmente na JVM, podemos garantir que em um ambiente
de rede nenhum programa Java permitir que outro programa escrito em qualquer
outra linguagem possa se esconder em um cdigo Java a fim de se instalar automaticamente.
23
Plataforma Java
24
que, para obter as vantagens da linguagem Java, precisamos conhecer muito bem
o paradigma da orientao a objetos, caso contrrio o programador continuar
desenvolvendo programas com a linguagem Java em formato estruturado.
25
importante observar que para executar o programa 01.01 sem erros precisamos
passar dois parmetros no momento da execuo. Temos duas opes para a execuo
de um programa java, sendo a primeira a utilizao do comando
java -cp . modulo01.HelloWorld 10 20
ou por meio da IDE Eclipse em Run > Run > Arguments > Program Arguments.
Visualize o espao em branco e coloque os dois parmetros no espao vazio separados por espao. A seguir apresentamos detalhadamente o que cada linha desse
programa representa e como devemos proceder para sua execuo.
Programa 01.01
package modulo01;
1 // Imprime na tela os argumentos recebidos e a frase Hello World
2 public class HelloWorld {
3 public static void main(String args[]) {
4 System.out.println("Parmetro 01: " + args [0]);
5 System.out.println("Parmetro 02: " + args [1]);
6 System.out.println("Hello World");
}
}
A seguir, descreveremos o que cada parte do programa representa. A linha 1 representa um comentrio em Java. Os comentrios so ignorados pelo compilador,
mas podem ajudar outros programadores a entender o propsito de seu programa.
H dois tipos de comentrios em Java. O primeiro representado por /* e */. Esse
tipo de comentrio oferece a possibilidade de comentar um bloco de informaes,
que pode se estender por vrias linhas. O segundo formato disponvel representado
por // e tem como objetivo comentar apenas uma linha do programa.
A linha 2 representa a definio da classe, que deve ser sempre seguida por {.
Em seguida, podemos criar mtodos e atributos. Para cada mtodo devemos ter
um { e, no final de cada mtodo, devemos ter um } que formaliza o final do mtodo. Tambm no final da classe precisamos de um }, para formalizar que a classe se
encerra nesse ponto. Todo o cdigo da classe deve ficar entre o { e o }. Qualquer
cdigo colocado fora desses limites apresentar erro na compilao. Existem algumas excees que representam cdigos que devem ser definidos fora desse limite.
So citados a seguir:
Comando import.
Comando package.
26
devemos nos posicionar no diretrio do projeto e, em seguida, executar o comando apresentado. Neste exemplo temos o diretrio D:\workspace\livro>. Pode ser
que esse diretrio seja diferente, dependendo do ambiente do leitor. Outro ponto
importante o diretrio que representa o nome do pacote. No diretrio do pacote
(neste exemplo, modulo01) utilizado no comando deve estar gravado o arquivo com
o nome da classe seguido da extenso .class (HelloWorld.class). Caso contrrio, um
erro ser apresentado, e o programa no ser executado.
O parmetro 10 estar disponvel no programa para ser acessado por meio da
posio 0 do vetor args (args[0]), enquanto o parmetro 20 estar disponvel para
ser acessado por meio da posio 1 do vetor args (args[1]), conforme as linhas 4 e
5 do programa 01.01.
27
ContaCorrente
APOLICE_SEGURO
ApoliceSeguro
VEICULO
Veiculo
28
Classe
nome_cliente
nomeCliente
saldo_conta
saldoConta
numero_conta
numeroConta
numero_agencia
numeroAgencia
Uma tabela de banco de dados pode conter operaes que venham a manipular
suas colunas a fim de gerar resultados que possam ser atualizados em outra tabela
ou gravados em um arquivo texto no formato de um relatrio. Essas operaes que
manipulam as colunas de uma tabela so conhecidas por stored procedures, e uma
tabela de banco de dados pode conter nenhuma ou vrias dessas operaes. Os mtodos em uma classe representam as operaes que a classe contm. Tais operaes
usam os atributos da classe, seja para alterao ou apenas para leitura, e processam
e geram resultados que podem ser usados para a gerao de um relatrio.
Como boa prtica de programao Java, podemos definir o nome de um mtodo
Java comeando com letra minscula e sendo um verbo no infinitivo (terminado
em ar, er, ir) seguido de um substantivo. Como exemplo de nomes de mtodos podemos ter: calcularPedido(), arquivarDocumento(), imprimirFichaCadastral(), efetuarSaque(),
efetuarDeposito(), entre outros. A tabela 1.3 apresenta exemplos de nomes usados para
stored procedures e mtodos.
Tabela 1.3 Exemplo de nomes de stored procedures e mtodos
Tabela
sp_recuperar_cliente_por_cpf(int cpf)
Classe
recuperarClienteporCPF (int cpf)
No podemos esquecer que uma tabela contm linhas, e estas representam os registros gravados na tabela. Podemos ter milhares de linhas gravadas em uma tabela sendo
que o limite seria a capacidade do disco rgido do servidor de banco de dados.
Em um ambiente orientado a objetos essas linhas das tabelas representaro
nossos objetos quando o programa estiver em execuo, ou seja, quando iniciar
sua execuo, o programador poder selecionar uma ou mais linhas da tabela e,
para trat-las em memria, o programa Java atribuir a elas um objeto do tipo da
classe correspondente. Esse objeto representa o modelo da classe no qual ele est
29
saldo_conta
numero_conta
numero_agencia
nomeCliente
saldoConta
numeroConta
numeroAgencia
Classe
nome_cliente
Tabela
Mauricio Oliveira
1000
9876543
1996
Mauricio Oliveira
1000
9876543
1996
Carlos Chiarello
9000
1234531
0003
Carlos Chiarello
9000
1234531
0003
Daniela Freire
850
9087670
0057
Daniela Freire
850
9087670
0057
Domingos Lucio
8569
9878652
0015
Domingos Lucio
8569
9878652
0015
Hideson Alves
1234
7654321
0090
Hideson Alves
1234
7654321
0090
Programa 01.02
package modulo01;
// Representao de uma classe com atributos e mtodos
public class ContaCorrente {
int conta;
int agencia;
double saldo;
static double cpmf; // atributo esttico
String nome;
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
30
A classe do programa 01.02 representa uma conta corrente com seus atributos,
mtodos de acesso (getXXX()) e mtodos modificadores (setXXX()). Os mtodos de
acesso e os modificadores de uma classe devem ser usados para que o programador
acesse ou altere seus atributos, sem a necessidade de faz-lo de forma direta. Apesar
de ser possvel realizar o acesso ou alterao de forma direta, segundo as boas prticas de programao e o conceito de encapsulamento, um atributo deve ser sempre
acessado por meio de seus mtodos de acesso ou mtodos modificadores. Outro
elemento que tambm fortalece esse modo de programao o uso de frameworks
como o Spring, que exige que um atributo tenha seus mtodos de acesso e seus
mtodos modificadores.
A classe ContaCorrente apresentada no programa 01.02 representa exatamente uma
tabela do banco de dados, onde definimos suas colunas (atributos) para receberem
registros. Em uma classe Java, diferentemente do ambiente de banco de dados, que
31
usa comandos SQL (select, update, insert etc.) e stored precedures para acessar suas
colunas, para acessar ou alterar os atributos de uma classe, podemos usar os mtodos de acesso (getXXX()) ou os mtodos modificadores (setXXX()). Em um mtodo
modificador podemos definir regras de validao para os atributos, evitando que
um valor invlido seja atribudo a um atributo.
Como exemplo de validao de um atributo, podemos especificar que a agncia
no pode ser inicializada com um parmetro (int agencia) com valor menor ou igual
a 0. Esse teste poderia ocorrer dentro do mtodo setAgencia (int agencia). Todos os
programas que usarem a classe ContaCorrente automaticamente estaro se beneficiando
dessa regra de validao. Caso o teste seja realizado em cada uma das classes Java
que use este atributo, com certeza haver redundncia de cdigo.
Programa 01.03
package modulo01;
// Criao de objetos em Java
public class Principal {
public static void main(String args[]) {
ContaCorrente objeto1 = new ContaCorrente(); // criando o objeto 1
ContaCorrente objeto2 = new ContaCorrente(); // criando o objeto 2
}
}
32
parmetros que o mtodo recebe ou retorna. Depois de ter esses dados em mos
podemos enviar mensagens usando o seguinte comando:
objeto1.efetuarSaque(100,00);
Neste exemplo estamos enviando uma mensagem para que o objeto objeto1 efetue
um saque de R$ 100,00 reais.
O programa 01.04 apresenta a classe ExemploMensagem realizando dois saques, sendo
o primeiro por meio do objeto1 e, o segundo, por meio do objeto2.
Programa 01.04
package modulo01;
// Envio de mensagens para o objeto
public class ExemploMensagem {
public static void main(String args[]) {
ContaCorrente objeto1 = new ContaCorrente();
objeto1.efetuarSaque(41.80);
ContaCorrente objeto2 = new ContaCorrente();
objeto2.efetuarSaque(131.10);
}
}
33
nenhum mtodo especfico, logo, podem ser acessados por qualquer um deles. O
programa 01.05 apresenta uma classe Java com dois mtodos, alm da diferena
entre variveis e atributos.
Programa 01.05
package modulo01;
// Exemplo de mtodos, variveis e atributos
import java.util.Date;
public class ExemploMetodo {
private int meuAtributo = 0; // pode ser usado por qualquer mtodo
public static void main(String[] args) {
Date today = new Date(); // today representa uma varivel
System.out.println(today);
imprimir(); // executando o mtodo imprimir
}
public static void imprimir() {
// esta varivel poder ser usada somente no mtodo imprimir()
int minhaVariavel = 0;
System.out.println("mtodo imprimir");
}
}
Esse programa cria um atributo chamado meuAtributo (private int meuAtributo = 0),
alm dos mtodos main() e imprimir(). O mtodo imprimir() cria uma varivel chamada
minhaVariavel. importante observar que o mtodo main() est executando o mtodo
imprimir(). Como j informado, uma varivel poder ser utilizada somente dentro
de um mtodo.
nome do mtodo;
34
Programa 01.06
package modulo01;
public class ContaCorrenteSobrecarga {
int conta;
int agencia;
double saldo;
void efetuarSaque(double valor) {
this.saldo = this.saldo - valor;
}
void efetuarDeposito(double valor) {
this.saldo = this.saldo + valor;
}
void imprimirSaldo() {
System.out.println(this.saldo);
}
void imprimirAtributos() {
System.out.println("Mtodo imprimirAtributos()");
}
void imprimirAtributos(int a) {
System.out.println("Mtodo imprimirAtributos (int a)");
}
void imprimirAtributos(char a) {
System.out.println("Mtodo imprimirAtributos (char a)");
}
void imprimirAtributos(int a, char b) {
System.out.println("Mtodo imprimirAtributos (int a, char b)");
}
void imprimirAtributos(char b, int a) {
System.out.println("Mtodo imprimirAtributos (char b, int a)");
}
// int imprimirAtributos(char a) {}
/* a linha anterior ir gerar um erro por estar duplicando a definio
do mtodo: void imprimirAtributos(char a). */
}
35
Programa 01.07
package modulo01;
// Representao de uma classe com atributos e mtodos
public class ContaCorrente {
int conta;
int agencia;
double saldo;
static double cpmf; // atributo esttico
String nome;
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
void efetuarSaque(double valor) {
this.saldo = this.saldo - valor;
}
36
Na classe ContaCorrente definimos o atributo cpmf como esttico, assim, no mtodo setCpmf(double cpmf) fizemos a atribuio ao atributo esttico por meio do nome
da classe (ContaCorrente.cpmf = cpmf), ou seja, um atributo esttico deve sempre ser
acessado pelo nome da classe. Apesar de ser possvel acessar um atributo esttico
usando um objeto, devemos optar pelo nome da classe. O programa 01.08 mostra
um exemplo de uso do atributo esttico apresentado no programa 01.07.
Programa 01.08
package modulo01;
// Exemplo do uso de atributo esttico
public class PrincipalEstatico {
public static void main(String args[]) {
ContaCorrente objeto1 = new ContaCorrente();
// acessando o atributo esttico por meio do nome da classe
ContaCorrente.cpmf = 0.0038;
objeto1.saldo = 200;
ContaCorrente objeto2 = new ContaCorrente();
37
objeto2.saldo = 400;
System.out.println("Manipulando objetos em Java\u2122");
System.out.println("\u00A9 Sun Microsystems, Inc.");
// atributo esttico sendo acessado por um objeto
System.out.println("objeto1 atributo esttico: " + objeto1.cpmf);
System.out.println("objeto1 atributo no esttico: " + objeto1.saldo);
// acessando o atributo esttico por meio de um objeto
System.out.println("objeto2 atributo esttico: " + objeto2.cpmf);
System.out.println("objeto2 atributo no esttico: " + objeto2.saldo);
objeto2.cpmf = 0.0010;
System.out.println("objeto1 atributo esttico: " + objeto1.cpmf);
System.out.println("objeto1 atributo no esttico: " + objeto1.saldo);
// acessando o atributo esttico por meio do nome da classe
System.out.println("objeto1 atributo esttico. Acessado pelo nome da classe: " + ContaCorrente.cpmf);
System.out.println("objeto1 atributo no esttico: " + objeto1.saldo);
No programa 01.08 estamos acessando o atributo esttico por meio de um objeto (objeto2.cpmf = 0.0010) e do nome da classe (ContaCorrente.cpmf = 0.0038). O acesso
realizado por meio do nome do objeto foi usado apenas para demonstrar que,
quando alteramos o valor de um objeto, os outros objetos passam a visualizar o
valor alterado. Porm, de acordo com as boas prticas, devemos sempre acessar um
atributo esttico por meio do nome da classe.
38
Tamanho/Formato
boolean
8 bits
true ou false
byte
8 bits
-128 a 127
short
16 bits
-32.768 a +32.767
int
32 bits
- 2.147.483.648 a +2.147.483.647
long
64 bits
-9.223.372.036.854.775.808 a +9.223.372.036.854.775.807
float
double
char
Valores vlidos
Uso
Descrio
v1 + v2
Adio
v1 - v2
Subtrao
v1 * v2
Multiplicao
v1 / v2
Diviso. A diviso entre dois nmeros inteiros resulta em outro nmero inteiro.
Ex.: 11 / 3 = 3
v1 % v2
39
Programa 01.09
package modulo01;
// Exemplo do uso dos operadores aritmticos
public class ExemploOperadorAritmetico {
public static void main(String args[]) {
int var1 = 5; // varivel var1
int var2 = 2; // varivel var2
System.out.println("var1 = " + var1);
System.out.println("var2 = " + var2);
System.out.println("-var2 = " + (-var2));
System.out.println("var1+ var2 = " + (var1 +
System.out.println("var1- var2 = " + (var1 System.out.println("var1* var2 = " + (var1 *
System.out.println("var1/ var2 = " + (var1 /
System.out.println("(float) var1/ var2 = " +
System.out.println("var1% var2 = " + (var1 %
System.out.println("var2 = " + var2);
}
}
Uso
++
v1++
++v1
--
Descrio
Incremento de uma unidade. Quando se coloca o operador aps a varivel, o
incremento ser feito aps o uso do valor da mesma na expresso (usa-se o valor e
depois ele incrementado).
Quando se usa o operador antes da varivel, o incremento ser feito antes do uso
do valor da mesma na expresso (incrementa-se primeiro e depois se usa o valor).
v1--
--v1
Quando se usa o operador antes da varivel, o decremento ser feito antes do uso
do valor da mesma na expresso (decrementa-se primeiro e depois se usa o valor).
40
Programa 01.10
package modulo01;
// Exemplo do uso dos operadores unrios
public class ExemploOperadorUnario {
public static void main(String args[]) {
int var1 = 10;
int var2 = 20;
int res = 0;
res = var1 + var2;
System.out.println("res: " + res); // imprime 30
// aps a execuo do operador = ser executado o operador ++ da varivel var1
res = var1++ + var2; // var1 vai valer 11 aps a execuo do operador =
System.out.println("res: " + res); // imprime 30
res = var1 + var2;
System.out.println("res: " + res); // imprime 31
res = var1 + --var2;
System.out.println("res: " + res); // imprime 30
}
}
30
30
31
30
Uso
Descrio
==
v1 == v2
Igualdade
!=
v1 != v2
Desigualdade
<
v1 < v2
Menor
<=
v1 <= v2
Menor ou igual
>
v1 > v2
Maior
>=
v1 >= v2
Maior ou igual
41
Programa 01.11
package modulo01;
// Exemplo do uso dos operadores relacionais
public class ExemploOperadorRelacional {
public static void main(String args[]) {
int var1 = 27;
int var2 = 74;
System.out.println("var1 = " + var1);
System.out.println("var2 = " + var2);
System.out.println("var1 == var2 -> "
System.out.println("var1 != var2 -> "
System.out.println("var1 < var2 -> "
System.out.println("var1 > var2 -> "
System.out.println("var1 <= var2 -> "
System.out.println("var1 >= var2 -> "
}
}
+
+
+
+
+
+
(var1
(var1
(var1
(var1
(var1
(var1
== var2));
!= var2));
< var2));
> var2));
<= var2));
>= var2));
= 27
= 74
== var2 -> false
!= var2 -> true
< var2 -> true
> var2 -> false
<= var2 -> true
>= var2 -> false
Uso
&&
v1 && v2
||
v1 || v2
Descrio
E lgico
OU lgico
Negao lgica
42
Uso
Equivale a:
v1 = v2;
Atribuio
+=
v1 += v2;
v1 = v1 + v2;
-=
v1 -= v2;
v1 = v1 - v2;
*=
v1 *= v2;
v1 = v1 * v2;
/=
v1 /= v2;
v1 = v1 / v2;
%=
v1 %= v2;
v1 = v1 % v2;
Programa 01.12
package modulo01;
// Exemplo do comando if
public class ExemploIf {
public static void main(String args[]) {
int var1 = 20;
int var2 = 10;
// modo de uso: if (condicao)
if (var1 > var2) {
// bloco de comandos do if
System.out.println("var1 maior que var2");
}
}
}
A condio (var1 > var2) sempre retornar um valor lgico, ou seja, verdadeiro ou
falso. Caso verdadeiro, o bloco de comandos abaixo da condio ser executado, caso
contrrio, no haver execuo. Caso o comando if retorne falso, podemos encadear
a execuo de um segundo bloco de comandos do comando else. O programa 01.13
mostra um exemplo envolvendo o comando if e o else.
43
Programa 01.13
package modulo01;
// Exemplo comando if e do comando else
public class ExemploIfElse {
public static void main(String args[]) {
int var1 = 10;
int var2 = 20;
// modo de uso: if (condicao)
if (var1 > var2) {
// bloco de comandos do if
System.out.println("var1 maior que var2");
} else { // condio avaliada como falso
// bloco de comandos do else
System.out.println("var1 menor que var2");
}
}
}
Alm dos comandos if e else h o comando switch, que tambm realiza a execuo de um bloco de comandos de acordo com uma deciso. Muitos programadores
se perguntam quando devem usar o switch e quando devem utilizar o comando if.
Qual dos dois comandos ser mais til?
O uso de cada um dos comandos depende da composio da estrutura de deciso. Devemos optar por usar o comando switch quando, no teste realizado, usarmos
uma mesma varivel, igualando-a com vrios valores diferentes. O programa 01.14
mostra um exemplo do uso do comando if, enquanto o programa 01.15 mostra um
exemplo do mesmo programa com o comando switch.
Quando usamos o comando switch devemos tambm usar em conjunto o comando case, que com base no valor da varivel do comando switch define qual opo
ser executada. Para que somente um entre os vrios comandos case seja executado,
devemos executar o comando break, logo aps a execuo dos comandos contidos
no bloco do comando case selecionado.
Quando quisermos que um mesmo bloco de comandos seja executado, para dois
ou mais diferentes valores do comando switch, devemos encadear a execuo dos
comandos case sem a execuo do comando break entre eles. Somente executamos
um comando break ao final dos comandos executados. importante observar que
o comando break interrompe a execuo do case.
H tambm o comando default, que representa uma exceo a todas as opes
listadas nos comandos case. importante observar que no comando switch s so
aceitas variveis do tipo int ou char. O uso de outro tipo primitivo gera um erro de
compilao.
44
Programa 01.14
package modulo01;
// Exemplo do comando if
import java.io.IOException;
public class ExemploIf02 {
public static void main(String[] args) throws IOException {
System.out.println("Digite uma das letras da palavra Java: ");
int numero = System.in.read(); // l do teclado apenas um caractere
if (((char) numero == 'J') || ((char) numero == 'j')
|| ((char) numero == 'A') || ((char) numero == 'a')
|| ((char) numero == 'V') || ((char) numero == 'v')) {
System.out.println("Letra digitada est correta.");
} else if ((char) numero == (char) 13) {
System.out.println("Foi digitado apenas um <enter>.");
} else {
System.out.println("Letra digitada est incorreta.");
}
}
}
Programa 01.15
package modulo01;
// Exemplo do comando switch. Uma alternativa ao uso do comando if
import java.io.IOException;
public class ExemploSwitch {
public static void main(String[] args) throws IOException {
System.out.println("Digite uma das letras da palavra Java: ");
int numero = System.in.read(); // l do teclado apenas um caractere
switch ((char) numero) {
case 'J':
case 'j':
case 'A':
case 'a':
45
case 'V':
case 'v':
System.out.println("Letra digitada est correta.");
break;
case (char) 13: // utilizado para tratar o enter
System.out.println("Foi digitado apenas um <enter>.");
break;
default:
System.out.println("Letra digitada est incorreta.");
}
}
}
46
Programa 01.16
package modulo01;
// Exemplo do uso do comando if com os operadores &&, ||, &, e |
// A classe Console precisa estar disponvel no pacote modulo01.estudodecaso.util
import modulo01.estudodecaso.util.Console;
public class ExemploOperadorLogico {
public static void main(String args[]) {
if (Console.readInt("\nNmero 1: ") > 10 && Console.readInt("Nmero 2: ") > 10) {
System.out.println("Os dois nmeros so maiores que 10");
} else {
System.out.println("O primeiro ou o segundo nmero no maior que 10");
}
if (Console.readInt("\nNmero 3: ") > 10 || Console.readInt("Nmero 4: ") > 10) {
System.out.println("Um dos nmeros maior que 10");
} else {
System.out.println("O terceiro ou o quarto nmero no maior que 10");
}
if (Console.readInt("\nNmero 5: ") > 10 & Console.readInt("Nmero 6: ") > 10) {
System.out.println("Os dois nmeros so maiores que 10");
} else {
System.out.println("O quinto ou o sexto nmero no maior que 10");
}
47
Representao grfica
Condio de fim
V
Bloco de comandos
Incremento
F
Fim - }
Programa 01.17
package modulo01;
// Exemplo do comando for
public class ExemploFor {
public static void main(String[] args) {
for (int var1 = 0; var1 < 27; var1++) {
System.out.println(var1);
}
}
}
48
Representao grfica
Inicio
while (condio)
{
bloco de comandos
}
Condio
V
Bloco de comandos
F
Fim - }
Programa 01.18
package modulo01;
// Exemplo do comando while
import java.io.IOException;
public class ExemploWhile {
public static void main(String[] args) throws IOException {
System.out.println("Digite f para terminar: ");
int letra = ' ';
while ((char)letra != 'f') {
// l do teclado apenas um caractere
letra = System.in.read();
}
}
}
H ainda uma terceira opo de comando de loop conhecido por do while. Difere
do while no sentido de permitir que pelo menos uma execuo do bloco de comandos seja executada antes de testar a condio. O bloco de comandos ser executado
enquanto a condio for verdadeira. A figura 1.7 mostra um exemplo da sintaxe do
comando do while, e a representao grfica do comando.
O programa 01.19 mostra um exemplo do comando do
while.
49
Representao grfica
Trecho
do
bloco de comandos
} while (condio);
Condio
F
Fim
Programa 01.19
package modulo01;
// Exemplo do comando do while
import java.io.IOException;
public class ExemploDoWhile {
public static void main(String[] args) throws IOException {
System.out.println("Digite f para terminar: ");
int letra = ' ';
do {
// l do teclado apenas um caractere
letra = System.in.read();
} while ((char)letra != 'f');
}
}
O comando do while ser usado nos laboratrios deste livro para a validao
da entrada dos dados via teclado. Teremos 9 laboratrios prticos que, de forma
progressiva, praticaro os comandos e conceitos apresentados no livro.
Programa 01.20
package modulo01;
// Exemplo do comando break
import java.io.IOException;
import java.util.Scanner;
50
51
Programa 01.21
package modulo01;
// Exemplo do comando continue
public class ExemploContinue {
public static void main(String args[]) {
for (int i = 0; i <= 30; i++) {
if ((i > 10) && (i < 20)) {
continue;
}
// apresenta na tela quando o i no estiver entre 10 e 20
System.out.println("i = " + i);
}
}
}
Programa 01.22
package modulo01;
// Exemplo da classe Scanner lendo dados do teclado
import java.util.Scanner;
public class ExemploScanner {
public static void main(String args[]) {
System.out.print("Digite um nmero inteiro: ");
Scanner var = new Scanner(System.in);
int numero = var.nextInt(); // declara e inicia a varivel
System.out.println("Valor digitado = " + numero);
System.out.print("Digite uma string composta: ");
/* definindo que o delimitador de leitura do objeto sc o enter. Para formalizar
que o delimitador o enter usamos os caracteres especiais \r\n.
O caracter padro do comando Scanner o espao em branco. */
Scanner sc = new Scanner(System.in).useDelimiter("\r\n");
/* como o delimitador do objeto sc igual a enter podemos usar o mtodo
next() para ler strings compostas. */
52
}
}
Programa 01.23
package modulo01;
// Exemplo da classe Scanner lendo dados de um arquivo
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ExemploScannerArquivo {
public static void main(String args[]) throws FileNotFoundException {
System.out.println("Nmeros contidos no arquivo: ");
/* o arquivo numeros.txt deve ficar gravado dentro do pacote modulo01 e possuir
o seguinte contedo: 1 3 4 6 34 23. */
Scanner sc = new Scanner(new File(".\\modulo01\\numeros.txt"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
System.out.println ("Nmero: " + aLong);
}
}
}
A classe Scanner permite a leitura de tipos de dados primitivos e strings. No primeiro exemplo do programa 01.22 a fonte usada para leitura foi o teclado (System.in),
e o tipo primitivo lido, o int. No segundo exemplo, a fonte de leitura foi um arquivo,
e o tipo de dado primitivo, o long.
53
Programa 01.24
package modulo01;
// Exemplo do atributo out e do mtodo printf
public class ExemploPrintf {
public static void main(String args[]) {
System.out.printf("|%8d|\n", 820);
System.out.printf("|%2.6f|\n", 1223.4432);
System.out.printf("|%2.2f|\n", 1223.4432);
System.out.printf("|%10.2f|\n", 1223.4432);
System.out.printf("|%010.2f|\n", 1223.4432);
System.out.printf("|%20f|\n", 1223.4432);
System.out.printf("|%.2f|\n", 1223.4432);
System.out.printf("|%10s|\n", "abcdefghijklmnopqrstuvxywz");
System.out.printf("|%10.8s|\n", "abcdefghijklmnopqrstuvxywz");
System.out.printf("|%10s|\n", "abcde");
// alinhado a esquerda System.out.printf("|%-10s|\n", "abcde");
// arredondamento na sexta casa
System.out.printf("%f\n", 10.123456589);
System.out.printf("%f\n", 10.123456389);
}
}
54
Descrio
imprimir()
Este mtodo no retorna valor e dever mostrar na tela todos
os atributos da classe Apolice. Para imprimir em Java usa-se
o comando System.out.println(NOME_ATRIBUTO).
calcularPremioApolice() Este mtodo no retorna valor e dever calcular o valor do
prmio seguindo as seguintes regras: caso a idade seja superior
a 18 e menor ou igual a 25 anos, use a frmula: valorPremio
+= (valorPremio * 20)/100. Quando a idade for superior a 25
e menor ou igual a 36 anos, use a frmula valorPremio +=
(valorPremio *15)/100. Quando a idade for superior a 36, use
a frmula valorPremio += (valorPremio * 10)/100.
oferecerDesconto()
Este mtodo no retorna valor, mas recebe o parmetro
cidade, que ir conter o nome da cidade para o clculo do
desconto. Caso a cidade seja Curitiba, d um desconto no
valor do prmio de 20%. Caso seja Rio de Janeiro, d um
desconto no valor do prmio de 15%. Caso seja So Paulo,
d um desconto no valor do prmio de 10%. Caso a cidade
seja Belo Horizonte, dar um desconto no valor do prmio
de 5%.
O programa 01.25 apresenta o resultado do exerccio 1. Essa classe pode ser comparada a uma tabela de banco de dados com colunas e stored procedures. Como a
classe no dever conter o mtodo main(), no poder ser executada. O exerccio 2
usar essa classe e implementar o mtodo main().
importante observar que usamos a palavra reservada this com o objetivo de
formalizar que a varivel um atributo. O captulo 3 apresenta maiores detalhes
sobre essa palavra reservada.
Programa 01.25
package modulo01.exemplosbasicos;
// Resposta do exerccio 1
public class Apolice {
String nome;
int idade;
double valorPremio;
public void imprimir() {
System.out.println("Nome:" + this.nome);
55
System.out.println("Idade:" + this.idade);
System.out.println("Valor Prmio:" + this.valorPremio);
}
public void calcularPremioApolice() {
if ((this.idade >= 18) && (this.idade <= 25)) {
this.valorPremio += (this.valorPremio * 20) / 100;
}
if ((this.idade > 25) && (this.idade <= 36)) {
this.valorPremio += (this.valorPremio * 15) / 100;
}
if (this.idade > 36) {
this.valorPremio += (this.valorPremio * 10) / 100;
}
}
public void oferecerDesconto(String nomeCidade) {
if (nomeCidade.equals("Curitiba")) {
this.valorPremio -= (this.valorPremio * 20) / 100;
}
if (nomeCidade.equals("Rio de Janeiro")) {
this.valorPremio -= (this.valorPremio * 15) / 100;
}
if (nomeCidade.equals("So Paulo")) {
this.valorPremio -= (this.valorPremio * 10) / 100;
}
if (nomeCidade.equals("Belo Horizonte")) {
this.valorPremio -= (this.valorPremio * 5) / 100;
}
}
}
1.8.2 Exerccio 2
Desenvolver uma segunda classe Java chamada
estrutura:
PrincipalApolice
com a seguinte
Executar o mtodo
tela.
Executar o mtodo
tela.
imprimir()
imprimir()
56
Programa 01.26
package modulo01.exemplosbasicos;
// Resposta do exerccio 2
public class PrincipalApolice {
public static void main(String[] args) {
Apolice novoObj = new Apolice();
novoObj.idade = 25;
novoObj.nome = "Gustavo Baravieira Costa";
novoObj.valorPremio = 500;
System.out.println();
System.out.println("Imprimindo os dados inicializados");
novoObj.imprimir();
novoObj.calcularPremioApolice();
System.out.println();
System.out.println("Imprimindo os dados aps a execuo do mtodo calcularPremioApolice");
novoObj.imprimir();
novoObj.oferecerDesconto("Curitiba");
System.out.println();
System.out.println("Imprimindo os dados aps a execuo do mtodo oferecerDesconto");
novoObj.imprimir();
}
}
1.8.3 Exerccio 3
Desenvolver uma classe chamada Acampamento com os seguintes atributos: nome, equipe,
idade. Em seguida, implementar os seguintes mtodos:
separarGrupo()
57
Descrio
Este mtodo no retorna valor e deve exibir os atributos na tela.
Este mtodo no retorna valor e dever verificar as seguintes condies: se a idade estiver entre 6 e 10 anos, atribuir A ao atributo
equipe; se a idade estiver entre 11 e 20, atribuir B ao atributo equipe;
se a idade for superior a 21 anos, atribuir C ao atributo equipe.
Programa 01.27
package modulo01.exemplosbasicos;
// Resposta do exerccio 3
public class Acampamento {
// atributos da classe
String nome;
String equipe;
int idade;
public void imprimir() {
System.out.println("Nome: " + this.nome);
System.out.println("Equipe: " + this.equipe);
System.out.println("Idade: " + this.idade);
}
public void separarGrupo() {
if ((this.idade >= 6) && (this.idade <= 10)) {
this.equipe = "A";
}
if ((this.idade >= 11) && (this.idade <= 20)) {
this.equipe = "B";
}
if (this.idade >= 21) {
this.equipe = "C";
}
}
}
1.8.4 Exerccio 4
Desenvolver uma segunda classe Java chamada PrincipalAcampamento com a seguinte
estrutura:
58
Executar o mtodo
tela.
imprimir()
Programa 01.28
package modulo01.exemplosbasicos;
// Resposta do exerccio 4
public class PrincipalAcampamento {
public static void main(String[] args) {
Acampamento novoObj = new Acampamento();
novoObj.idade = 22;
novoObj.nome = "Rafael Zanetti";
// no precisamos atribuir valor para equipe, pois ela ser definida por meio da idade
System.out.println("Imprimindo os dados inicializados");
novoObj.imprimir();
novoObj.separarGrupo();
System.out.println();
System.out.println("Imprimindo os dados aps a execuo do mtodo separarGrupo");
novoObj.imprimir();
}
}
1.8.5 Exerccio 5
Desenvolver uma classe chamada Computador com os seguintes atributos: marca, cor,
modelo, numeroSerie, preco. Implementar os seguintes mtodos:
59
Mtodo
Descrio
Este mtodo no retorna valor e deve exibir os atributos na tela.
calcularValor() No retorna valor e dever verificar as seguintes condies: caso a
marca seja HP, acrescentar 30% ao preo; caso seja IBM, acrescentar
50% ao preo; caso seja qualquer outra, manter o preo original.
alterarValor() Este mtodo recebe um valor como parmetro. Atribuir este valor
ao atributo preo, caso o valor do parmetro recebido seja maior
que 0. Caso seja maior que 0, o mtodo alterarValor() dever, alm
de atribuir o valor ao atributo preco, retornar 1. Caso contrrio, no
atribuir o valor ao atributo preco e retornar 0.
imprimir()
Programa 01.29
package modulo01.exemplosbasicos;
// Resposta do exerccio 5
public class Computador {
String marca, cor, modelo;
int nSerie;
double preco;
public void imprimir() {
System.out.println("Marca:
System.out.println("Cor:
System.out.println("Modelo:
System.out.println("Nmero de srie:
System.out.println("Preo:
}
public void calcularValor() {
if (this.marca.equals("HP")) {
this.preco = this.preco * 1.30;
}
if (this.marca.equals("IBM")) {
this.preco = this.preco * 1.50;
}
}
public int alterarValor (double novoValor)
if (novoValor > 0) {
this.preco = novoValor;
return 1;
}
return 0;
}
}
"
"
"
"
"
+
+
+
+
+
this.marca);
this.cor);
this.modelo);
this.nSerie);
this.preco);
60
1.8.6 Exerccio 6
Desenvolver uma segunda classe Java chamada
estrutura:
PrincipalComputador
com a seguinte
Executar para o novo objeto o mtodo imprimir() e analisar o que ser exibido
na tela.
Programa 01.30
package modulo01.exemplosbasicos;
// Resposta do exerccio 6
public class PrincipalComputador {
public static void main(String[] args) {
Computador novoObj = new Computador();
novoObj.marca = "HP";
novoObj.cor = "Preto";
novoObj.modelo = "DV6383";
novoObj.nSerie = 987654312;
novoObj.preco = 3000;
System.out.println("Imprimindo os dados inicializados");
novoObj.imprimir();
novoObj.calcularValor();
System.out.println();
System.out.println("Imprimindo os dados aps a execuo do mtodo calcularValor");
novoObj.imprimir();
Computador novoObj01 = new Computador();
novoObj01.marca = "IBM";
novoObj01.cor = "Branco";
novoObj01.modelo = "IBM583";
novoObj01.nSerie = 9873312;
novoObj01.preco = 4000;
novoObj01.calcularValor();
System.out.println();
System.out.println("Imprimindo dados aps a execuo do mtodo calcularValor");
novoObj01.imprimir();
int ret = novoObj01.alterarValor(2000);
if (ret > 0) {
System.out.println("Valor alterado");
} else {
System.out.println("Valor NO alterado");
}
System.out.println();
System.out.println("Imprimindo dados aps a execuo do mtodo alterarValor");
novoObj01.imprimir();
System.out.println();
System.out.println("Executando o mtodo alterarValor com valor negativo");
ret = novoObj01.alterarValor(-1300);
if (ret > 0) {
System.out.println("Valor alterado");
} else {
System.out.println("Valor NO alterado");
}
System.out.println();
System.out.println("Imprimindo dados aps a execuo do mtodo alterarValor");
novoObj01.imprimir();
}
}
61
62
1.8.7 Exerccio 7
Desenvolver uma classe Java chamada ContaCorrente com a seguinte estrutura:
Atributos: conta, agencia, saldo e nomeCliente
63
Mtodos:
Mtodo
Descrio
sacar()
Retorna valor 1 caso o saque seja realizado ou 0 se no houver saldo suficiente na conta. Dever receber como parmetro o valor a ser sacado.
depositar() Realizar o depsito do valor recebido como parmetro. No deve retornar
valor.
imprimir()
Exibir na tela os atributos da classe. Esse mtodo no retorna nada.
Programa 01.31
package modulo01.exemplosbasicos;
// Resposta do exerccio 7
public class ContaCorrente {
int conta, agencia;
double saldo;
String nomeCliente;
public int sacar(double valor) {
if (this.saldo >= valor) {
this.saldo = this.saldo - valor;
return 1;
}
return 0;
}
public void depositar(double valor) {
this.saldo = this.saldo + valor;
}
public void imprimir() {
System.out.println("Nmero da conta: " + this.conta);
System.out.println("Nmero da agncia: " + this.agencia);
System.out.println("Saldo da conta corrente: " + this.saldo);
System.out.println("Nome do cliente: " + this.nomeCliente);
}
}
1.8.8 Exerccio 8
Desenvolver uma segunda classe Java chamada PrincipalContaCorrente com a seguinte
estrutura:
Criar um atributo da classe ContaCorrente para ser usado pelos mtodos da classe
para realizar saques e depsitos. No se esquecer de executar o operador new para
o atributo criado.
Obs.: ateno, pois ao executar o programa s poderemos fazer um saque se j
tivermos realizado um depsito.
64
Mtodos:
Mtodo
main()
Descrio
Implement-lo conforme o padro da linguagem Java. O mtodo
main() dever criar um loop para o usurio escolher entre as opes
cadastrar, sacar, depositar ou consultar. Se for selecionada a opo
sacar, executar o mtodo execSaque(). Se for selecionado depositar,
executar o mtodo execDeposito(). Para a opo consultar, executar
o mtodo execConsulta(). Para a opo cadastrar, executar o mtodo
execCadastro().
execSaque()
Solicitar ao usurio que digite um valor e executar o mtodo sacar()
da classe ContaCorrente usando o atributo criado. Testar o retorno
do mtodo sacar(). Se for retornado 1, exibir saque realizado, caso
contrrio, exibir saque no realizado.
execDeposito() Solicitar ao usurio que digite um valor e executar o mtodo
depositar() da classe ContaCorrente usando o objeto criado anteriormente.
execConsulta() Apresentar os atributos na tela executando o mtodo imprimir() da
classe ContaCorrente.
execCadastrar() Solicitar que o usurio realize a leitura dos dados via teclado e
em seguida realize a atribuio dos valores lidos do teclado aos
atributos do objeto da classe ContaCorrente, criado como atributo
dessa classe.
Programa 01.32
package modulo01.exemplosbasicos;
// Resposta do exerccio 8
import java.util.Scanner;
public class PrincipalContaCorrente {
ContaCorrente cc = new ContaCorrente();
public static void main(String[] args) {
PrincipalContaCorrente obj = new PrincipalContaCorrente();
int op = 0;
while (op != 9) {
Scanner sc = new Scanner(System.in);
System.out.println("1 - Cadastrar");
System.out.println("2 - Saque");
System.out.println("3 - Depsito");
System.out.println("4 - Consultar saldo");
System.out.println("9 - Sair");
System.out.println("Entre com uma opo: ");
op = sc.nextInt();
switch (op) {
case 1:
obj.execCadastrar();
break;
1.8.9 Exerccio 9
Desenvolver uma classe Java chamada Eleitoral com a seguinte estrutura:
65
66
Descrio
Seguir a mesma especificao dos demais mtodos. O mtodo imprimir()
dever executar o mtodo verificar() como ltimo comando.
O mtodo verificar() no retorna valor nem recebe parmetro. Deve
exibir na tela mensagens de acordo com as seguintes condies: caso
a idade seja inferior a 16 anos, exibir na tela Eleitor no pode votar;
para idade superior ou igual a 16 anos e inferior ou igual a 65, exibir
na tela Eleitor deve votar. Para idade superior a 65 anos, exibir a tela
Voto facultativo.
Programa 01.33
package modulo01.exemplosbasicos;
// Resposta do exerccio 9
public class Eleitoral {
String nome;
int idade;
public void imprimir() {
System.out.println("Nome do eleitor: " + this.nome);
System.out.println("Idade do eleitor: " + this.idade);
// executar o mtodo verificar para que este imprima seu resultado na tela
verificar();
}
public void verificar() {
if (this.idade < 16) {
System.out.println("Eleitor no pode votar");
}
if ((this.idade >= 16) && (this.idade <= 65)) {
System.out.println("Eleitor deve votar");
}
if (this.idade > 65) {
System.out.println("Voto facultativo");
}
}
}
1.8.10 Exerccio 10
Desenvolver a classe PrincipalEleitoral com a seguinte estrutura:
Atributo: valor
67
Mtodo:
Mtodo
main()
Descrio
Implement-lo conforme o padro da linguagem Java. Criar um objeto
da classe Eleitoral e atribuir valores aos parmetros. Executar o mtodo
imprimir() e analisar os valores exibidos na tela.
Programa 01.34
package modulo01.exemplosbasicos;
// Resposta do exerccio 10
public class PrincipalEleitoral {
public static void main(String[] args) {
Eleitoral el = new Eleitoral();
el.idade = 20;
el.nome = "Thiago F. P. David ";
el.imprimir();
}
}
1.8.11 Exerccio 11
Desenvolver uma classe Java chamada Estoque com a seguinte estrutura:
Atributos: nomeProduto, valor e quantidade.
Mtodos:
Mtodo
Descrio
imprimir()
Seguir a mesma especificao dos demais mtodos.
verificarDisponibilidade() Deve retornar um valor inteiro e receber um parmetro inteiro. O mtodo verificarDisponibilidade() dever retornar 1
caso existam produtos disponveis ou 0 em caso contrrio.
A existncia de produtos disponveis significa que o atributo
tem quantidade maior que 0 e maior ou igual ao parmetro
recebido.
removerProdutos()
O mtodo removerProdutos() retorna um inteiro e dever
receber como parmetro a quantidade de elementos que
sero removidos. Antes da remoo deve-se verificar se h
disponibilidade do produto solicitado. Para isso executar,
o mtodo verificarDisponibilidade() e, caso este retorne 1, o
mtodo remover estoque poder diminuir o valor recebido
como parmetro do total do atributo quantidade. O mtodo
removerProdutos() dever retornar 1, caso tenha sucesso na
remoo dos produtos. Caso contrrio, retornar 0 informando
que no foi possvel remover a quantidade solicitada.
68
Programa 01.35
package modulo01.exemplosbasicos;
// Resposta do exerccio 11
public class Estoque {
String nomeProduto;
int quantidade;
double valor;
public void imprimir() {
System.out.println("Nome do produto: " + this.nomeProduto);
System.out.println("Quantidade do produto: " + this.quantidade);
System.out.println("Valor do produto: " + this.valor);
}
public int verificarDisponibilidade (int quant) {
if ((this.quantidade > 0) && (this.quantidade >= quant)) {
return 1;
}
return 0;
}
public int removerProdutos (int quant) {
int ret = verificarDisponibilidade(quant);
if (ret == 1) {
this.quantidade = this.quantidade - quant;
return 1;
}
return 0;
}
}
1.8.12 Exerccio 12
Desenvolver a classe PrincipalEstoque com a seguinte estrutura:
Mtodo:
Mtodo
main()
Descrio
Implement-lo conforme o padro da linguagem Java. Criar um objeto da
classe Estoque e atribuir valores aos parmetros.
Criar trs objetos da classe Estoque e atribuir valores para os atributos. Exercitar
a chamada dos mtodos para que seja possvel analisar todas as possibilidades que
os mtodos criados retornam.
O programa 01.36 mostra o resultado do exerccio 12.
69
Programa 01.36
package modulo01.exemplosbasicos;
// Resposta do exerccio 12
public class PrincipalEstoque {
public static void main(String[] args) {
// criando o objeto es1 do tipo Estoque
Estoque es1 = new Estoque();
es1.nomeProduto = "Mochilas";
es1.quantidade = 100;
es1.valor = 10;
es1.imprimir();
int ret = es1.verificarDisponibilidade(100);
if (ret == 1) {
System.out.println("Produto na quantidade
}
else{
System.out.println("Produto na quantidade
}
ret = es1.verificarDisponibilidade(500);
if (ret == 1) {
System.out.println("Produto na quantidade
}
else{
System.out.println("Produto na quantidade
}
// criando o objeto es2 do tipo Estoque
Estoque es2 = new Estoque();
es2.nomeProduto = "Pastas";
es2.quantidade = 50;
es2.valor = 250;
// criando o objeto es3 do tipo Estoque
Estoque es3 = new Estoque();
es3.nomeProduto = "Telefones";
es3.quantidade = 150;
es3.valor = 59;
ret = es3.verificarDisponibilidade(120);
if (ret == 1) {
System.out.println("Produto na quantidade
}
else {
System.out.println("Produto na quantidade
}
}
}
informada disponvel");
informada NO disponvel");
informada disponvel");
informada NO disponvel");
informada disponvel");
informada NO disponvel");
1.9 Laboratrio 1
A figura 1.8 representa o diagrama de classes usado pelo laboratrio 1.
70
1.9.1 Objetivo
Esse laboratrio tem como objetivo aplicar os conhecimentos referentes a construo
de classes Java, comandos de entrada e sada, classe String, estruturas de controle,
estruturas de repetio, criao de classe, objetos e mtodos.
Introduo:
Antes de iniciarmos o laboratrio necessrio:
71
1.9.2 Definio
Fazer uma classe Java chamada Lab01Sistema no pacote modulo01.estudodecaso.view que
fique em loop mostrando o menu a seguir, at que se entre com a opo de fim.
Layout:
1 - Cadastramento
2 - Saque
3 - Depsito
9 - Fim
Opo :
Para a opo 1 - Cadastramento deve-se solicitar que o usurio leia os dados
referentes a uma conta corrente. Para isso, desenvolver o mtodo chamado execCadastramento() que mostre os textos e realize a leitura dos dados conforme o layout
a seguir:
Layout mtodo cadastramento
Nmero da conta:
1112223
Nome do cliente:
Webster Freire
Saldo:
99999.99
72
Nmero da agncia:
1996
Nmero da conta:
8728232
Valor do saque:
120.99
De maneira similar desenvolver o mtodo execDeposito() para a opo 3 - Depsito. Nada ser passado como parmetro para o mtodo, e ele deve solicitar que
seja digitado com o teclado o valor para agncia, conta e valor do depsito.
Layout mtodo depsito
Nmero da agncia:
1996
Nmero da conta:
1288273
Valor do depsito:
10000.99
1.9.2.1 Sugestes
Fazer um loop infinito e, caso se entre com a opo 9, terminar com break ou usar
o comando System.exit (0). Esse comando encerra definitivamente o programa.
A leitura das variveis poder ser feita por meio da classe Console disponvel
no pacote modulo01.estudodecaso.util. Tambm possvel realizar a leitura com a
classe Scanner.
73
Essa forma de uso da classe possvel devido aos mtodos serem estticos.
Exemplo do uso da classe Scanner:
74
Programa 01.37
package modulo01.estudodecaso.view;
// Resposta do Laboratrio 1
import java.util.Scanner;
// A classe Console precisa estar disponvel no pacote modulo01.estudodecaso.util.
import modulo01.estudodecaso.util.Console;
public class Lab01Sistema {
int numAge;
int numConta;
double valor;
private void leValores() {
do {
this.numAge = Console.readInt("Nmero da agncia: ");
} while (this.numAge <= 0);
do {
this.numConta = Console.readInt("Nmero da conta: ");
} while (this.numConta <= 0);
do {
this.valor = Console.readDouble("Valor: ");
} while (this.valor <= 0.0);
}
public void execCadastramento() {
String nome = null;
// usando a classe Scanner como uma opo de leitura
Scanner sc = new Scanner(System.in);
char opcao;
leValores();
do {
System.out.println("Nome do cliente: ");
nome = sc.nextLine();
} while (nome.equals(""));
opcao = Console.readChar("Confirma cadastramento (S/N): ");
if ((opcao == 'S') || ((opcao == 's'))) {
System.out.println("Cadastramento realizado com sucesso.");
} else {
System.out.println("Cadastramento no realizado.");
}
}
public void execSaque() {
char opcao;
leValores();
opcao = Console.readChar("Confirma saque (S/N): ");
if ((opcao == 'S') || ((opcao == 's'))) {
System.out.println("Saque efetuado com sucesso.");
} else {
System.out.println("Saque no realizado.");
}
}
75