Professional Documents
Culture Documents
2015
1 - Introduo a Programao
1.1 - Algoritmo
a descrio seqencial de aes a serem executados para o cumprimentode uma determinada
tarefa.
a forma pela qual descrevemos solues para problemas que sero implementadas posteriormente
em uma linguagem de programao e executadas pelo computador.
Pode ser escrito atravs de pseudo linguagens, como o Portugol, ou smbolos como em fluxogramas.
1.2 - Algoritmo x Programa
Um programa a converso, ou traduo, de um algoritmo para uma determinada linguagem de
programao, segundo suas regras de sintaxe esemntica da linguagem, de forma a permitir que o
computador possa interpretar e executar a seqncia de comandos pretendidos.
1.3 - Linguagem de Programao
Uma linguagem de programao um conjunto de smbolos (comandos,identificadores, caracteres
ASCII, etc. ...) e regras de sintaxe que permitem aconstruo de sentenas que descrevem de forma
precisa aes compreensveis eexecutveis para o computador.
1.4 Programa Fonte
O programa que escrevemos utilizando uma linguagem de programao, como o Pascal, a linguagem
C, Java, e outras, chamado de Programa Fonte. As linguagens de programao permitem que os
programas sejam escritos e interpretados pelo homem, mas no pode ser interpretado pelo
computador.
1.5 Programa Objeto
Programa Objeto a seqncia de comandos de um programa escritos em linguagem de mquina. A
linguagem de mquina composta de smbolos binrios que interpretada pelo computador, mas no
pode ser interpretada pelo homem.
1.6 Compilador
Compilador um programa que traduz o Programa Fonte escrito por um programador em um
Programa Objeto a ser interpretado pelo computador. Ou seja, um tradutor de Programa Fonte em
Programa Objeto.
1.7 A tabela ASCII
ASCII (American Standard Code for Information Interchange), em portugus: "Cdigo Padro
Americano para o Intercmbio de Informao". umacodificao de caracteres de sete bits (27 = 128
cdigos) ou 8 bits - ASCII estendida (28 = 256 cdigos) baseada no alfabeto ingls. Cada sequencia de
cdigos na tabela ASCII corresponde a um caractere, comumente representados pelos 8 bits
(equivalente a um byte). Os cdigos ASCII representam texto em computadores. Desenvolvida a partir
de 1960, grande parte das codificaes de caracteres modernas a herdaram como base.
O quadro abaixo mostra uma parte da tabela ASCII com os caracteres mais utilizados em
programao:
2 - A Linguagem JAVA
Java uma linguagem de programao orientada a objeto desenvolvida na dcada de 90 por uma
equipe de programadores chefiada por James Gosling, na empresa SunMicrosystems.
Diferentemente das linguagens convencionais, que so compiladas para cdigo nativo, a linguagem
Java compilada para um bytecode que executado por uma mquina virtual.
- segurana;
- orientao a objetos;
- recursos de rede;
- alta performance;
A sintaxe da linguagem Java se assemelha ao C++. Os programas fontes so arquivos do tipo texto
gravados com extenso .java . Estes programas fonte devem ser compilados com o copilador javac,
para a gerao do programa objeto Java com extenso .class , que so interpretados pela Mquina
Virtual Java (Java Virtual Machine).
Curiosidade: no ingls americano java uma verso
informal da palavra caf, ou seja, java significa caf,
da o motivo do smbolo da linguagem Java ser uma
chcara.
4 Comentrios no programa
Comentrios so textos inseridos no programa fonte com o objetivo de explicar ou
documentar uma lgica, uma varivel ou outro objeto qualquer.Os comentrios so ignorados
pelo compilador, portanto no so levados para o programa objeto. Os comentrios podem
ocupar uma ou mais linhas no programa, e para inseri-los se utiliza os smbolos /*...*/ ou
//
Apostila de LTP2 Java - Air Rabelo
Exemplos:
/* comentrio 1
comentrio 2 */
// comentrio 1
// comentrio 2
5 Variveis
Varivel uma regio identificada da memria que tem por finalidade armazenar informaes (dados)
de um programa em execuo. Uma varivel armazena apenas um valor por vez.
Toda vez que um valor atribudo a uma varivel, o seu valor anterior ser sobreposto. Portanto as
variveis armazenam apenas o ultimo valor atribudo a elas.
Sendo consideradocomo valor o contedo de uma varivel, este valor est associado ao tipo de dado
da varivel (inteiro, real, lgico, caracter, ...).
VELOCIDADE_LUZ
- LGICAS - assumem apenas dois valores: true ou false,ou seja, verdadeiro e falso.
byte
de 128 at 127
int
de 2.147.483.648 a 2.147.483.647
long
De -9.223.372.036.854.775.808 a
9.223.372.036.854.775.807
float
double
char
String
boolean
true ou false
1 bit
Exemplo:
publicclassClasseExemplo1{
publicstaticvoid main (String[] args) {
int idade;
floatsalario, peso, altura;
String nomeAluno;
char sexo;
booleanalunoFoiAprovado;
}
}
Apostila de LTP2 Java - Air Rabelo
idade = 25;
salario = 2786.50;
nomeAluno= "Marcelo dos Santos";
sexo = 'F';
alunoFoiAprovado = true;
//
//
//
//
//
tipo
tipo
tipo
tipo
tipo
int
float
String
char
boolean
7 Operadores
7.1 - Operadores Aritmticos
Os operadores aritmticos so utilizados para efetuar operaes aritmticas comnmero inteiros e
reais. So eles:
Operador
+
*
/
%
-++
O que representa
Soma
Subtrao
Multiplicao
Diviso
Resto da diviso
decremento de 1
Incremento de 1
Exemplo de uso
b + c
b a
x * y
x / y
10 % 3
a-a++
// resultado ser 1
// mesmo que a = a - 1
// mesmo que a = a + 1
+=
-=
*=
/=
%=
= ++
=
++
= -=
--
a
x
b
x
a
b
+= b
-= y
*= c
/= y
%= b
= ++a
b = a++
b = --a
b = a--
//
//
//
//
//
//
//
//
//
//
//
//
//
mesmo que a = a + b
mesmo que x = x - y
mesmo que b = b * c
mesmo que x = x / y
mesmo que a = a % b
mesmo que a = a + 1
em seguida b = a
mesmo que b = a
em seguida a = a + 1
mesmo que a = a - 1
em seguida b = a
mesmo que b = a
em seguida a = a - 1
OBS:Em Java, toda diviso entre inteiros resulta em um outro inteiro, ou seja, as casas decimais so
eliminadas (truncadas). Desta forma, uma diviso s retorna valor real (double ou float) contendo
casas decimais se um dos valores estiver expresso em casas decimais ou se for incluido no clculo o
tipo do resultado (typecasting).
Exemplo 1:
int idade = 21;
double fator = 200 / idade;
No Exemplo acima, o resultado da diviso 200 / idade que ser atribudo a varivel fator ser o
valor inteiro 9 ao invs de 9.5238, que o resultado real da diviso. Ou seja, como os operandos so
valores inteiros, o resultado da operao tambm ser inteiro, independentemente da varivel fator,
que est recebendo este resultado, ser do tipo double.
Exemplo 2:
int idade = 21;
double fator = (double) 200 / idade;
Neste segundo exemplo foi inserida na operao, entre parenteses, o tipo do resultado desejado,
neste caso, o valor que ser atribuido a varivel fator ser 9.5238 .
>
<
>=
<=
!=
==
O que representa
Maior que
Menor que
Maior ou igual a
Menor ou igual a
Diferente de
Igual a
O resultado de uma operao relacional sempre um valor lgico, ou seja, trueou false.
Exemplos, considere a = 1, b = 3 e c = 5
c
a
b
a
== a
> b
<= c
!= b
//
//
//
//
false
false
true
true
&&
||
!
O que representa
e (juno)
ou (escolha)
no (negao ou inverso)
Exemplos:
Considere a = 1 , b = 3 e c = 5
((a > b)&&(b <= c)) // FALSE e TRUE =>
FALSE
((a != b) || (c < b))
// TRUE ou FALSE =>
TRUE
(!(b <= c))
// no TRUE
=>
FALSE
Obs: no Java, todas os testes condicionais devem estar dentro de parnteses, os demais
parenteses separando as partes de uma expresso composta so opcionais. No entanto, esta
separao recomendada segundo os padres de codificao Java da Sun Microsystem para
facilitar o entendimento das prioridades da execuo.
7.4 -Tabela verdade para operaes lgicas:
Abaixo, segue trs tabelas, chamadas tabela-verdade, contendo o resultado douso dos operadores
lgicos sobre dois operandos.
Operando 1
true
true
false
true
true
false
-------------
Operador
e
e
e
ou
ou
ou
no
no
Operando 2
true
false
false
true
false
false
true
false
Resultado
true
false
false
true
true
false
false
true
Parnteses ( )
Mtodos (funes) Ex: Math.round() , Math.pow(), ...
Multiplicao, Diviso e Resto da Diviso * ,/ ,%
Soma e Subtrao + , Operadores Relacionais, sem ordem entre eles > , <,>=,<=,!=,==
6.
Operadores Lgicos na seguinte ordem: no, e, ou ! , && , ||
7.6 - Operador de Concatenao
O operador de concatenao efetua a juno de duas variveis ou constantes do tipo Stringou
char.
Exemplo:
publicclassExemploConcatenacao {
publicstaticvoid main(String[] args) {
String nome, sobreNome, nomeCompleto;
// Suponhamos o nome Josias Santos
nome = "Josias";
sobreNome = "Santos";
nomeCompleto = nome + ' ' + sobreNome;
System.out.println( nomeCompleto );
// Josias Santos
nomeCompleto = "Jose" + ' ' + "Maria";
System.out.println( nomeCompleto );
// Jose Maria
}
}
System.out.print("TESTE DE TELA");
TESTE DE TELA_
Exemplo2:
System.out.println("TESTE DE TELA");
TESTE DE TELA
_
Quando se utiliza estes comandos de sada de dados com varireis do tipo real (float ou double),
para evitar a exibio de nmero excessivo de casas decimais, pode-se fazer a formatao dos dados
10
de sada em relao ao nmero destas casas decimais. Para formatar decimais no Java deve-se
utilizar aclasseDecimalFormat que est contida no pacote de classes text, que dever ser
importado no incio do programa (import java.text.*;).
8.2 Entrada de Dados
Existe mais de uma forma de realizar entrada de dados no Java. Uma delas utilizando a classe
Scanner. A classe Scanner est contida no pacote til, ento necessrio import-lo no incio do
programa (import java.util.*;) .Neste caso, todas as entradas de dados so recebidas pelo
Java como uma sequencia de caracteres, que devero ser convertidos utilizando-se funes de
converso de tipos do Java:
Mtodo
next()
nextLine()
next().charAt(0)
nextInt()
nextLong()
nextByte()
nextFloat()
nextDouble()
Descrio
Aguarda a digitao de um valor do tipo String com uma palavra (sem espaos)
Aguarda a digitao de valor do tipo String, com uma ou mais palavras
Aguarda a digitao de valor do tipo char com apenas um caracter
Aguarda a digitao de um valor do tipo int
Aguarda a digitao de um valor do tipo long
Aguarda a digitao de um valor tipo byte
Aguarda a digitao de um valor tipo float
Aguarda a digitao de um valor tipo double
Exemplo:
import java.util.*;
publicclassExemploEntrada {
publicstaticvoid main(String[] args) {
// declarao das variveis
String nome;
char sexo;
float salario;
byte idade;
// entrada dos dados
Scanner leia;
// declara a varivel leiapara ser utilizada na classe Scanner
leia = new Scanner(System.in); /* inicializa a varivel leiapara receber os
valores de entrada da classe Scanner*/
System.out.print("Digite o Nome: ");
nome = leia.nextLine();
// recebe o valor digitado e armazena na varivel NOME
System.out.print("Digite o Salario: ");
salario = leia.nextFloat(); // recebe o valor digitado e armazena na var. SALARIO
System.out.print("Digite a Idade: ");
idade = leia.nextByte();
// recebe o valor digitado e armazena na varivel IDADE
System.out.print("Digite o Sexo: ");
sexo = leia.next().charAt(0); //recebe o valor digitado e armazena na var. sexo
// Sada de dados
System.out.println("O nome digitado foi: " + nome);
System.out.println("O salario digitado foi: " +salario);
System.out.println("A idade digitada foi: " +idade);
System.out.println("O sexo digitado foi: " +sexo);
}
}
11
Programa exemplo:
Faa um programa em Java que receba via teclado o Salrio e o Valor do Aumento Salarial de um
empregado. Em seguida o programa dever calcular e imprimir o novo salrio do empregado, que ser
a soma do atual salrio com o Valor do Aumento Salarial.
import java.util.*;
import java.text.*;
publicclassExemplo {
publicstaticvoid main(String[] args) {
// declarao das variveis
floatsalario;
float vlrAumento;
float novoSal;
// entrada dos dados
Scanner leia;
leia = new Scanner(System.in);
System.out.print("Digite o Salrio: ");
salario = leia.nextFloat();
System.out.print("Digite o Valor do Aumento: ");
vlrAumento = leia.nextFloat();
// clculos
novoSal = salario + vlrAumento;
// Sada de dados
System.out.print("Novo salrio:" + novoSal );
// Exemplo da sada de dados utilizando formatao de casas decimais
DecimalFormat decimal;
classe DecimalFormat */
/*abaixo, inicializao da varivel DECIMAL com formatao para impresso de nmeros reais com
duas casas decimais e separador de milhar */
12
9 Comando de alternativa IF
9.1 Alternativa Simples
Sintaxe:
Obs: quando existir apenas uma linha de comando dentro da estrutura de alternativa, no
necessrio que este comandos esteja entre chaves - {
}, no entanto, pelos padres de
codificao Java da Sun Microsystem, as chaves devem ser utilizadas sempre.
Exemplo1:
byteidade;
Scanner leia = new Scanner(System.in);
System.out.print(Digite a idade: ");
idade = leia.nextByte();
if (idade < 2) {
System.out.print( um beb ! ");
}
Exemplo2:
byteidade;
Scanner leia = new Scanner(System.in);
System.out.print(Digite a idade: ");
idade = leia.nextByte();
if (idade < 2) {
System.out.print(" um beb ! ");
idade = idade + 5;
}
9.2 Alternativa Composta
Sintaxe:
Um comando por
alternativa
if ( condio ) {
comando1;
} else {
comando2;
}
Exemplo1:
13
byteidade;
Scanner leia = new Scanner(System.in);
System.out.print(Digite a idade: ");
idade = leia.nextbyte();
if (idade < 2) {
System.out.print(" um beb ! ");
}else{
System.out.print(" No um beb ! ");
}
Exemplo2:
byteidade;
charsexo;
Scanner leia = new Scanner(System.in);
System.out.print(Digite a idade: ");
idade = leia.nextByte();
System.out.print(Digite o sexo: ");
sexo = leia.next().charAt(0);
if (idade < 2 &&sexo == 'M'){
System.out.print(" um beb menino ! ");
}elseif (idade < 2 &&sexo == 'F') {
System.out.print(" um beb menina ! ");
}
Exemplo3:
byteidade;
Scanner leia = new Scanner(System.in);
System.out.print(Digite a idade: ");
idade = leia.nextByte();
if (idade < 2) {
System.out.print(" um beb ! ");
idade = idade + 5;
}elseif (idade < 10) {
System.out.print(" uma criana ! ");
}elseif (idade < 16) {
System.out.print(" um adolescente ! ");
}else{
System.out.print(" um Adulto ! ");
idade = idade - 5;
}
14
Exerccio 1.2 Fazer um programa em Java que receba via teclado as medidas dos3 lados de um
tringulo. De acordo com os valores digitadoso programa dever imprimir o tipo do tringulo:
- no triangulo, se a soma de dois lados for menor ou igual ao terceiro lado;
- eqiltero, se os 3 lados forem iguais;
- issceles, se 2 lados forem iguais e 1 diferente;
- escaleno, se os 3 lados forem diferentes;
Exerccio 1.3 Faa um programa em Java para calcular e imprimir o Bnus Salarial e Desconto de
Vale Transporte para um empregado da Empresa ABCDrio LTDA. O programa dever receber via
teclado o Tempo de Casa e o Salrio do Empregado e considerar:
Tempo de Casa
At 5 anos
At 5 anos
De 6 a 10 anos
De 6 a 10 anos
De 6 a 10 anos
Acima de 10 anos
Salrio
At R$300,00
Acima de R$300,00
At R$500,00
Acima de R$500,00 at R$2000,00
Acima de R$2000,00
------------
Bnus
R$50,00
R$80,00
15% do Salrio
13% do Salrio
12% do Salrio
R$300,00
Vale Transporte
5% do Salrio
6% do Salrio
R$70,00
R$90,00
8% do Salrio
4% do Salrio
15
Caracteriza-se por verificar uma condioantes de entrar na repetio. Se a condio for verdadeira,
os comandos contidos dentro da estrutura do loop sero executados repetidamente enquanto a
condio permanecer verdadeira. Quando a condio se tornar falsa, os comandos que esto dentro
do loop no sero mais executados e encerrada a repetio, neste caso o programa segue
executando os comandos aps a repetio, ou seja, fora do loop.
Sintaxe:
Obs: quando existir apenas uma linha de comando dentro da estrutura de repetio while,
no necessrio que este comandos esteja entre chaves - {
}, no entanto, pelos padres
de codificao da Sun, as chaves devem ser utilizadas sempre.
Exemplo 1:
bytei = 1;
while (i <= 5) {
System.out.println("O valor de I : " + i );
i = i + 1;
}
Exemplo 2:
intarea;
int altura = 2;
int largura = 6;
int i = 1;
while (i <= 5) {
area = altura * largura;
System.out.println("Area : " + area);
altura = altura + 2;
largura--;
i++;
}
16
Obs: quando existir apenas uma linha de comando dentro da estrutura de repetio
do...while, no necessrio que este comandos esteja entre chaves - {
}, no entanto,
pelos padres de codificao da Sun, as chaves devem ser utilizadas sempre.
Exemplo:
int
int
int
int
do{
area;
altura = 2;
largura = 6;
i = 1;
ou
for (contador = valor inicial; condio ; incremento ou decremento) {
comando1;
comando2;
}
Obs: quando existir apenas uma linha de comando dentro da estrutura de repetio for, no
necessrio que este comandos esteja entre chaves - {
}, no entanto, pelos padres de
codificao Java da Sun Microsystem, as chaves devem ser utilizadas sempre.
17
Exemplo 1:
int
int
int
for
area;
altura = 2;
largura = 6;
(int i = 1; i<= 5; i++) {
area = altura * largura;
System.out.println("Area : " + area );
altura = altura + 2;
largura--;
}
Exemplo 2:
byte i;
for (i = 1; i <= 9; i = i + 2) {// i ser incrementado de 2 em 2
System.out.println("O valor de I : " + i );
}
Para se executar o for com passo negativo, ou seja, ao invs do valor da varivel <var1> ser
incrementado de 1 ou outro valorem cada execuo do loop, ele ser decrementado de 1 ou outro
valor.
Exemplo:
int
int
int
for
area;
altura = 2;
largura = 6;
(int i = 5; i>= 1; i--) { // i ser decrementado de 1 em 1
area = altura * largura;
System.out.println("Area : " + area );
altura = altura + 2;
largura--;
}
18
int area;
int altura = 2;
int largura = 6;
int i = 1;
do {
area = altura * largura;
System.out.print(area);
altura = altura + 2;
largura--;
i++;
} while (i <= 5);
int area;
int altura = 2;
int largura = 6;
for (int i=1; i<=5; i++) {
area = altura * largura;
System.out.print(area);
altura = altura + 2;
largura--;
}
19
Exerccio 2.2 Fazer um programa em Java para receber via teclado a ALTURA em metros e o SEXO
dos atletas de uma delegao. O programa dever calcular e imprimir:
- a maior altura encontrada
- a menor altura encontrada
- o nmero de atletas do sexo feminino
- a mdia da altura masculina
- a mdia geral das alturas.
Obs:
- adotar um flag para encerrar a entrada de dados
- consistir os valores digitados na entrada de dados de maneira que s podero ser aceitos:
SEXO = M ou F;
ALTURA maior que zero e menor ou igual a 2,5 metros;
Peas fabricadas no ms
at 30
de 31 a 40
acima de 40
At 50
acima de 50
Calculo do Salrio
R$500,00 + R$2,00 por pea fabricada
R$500,00 + R$2,30 por pea fabricada
R$500,00 + R$2,80 por pea fabricada
R$1.200,00
R$ 40,00 por pea fabricada
R$ 45,00 por pea fabricada
20
Exemplo 1:
Exemplo 2:
21
22
12 - VETORES e MATRIZES:
Ao se utilizar variveis, pode-se armazenar apenas um valor por vez. Considere um programa que
precisa armazenar as notas de 5 provas realizadas por um aluno. Uma opo seria criar cinco
variveis para armazenar as notas. Por exemplo:
12.1 Vetores
Este tipo de estrutura tambm chamado de matriz unidimensional. Um vetor declarado com seu
nome, tamanho e seu tipo. Para declarar um vetor em java basta abrir e fechar um colchete antes ou
aps a declarao de uma varivel, desta forma esta varivel na verdade ser um vetor. Em seguida,
dever ser informado o tamanho do vetor. Em java a primeira posio de um vetor sempre a de
nmero 0 (zero) e a ultima posio ser o tamanho do vetor menos 1.
Exemplo 1:
float notas[];
notas = newfloat[10];
1 2 3 4 5 6 7 8 9
notas
Obs: Uma varivel somente pode conter um valor por vez. No caso dosvetores, estes podero
armazenar mais de um valor por vez, pois so dimensionadosexatamente para este fim.
A declarao e a inicializao de um vetor pode ser escrita em apenas uma linha de comando:
Exemplo 2:
notas[0]
notas[1]
notas[2]
notas[3]
notas[4]
=
=
=
=
=
5.2;
8.0;
9.2;
7.5;
8.3;
Apostila de LTP2 Java - Air Rabelo
23
O nome o mesmo, o que muda a informao indicada dentro doscolchetes, ou seja, o ndice ou
posio do vetor, que representa a posio dentro do vetor onde ovalor est armazenado. Para o
exemplo anterior teramos:
notas
0
12.2 Matrizes
Usando mesmo exemplo do incio desta pgina, vamos supor que agora ser necessrio armazenar 4
notas dos mesmos 5 alunos, ao invs de apenas uma. Uma opo seria criar cinco vetores, um para
cada 4 notas de cada aluno. Entretanto, esta no a melhor soluo j que seria necessrio criar uma
estrutura de controle para cada vetor. A melhor opo seria criar uma nica matriz de duas dimenses
para armazenar cada uma das 4 notas dos 5 alunos.
Para declarar matrizes em java, da mesma forma que a declarao de vetores diferenciando-se
apenas no nmero de dimenses, j que o vetor possui apenas uma dimenso e matrizes possuem 2
ou mais dimenses. No caso de uma matriz de 2 dimenses, a primeira dimenso indica o nmero de
linhas e a segunda o nmero de colunas.
float notas[][];
notas = newfloat[5][4];
ou
float notas[][]= newfloat[5][4];
Neste caso, as linhas representam os alunos, e as colunas representas as notas:
notas
0
1
ALUNOS
2
3
4
8.5
5.0
7.0
8.5
5.5
9.0
6.8
7.5
8.0
8.0
7.8
8.7
5.7
9.2
7.2
8.9
6.5
7.8
7.9
7.0
24
Exemplo de programa:
import java.util.*;
publicclass exemplo {
publicstaticvoid main(String[] args){
String nomes[] = new String[50];
byte idades[] = newbyte[30];
int quantAlunosPorNota[] = newint[100];
String NomeAlunosDaSala[][] = new String[8][7];
intx;
idades[1] = 74; // atribuio do valor 74 para a posio 1 do vetor
Scanner leia = new Scanner(System.in);
for (x = 0; x <= 49; x++){
System.out.print("Digite o Nome " + x + ": ");
nomes[x] = leia.nextLine();
}
System.out.println(nomes);// Comando errado por no ter sido informada a
// posio desejada para impresso do vetor NOMES
System.out.println(nomes[10]); // comando correto
}
}
12.3 - Pesquisa Sequencial em Vetores
Este o tipo de pesquisa mais simples em vetores, no qual cada item do vetor examinado por vez e
comparado ao item que se est procurando, at ocorrer uma coincidncia. Este mtodo de pesquisa
lento, porm, a melhor opo para os casos em que os elementos do vetor encontra-se
desordenados.
Exemplo de Pesquisa Seqencial:
Criar um programa que inicialmente receba a digitao de 5 nomes e armazene em um vetor. Em
seguida o programa receber via teclado a digitao aleatria de Nomes e pesquisar se estes Nomes
esto contidos no vetor:
Algoritmo:
1- Criar uma repetio para receber a digitao dos 5 nomes para gravar no vetor
2- Criar uma repetio que receba a digitao aleatria de nomes enquanto o usurio assim desejar.
2.1- Criar uma outra repetio para pesquisar o nome digitado no vetor:
- Comparar o nome digitado com o primeiro elemento do vetor;
- se for igual, o elemento procurado foi encontrado,
- caso contrrio, avana para o prximo elemento do vetor.
- Se no for encontrado nenhum nome no vetor igual ao nome digitado, informar que
no existe o elemento pesquisado.
3- Encerrar a pesquisa quando desejado.
25
import java.util.*;
publicclass PesquisaSequencialEmVetor {
publicstaticvoid main(String[] args){
String nomePesquisa;
String nomes[] = new String[5];
int x;
boolean encontrou;
Scanner leia = new Scanner(System.in);
for (x = 0 ; x <= 4 ; x++){
System.out.print("Digite o Nome " + X + " para armazenar no Vetor: ");
nomes[x] = leia.nextLine();
}
do{
System.out.print("Digite o Nome para pesquisa (FIM para encerrar): ");
nomePesquisa = leia.nextLine();
if ( nomePesquisa.equals("FIM") ) {
break;
}
encontrou = false;
for (x = 0 ; x <= 4 ; x++){
if ( nomePesquisa.equals(nomes[x]) ){
encontrou = true;
break;
}
}
if (encontrou) {
System.out.println("Nome encontrado na posio "+x+" do vetor!");
}else{
System.out.println("O Nome digitado NO FOI ENCONTRADO NO VETOR !");
}
}while ( ! nomePesquisa.equals("FIM"));
}
}
26
27
13.4 - Parmetros
Os parmetros tm por finalidade servir como um ponto de comunicao entre o mtodo e o programa
de onde ele foi chamado. Desta forma, possvel passar valores de um programa para um mtodo por
meio de parmetros. Dentro do mtodo os parmetros funcionam como uma variveis Locais, ou seja,
s podem ser utilizados dentro do prprio mtodo.
Exemplo 2:
import java.util.*;
publicclass Exemplo2 {
publicstaticvoid main(String Args[]) {
int x = 5;
int y = 10;
int w = 8;
intq = 6;
subtrai(x,y);
System.out.println("Valor de X:" + x);
System.out.println("Valor de Y:" + y);
// X => 5
// Y => 10
subtrai(w,q);
System.out.println("Valor de W:" + w);
System.out.println("Valor de Q:" + q);
}
// W => 8
// Q => 6
28
}
Neste exemplo o mtodo SUBTRAI possui 2 parmetros: ae b. Quando o mtodo executado no
programa principal (mtodo main), devero ser utilizados dois valores como parmetros na chamada
do mtodo. O primeiro valor passado ser transferido para o primeiro parmetro do mtodo (parmetro
a) , e o segundo valor passado ser transferido para o segundo parmetro do mtodo (parmetro b).
Na primeira execuo (subtrai(x,y);) o valor da varivel x o primeiro valor passado, portanto,
este valor ser transferido para o parmetro a, e o valor da varivel y o segundo valor passado,
portanto, ser transferido para o parmetro b.
Na segunda execuo (subtrai(w,q);) o valor da varivel w o primeiro valor passado, portanto,
este valor ser transferido para o parmetro a, e o valor da varivel q o segundo valor passado,
portanto, ser transferido para o parmetro b.
Entretanto, aps a execuo do mtodo subtrai, os valores das variveis passados como
parmetro (x e y , w e q) no sofreram nenhuma alterao, porque no mtodo a subtrao
feita utilizando os parmetros Ae B, que so variveis locais, e isto no afeta os valores originais de
x,y,w eq.
Para que um mtodo altere o valor de uma varivel global, utilizada na passagem de parmetro, o
parmetro tem que ser declarado como parmetro por referncia.
13.5 Parmetros por Valor e por Referncia
Quando em um mtodo um parmetro e passado por Valor, o valor contido na varivel utilizada na
passagem de parmetro pelo programa que executou o mtodo copiado para a varivel de
parmetro do mtodo. Desta forma, as duas variveis, apesar de terem o mesmo valor, so
independentes e representam valores alocados em locais diferentes da memria.
No caso e um parmetro ser passado por Referncia, a varivel de parmetro do mtodo recebe
apenas um apontamento para o valor armazenado na memria pela varivel utilizada na passagem de
parmetro pelo programa que executou o mtodo. Ou seja, apesar de serem duas variveis, elas
apontam para um mesmo valor alocado na memria. Desta forma, se o valor de uma das variveis for
alterado, a alterao ocorrer na verdade, nas duas.
No Java, toda vez que uma varivel de tipo primitivo (como: int, float, doulble, long, char, boolean,
byte) for utilizada como parmetro, ser um parmetro por Valor. E os tipos no primitivos (como:
vetor, matriz, classes e outros objetos) so sempre parmetros por referncia.
Exemplo 3:
import java.util.*;
publicclass Exemplo3 {
publicstaticvoid main(String Args[]) {
int
int
int
int
x[]
y[]
w[]
q[]
=
=
=
=
newint[1];
newint[1];
newint[1];
newint[1];
x[0] = 5;
29
y[0] = 10;
w[0] = 8;
q[0] = 6;
subtrai(x,y);
System.out.println("Valor de X:"
System.out.println("Valor de
subtrai(w,q);
System.out.println("Valor de
System.out.println("Valor de
}
+ x[0]); // X => 3
Y:" + y[0]);
// Y => 9
W:" + w[0]);
Q:" + q[0]);
// W => 6
// Q => 5
30
}
}
Neste exemplo, o mtodo fatorial, possui o tipo int, isto significa que retornar um valor
int(inteiro) ao programa que o executou.
Neste
exemplo
execuo
do
mtodo
est
contida
dentro
do
prprio
comando
System.out.println, onde o valor exibido na tela ser o resultado retornado pelo mtodo.
Repare o comando returnna ultima linha do mtodo representando o momento que o mtodo est
retornando o valor calculado para o programa que o executou.
31
Salrio
---------999.99
999.99
999.99
999.99
Mdia Salrios
------------------999.99
999.99
999.99
999.99
32
Exerccio 4.3 - Fazer um programa para controlar as contas de uma rede de Hoteis. Receber via
teclado o Nome do Hspede, o Dia de Entrada no Hotel, o Dia de Sada do Hotel, o Tipo de Quarto e a
Cidade do Hotel.
O programa dever por meio de um mtodo de nome calcularConta, calcular e imprimir o valor da
Conta de cada hspede de acordo com a seguinte tabela:
Tipo de Quarto
STANDARD
LUXO
SUPER-LUXO
Valor da Diria
120,00
150,00
180,00
O valor da conta ser o valor da diria multiplicada pelo nmero de dirias da hospedagem. Para
descobrir o nmero de dirias, subtrair o dia de sada do dia de entrada no hotel.
Frmula =>
Ex:
Dia de Entrada: 20
Dia de Sada: 25
Tipo de Quarto: Luxo - Valor Diaria: 150,00
Valor da conta: ( 25 20 ) * 150,00 = 750,00
O mtodo dever receber como parmetro a Dia da Entrada e o Dia da Sada.
O programa dever imprimir no final um relatrio com o Nome do hspede e o Valor da Conta, de
todas as contas acima da mdia.
Consistncias:
- Fazer um mtodo de nome consistirCidade para consistir a Cidade do Hoteldigitada.
- Parmetro: Cidade do Hotel digitada.
- Este mtodo dever pesquisar no vetor vetCidades se o nome da cidade informada existe l,
caso positivo, o mtodo dever retornar o valor TRUE, caso negativo retornar o valor FALSE.
- Consistir o tipo de quarto para aceitar somente os valores STANDARD, LUXO ou SUPER-LUXO.
- O Dia de Sada dever ser maior que o Dia de Entrada.
Obs:
- declarar no programa um vetor global de nome vetCidades contendo os seguintes nomes de cidades:
BELO HORIZONTE, SO PAULO, RIO DE JANEIRO, SALVADOR e CURITIBA
- Criar um flag para encerrar a entrada de dados.
- O nmero mximo de hospedagens que o programa receber ser 100.
- Considerar que a entrada e sada no hotel ocorrem sempre no mesmo ms.
Layout do relatrio:
Relatrio de contas acima da mdia
Nome do hspede
Vlr Conta
-------------------------------- ------------XXXXXXXXXXXXXXXX
999.99
XXXXXXXXXXXXXXXX
999.99
XXXXXXXXXXXXXXXX
999.99
XXXXXXXXXXXXXXXX
999.99
33
doublevalor;
valor= Math.pow(2,4);
valor= Math.pow(5,2);
// valor= 16.0
// valor= 25.0
14.1.2 - ARREDONDAMENTO
Math.round(X)
Retorna um valor do tipo float correspondente ao valor arredondado de X.
Exemplo:
floatvalor;
valor= Math.round(2.3);
// valor= 2.0
valor= Math.round(3.85); // valor= 4.00
intvalor;
valor= (int) 2.3;
valor= (int) 3.85;
valor= (int) 243 / 10;
// o valor ser 2
// o valor ser 3
// o valor ser 24
34
Para facilitar a especificao da posio final, basta somar a posio inicial com o total de
caracteres desejados e o resultado ser a posio final:
- no caso do segundo comando do exemplo acima, a varivel subTexto2 receber a
substring "AREO". Se a posio inicial 0 (zero), e o total so 4 caracteres, basta somar 0 + 4, e o
resultado (4) a posio final.
- no caso do terceiro comando, a varivel subTexto3 receber a substring "RODI",
se a posio inicial 2 e o total so 4 caracteres, basta somar 2 + 4, e o resultado (6) a posio
final.
Exemplo:
35
Exemplo 2:
String textoA = "JORGE" ;
String textoB = "JOSE";
int result = textoA.compareTo(textoB);
System.out.println(result);//como o 1o e 2o caracteres das duas strings so iguais, a diferena ficar a partir
//do 3o. caracter. Como o 3o caracter de textoA vem antes do 3o. caracter do
//textoB, textoA menor que textoB,sendo assim o valor de result ser negativo
Exemplo 3:
String textoA = "hoje" ;
String textoB = "Hoje";
int result = textoA.compareTo(textoB);
System.out.println(result);//as strings so iguais exceto pelo primeiro caracter.Como o primeiro caracter de
// textoA minsculo, vem depois do primeiro caracter do textoB, ou seja,
// textoA maior que textoB, sendo assim o valor de result ser maior que zero.
36
intnumero = 15;
String texto;
texto = String.valueOf(numero);
System.out.println(texto);
// o valor exibido na tela ser 15
OBS:No exemplo 1, aps o uso do mtodo String.valueOf, a varivel numcontinuar contendo o
valor 15, e a varivel textopassar a conter o valor "15".
Exemplo 2:
String data;
intdia = 10;
intmes = 12;
intano = 1980;
data = String.valueOf(dia) + '/' + String.valueOf(mes) + '/' +
String.valueOf(ano);
System.out.print(data); // o valor exibido na tela ser 10/12/1980
OBS:No exemplo 2, aps o uso do mtodo String.valueOf nas variveis dia, mese ano, o
valor Caracter de cada uma delas ser concatenado com as barras ('/')e o resultado atribudo a
varivel dataficar com o valor "10/12/1980".
37
charcaracter;
intdigito = 5;
caracter = Character.forDigit(digito,10);
System.out.print(caracter);
// o valor exibido na tela ser 5
OBS:No exemplo 1, aps o uso do mtodo Character.forDigit, a varivel digitocontinuar
contendo o valor 5, e a varivel caracterpassar a conter o valor '5'.
Float.parseFloat(string)
O mtodo Float.parseFloatretorna uma cpia dastring convertida para o tipo float.
Double.parseDouble(string)
O mtodo Double.parseDoubleretorna uma cpia dastring convertida para double.
Byte.parseByte(string)
O mtodo Byte.parseByteretorna uma cpia dastring convertida para o tipo byte.
Long.parseLong(string)
O mtodo Long.parseLongretorna uma cpia da string convertida para o tipo long.
Exemplo 1:
intnumero;
int dia = 10;
String texto = "15";
numero = dia + Integer.parseInt(texto);
System.out.print(numero);
// valor exibido ser o nmero 25
Apostila de LTP2 Java - Air Rabelo
38
Exemplo 3:
Exemplo 4:
String texto;
doublenumero;
Scanner leia = new Scanner(System.in);
System.out.print("Digite o texto com caracteres nmericos: ");
texto = leia.nextLine();
try{
numero = Double.parseDouble(texto);
// ser exibido o nmero digitado
System.out.print(numero);
na entrada de dados
}catch (NumberFormatException E) {
System.out.print("O texto digitado no pode ser convertido em
nmero !");
}
Exemplo 5 (consistncia):
String texto;
intnumero;
booleanvalido;
Scanner leia = new Scanner(System.in);
do{
System.out.print("Digite o texto com caracteres nmericos: ");
texto = leia.nextLine();
Apostila de LTP2 Java - Air Rabelo
39
try{
numero = Integer.parseInt(texto);
System.out.print(texto);
// exibir o nmero digitado
valido = true;
}catch (NumberFormatException E){
System.out.println("O texto digitado no pode ser convertido em
nmero ! Digite Novamente");
valido = false;
}
}
while ( ! valido);
Exemplo 1:
intnumero;
charcaracter= '3';
numero = Character.digit(caracter,10);
// converso na base decimal
System.out.println(numero);
// o valor exibido ser o nmero 3
Exemplo 2:
intnumero;
charcaracter= 'R';
numero = Character.digit(caracter,10);
// converso na base decimal
System.out.println(numero);
// o valor exibido ser o nmero -1
OBS:No Exemplo 2, o caracter 'R' no pode ser convertido para um nmero decimal, sendo assim, a
varivel numerorecebeu como retorno da converso o valor -1, indicando que a converso no
possvel.
40
Exerccio 5.1 Faa um programa em Java para receber via teclado a data de nascimento de uma
pessoa e a data de hoje, ambas no formato string DD/MM/AAAA. O programa dever criar um mtodo
para calcular e imprimir a idade da pessoa.
Exerccio 5.2 Fazer um programa em Java para receber via teclado um cdigo caracter contendo 11
dgitos. Os 9 primeiros dgitos representam o cdigo em si e os 2 ltimos os dgitos representam os
dgitos verificadores. Utilizando a regra de clculo dos dgitos verificadores, o programa dever conter
um mtodo para calcular os dois dgitos verificadores do cdigo e comparar com os 2 dgitos
verificadores digitados no cdigo. Se forem iguais, o programa dever imprimir a mensagem: Dgito
Correto, caso contrrio imprimir Dgito Invlido.
O clculo dos dois dgitos verificadores dever ser feito baseando-se nos 9 primeiros dgitos do
Cdigo:
1. Dgito verificador:
1 - somar entre si o valor de cada dgito do cdigo
2 - dividir o resultado por 10
3 - o 1. Dgito ser a parte inteira do resultado da diviso do item 2 (acima).
2. Dgito verificador:
1 - multiplicar entre si o valor de cada dgito do cdigo
2 - o 2. Digito verificador ser o ultimo algarismo a direita do resultado da multiplicao
do item 1 (acima).
Exemplo:
9 primeiros dgitos do Cdigo: "821324312"
1. Digito verificador: 8+2+1+3+2+4+3+1+2 = 26 / 10 = 2,6 =>Parte inteira = 2
2. Digito verificador: 8*2*1*3*2*4*3*1*2 = 2304 =>Ultimo algarismo a direita = 4
OBS: - consistir a entrada de dados para aceitar somente CODIGO:
- com 11 caracteres
- todos os 11 caracteres devem ser dgitos
Exerccio 5.3 - Fazer um programa em Java para calcular uma conta telefnica. Sero digitadas via
teclado o HORRIO INICIAL e o HORRIO FINAL de cada ligao. Calcular e imprimir o CUSTO de
cada chamada de acordo com a tabela abaixo:
Intervalo de horrio
00:00 s 05:59
06:00 s 07:59
08:00 s 17:59
18:00 s 23:59
Custo do minuto
R$ 0,10
R$ 0,15
R$ 0,20
R$ 0,15
Obs:
- Receber os horrios em varivel do tipo String no formato HH:MM. Exemplo: "10:30";
- Imprimir o valor TOTAL DA CONTA TELEFNICA;
- Considerar que as ligaes sempre ocorrem dentro do mesmo dia;
- Considerar o valor do minuto relativo aHORRIO INICIAL da chamada para calcular o CUSTO da
chamada. Ex: se a chamada comeou as 06:30, o valor do minuto para toda a chamada ser R$0,15
independente de quanto tempo durar a chamada;
41
- Criar um mtodo de nome consistirHora que dever receber como parmetro uma hora no formato
HH:MM e consistir se HH est entre 0 e 23 e MM est entre 0 e 59. Caso afirmativo, o mtodo dever
retornar o valor TRUE, caso negativo o mtodo dever retornar o valor FALSE.
- Criar uma consistncia para que o HORRIO FINAL da chamada seja sempre maior que o
HORRIO INICIAL.
- Adote um Flag para encerrar a entrada de dados.
Exerccio 5.4 - O DETRAN deseja fazer o controle das multas de veculos. Faa um programa em
Java que receba via teclado a PLACA DO VECULO, a DATA DA MULTA (DD/MM/AAAA) e o VALOR
DA MULTA.
O programa dever consistir a entrada de dados da seguinte forma:
- A placa dever ser uma String de 7 caracteres e ser formada por trs letras e quatro dgitos. Ex:
GVP5566
- O valor da multa dever ser maior que zero.
- Fazer um mtodo de nome dataEhValida para consistir as datas de Entrada e Sada:
- o mtodo dever receber como parmetro uma data no formato DD/MM/AAAA
- a consistncia dever seguir as seguintes regras:
- a String dever ter 10 caracteres de tamanho.
- o 3. E o 6. Caracteres devero ser uma barra ('/').
- para os meses de Janeiro, Maro, Maio, Julho, Agosto, Outubro e Dezembro o dia
dever ser entre 01 e 31.
- para os meses Abril, Junho, Setembro e Novembro o dia dever ser entre 01 e 30.
- para o ms de Fevereiro o dia dever ser entre 01 e 28.
- os ms dever ser entre 01 e 12
- o ano dever ser menor ou igual a 2015.
- o mtodo dever retornar um valor do tipo Boolean. Caso a data recebida como parmetro
esteja de acordo com as regras acima a funo retornar o valor TRUE, caso contrrio,
retornar o valor FALSE.
42
intnumero;
numero = 100;
System.out.println((char)numero); // exibir na tela o caracter d , que o caracter
// de nmero 100 na tabela ASCII
System.out.println((char)42); // exibir na tela o caracter * , que o caracter
// de nmero 42 na tabela ASCII
charcaracter;
caracter = 'd';
System.out.println((int)caracter); //exibir na tela o nmero 100, que o nmero
// do caracter d na tabela ASCII
System.out.println((int)'*');
// exibir na tela o nmero 42, que o nmero
// do caracter * na tabela ASCII
Exemplo 1:
43
Exemplo 2:
String nome;
Scanner leia = new Scanner(System.in);
System.out.print("Digite o Nome: ");
nome = leia.nextLine().toUpperCase();
// o nome digitado atribudo para a varivel nomej transformado em letras maisculas
System.out.println("Nome em letras maisculas: " + nome);
char sexo;
Scanner leia = new Scanner(System.in);
System.out.print("Digite o Sexo: ");
sexo = leia.next().charAt(0);
if (Character.toUpperCase(sexo) !='M'&&
Character.toUpperCase(sexo) !='F' ){
System.out.print("Sexo Invlido ! ");
}else{
System.out.println("Parabns, voc digitou um sexo vlido ! ");
}
Exemplo 2:
charsexo;
Scanner leia = new Scanner(System.in);
System.out.print("Digite o Sexo: ");
sexo = leia.next().charAt(0);
sexo = Character.toUpperCase(sexo);
if ( sexo != 'M'&&sexo != 'F' ) {
System.out.print("Sexo Invlido ! ");
}else{
System.out.println("Parabns, voc digitou o sexo " + sexo +
" que vlido !");
}
44
Exemplo:
intposicao;
String texto1 = "FUMEC";
String texto2 = "UME";
String texto3 = "UMA";
String texto4 = "M";
posicao = texto1.indexOf(texto2);
System.out.println(posicao);
posicao = texto1.indexOf(texto4);
System.out.println(posicao);
posicao = texto1.indexOf(texto3);
System.out.println(posicao);
45
46
"/"
charvetorDeCaracteres[];
String texto= "DINAMICA";
vetorDeCaracteres= texto.toCharArray();
// o comando acima copia o contedo da String TEXTO para o vetor vetorDeCaracteres
// colocando cada caracter em uma posio do vetor
System.out.print(vetorDeCaractees[6]); // Exibir na tela o 6o. caracter do vetor => C
No exemplo 1, vetorDeCaracteres um vetor do tipo char que recebeu o seguinte
contedo:
Posio no vetor
0
1
2
3
4
5
6
7
Contedo 'D' 'I' 'N' 'A' 'M' 'I' 'C' 'A'
47
nome digitado:
Login gerado:
Senha gerada:
Obs:
48
Matrcula
054689
025478
009871
009871
(end of file)
Nome Aluno
JOSE DA SILVA
MARIA JOS
SAULO JORGE
SAULO SANTOS JORGE
Data
Nascimento
10/10/1980
20/12/1989
12/02/1992
22/02/1992
Mensalidade
Sexo
750,00
830,00
690,00
590,00
M
F
M
M
As incluses de novos registros so feitas sempre aps o ultimo registro do arquivo, em uma
rea chamada de END OF FILE (final de arquivo)
Para excluir registros fisicamente no arquivo no uma operao simples. Uma opo para
isto criar um novo arquivo, com nome diferente, efazer um programa paracopiar os registros
desejados para este novo arquivo, no copiando os registros a excluir. Depois excluir todo o
arquivo anterior e renomear o novo arquivo para o nome original daquele que foi excludo.
Para excluir um registro lgicamente no arquivo, basta criar um campo (campo Ativo no
exemplo acima) e considerar um valor para os registros vlidos e outro valor para registros
excludos. Desta forma, nos programas para incluir, alterar, consultar e excluir registros,
aqueles marcados como excludos devem ser ignorados, ou seja, considerados como se no
existissem. No exemplo acima, registros cujo campo Ativo forem iguais a S so vlidos, e
iguais a N so excludos.
Os campos de dados de um registro devero ser associados a um tipo de dado do Java (ex:
String, float, int,...)
49
"
"
"
"
"
+
+
+
+
+
regAluno.matricula);
regAluno.nomeAluno);
regAluno.dataNasc);
regAluno.mensalidade);
regAluno.sexo);
No exemplo acima, o registro foi criado como a classe Aluno, e dentro do mtodo main, a varivel
regAlunofoi criada e instanciada como sendo do tipo Aluno. A partiri deste ponto, regAlunoser
um registro contendo todos os campos da classe Aluno.
Exemplo:
50
try{
RandomAccessFile arqAluno = new RandomAccessFile("C:\\LTPII\\ALUNOS.DAT", "rw");
arqAluno.close();
}catch (IOException e) {
System.out.println("Erro na abertura do arquivo - programa ser finalizado");
System.exit(0);// cancela a excuo do programa
}
A classe RandomAccessFilepermite a gravao e a leitura de dados em arquivos de forma
aleatria e disponibiliza vrios mtodos para manipulao destes dado.
No exemplo acima, um arquivo com nome ALUNOS.DATser criado dentro da pasta C:\LTPII.
Caso o arquivo j exista dentro desta pasta, ao invs de criado ele ser apenas aberto para uso. Se o
drive\diretrio destino no for informado, o arquivo ser gravado dentro da pasta (diretrio) do projeto
do Eclipse onde a classe (programa) foi criada. O parmetro "rw" indica que o arquivo poder ser
utilizado para leitura ou gravao (read/write). Dentro do programa o arquivo ALUNOS.DAT ser
representado pela varivel arqAluno.
51
52
System.out.println("Nome do aluno.......:
System.out.println("Data de nascimento..:
System.out.println("Valor da mensalidade:
System.out.println("Sexo do aluno.......:
break;
}
"
"
"
"
+
+
+
+
regAluno.nomeAluno);
regAluno.dataNasc);
regAluno.mensalidade);
regAluno.sexo);
}
arqAluno.close();
}catch (EOFException e){
System.out.println("Esta matrcula no foi encontrada no arquivo !\n");
}catch (IOException e) {
System.out.println("Erro na abertura do arquivo - programa ser finalizado");
System.exit(0);
}
53
Ento usaremos a matriculacom campo chave para localizar um registro no arquivo e no ser
permitida a incluso alunos que contenha a mesma matricula, ou seja, o programa que inclui
registros no arquivo dever garantir que s sejam includos alunos com o nmeros de
matriculadiferentes.
54
}catch (IOException e) {
System.out.println("Erro na abertura do arquivo - programa ser finalizado");
System.exit(0);
}
}while (encontrou);
if (matriculaChave.equals("FIM")){
System.out.println("\n ************ PROGRAMA ENCERRADO ************** \n");
break;
}
regAluno.ativo= 'S';
regAluno.matricula= matriculaChave;
System.out.print("Digite o nome do aluno.........................: ");
regAluno.nomeAluno= leia.nextLine();
System.out.print("Digite a data de nascimento (DD/MM/AAAA).......: ");
regAluno.dataNasc= leia.nextLine();
System.out.print("Digite o valor da mensalidade..................: ");
regAluno.mensalidade= leia.nextFloat();
System.out.print("Digite o Sexo do aluno (M/F)...................: ");
regAluno.sexo= leia.next().charAt(0);
do{
System.out.print("\nConfirma a gravao dos dados (S/N) ? ");
confirmacao = leia.next().charAt(0);
if (confirmacao == 'S'){
try{
arqAluno= new RandomAccessFile("ALUNOS.DAT", "rw");
arqAluno.seek(arqAluno.length()); // posiciona no final do arquivo (EOF)
arqAluno.writeChar(regAluno.ativo);
arqAluno.writeUTF(regAluno.matricula);
arqAluno.writeUTF(regAluno.nomeAluno);
arqAluno.writeUTF(regAluno.dataNasc);
arqAluno.writeFloat(regAluno.mensalidade);
arqAluno.writeChar(regAluno.sexo);
arqAluno.close();
System.out.println("Dados gravados com sucesso !\n");
}catch (IOException e) {
System.out.println("Erro na gravaao do registro - programa ser finalizado");
System.exit(0);
}
}
}while (confirmacao != 'S'&&confirmacao != 'N');
leia.nextLine();
}while ( ! regAluno.matricula.equals("FIM"));
leia.close();
}
}
15.4.2 - Exemplo 2:
Programa para ALTERAO de dados em um registro de Alunos gravado em um arquivo em disco de
nome ALUNOS.DAT
import java.io.*;
import java.util.*;
publicclassExemploAlteracao{
publicstaticclassAluno{
publicchar
ativo;
public String matricula;
public String nomeAluno;
public String dataNasc;
publicfloat
mensalidade;
publicchar
sexo;
55
}
publicstaticvoid main(String[] args) {
AlunoregAluno = newAluno();
AlunonovoAluno = newAluno();
RandomAccessFile arqAluno;
// arqAluno a varivel que representar o arquivo em disco
Scanner leia = new Scanner(System.in);
booleanencontrou;
String matriculaChave;
charconfirmacao;
longposicaoRegistro = 0;
do{
do{
System.out.println(" *************** ALTERAO DE ALUNOS ***************** ");
System.out.print("Digite a Matrcula do Aluno que deseja alterar( FIM para encerrar ): ");
matriculaChave = leia.nextLine();
if (matriculaChave.equals("FIM")) {
break;
}
encontrou = false;
try{
arqAluno = new RandomAccessFile("ALUNOS.DAT", "rw");
while (true){
posicaoRegistro = arqAluno.getFilePointer();
regAluno.ativo
= arqAluno.readChar();
regAluno.matricula
= arqAluno.readUTF();
regAluno.nomeAluno
= arqAluno.readUTF();
regAluno.dataNasc
= arqAluno.readUTF();
regAluno.mensalidade = arqAluno.readFloat();
regAluno.sexo = arqAluno.readChar();
if ( matriculaChave.equals(regAluno.matricula) &®Aluno.ativo == 'S'){
encontrou = true;
break;
}
}
arqAluno.close();
}catch (EOFException e){
encontrou = false;
System.out.println("Esta matrcula no foi encontrada no arquivo !\n");
}catch (IOException e) {
System.out.println("Erro na abertura do arquivo - programa ser finalizado");
System.exit(0);
}
}while ( ! encontrou);
if (matriculaChave.equals("FIM")){
System.out.println("\n ************
break;
}
PROGRAMA ENCERRADO
************** \n");
56
System.out.println();
System.out.println("Valor Atual da mensalidade...................: " + regAluno.mensalidade);
System.out.print ("Digite o NOVO VALOR da Mensalidade...........: ");
novoAluno.mensalidade = leia.nextFloat();
System.out.println();
System.out.println("Sexo Atual do aluno..........................: " + regAluno.sexo);
System.out.print ("Digite o NOVO sexo do Aluno (M/F)............: ");
novoAluno.sexo = leia.next().charAt(0);
do{
System.out.print("\nConfirma a alterao dos dados (S/N) ? ");
confirmacao = leia.next().charAt(0);
if (confirmacao == 'S'){
try{
arqAluno = new RandomAccessFile("ALUNOS.DAT", "rw");
// desativando o registro antigo
arqAluno.seek(posicaoRegistro);
arqAluno.writeChar(regAluno.ativo);
// gravando o novo registro com as alteraes
arqAluno.seek(arqAluno.length()); // posiciona no final do arquivo (EOF)
arqAluno.writeChar(novoAluno.ativo);
arqAluno.writeUTF(novoAluno.matricula);
arqAluno.writeUTF(novoAluno.nomeAluno);
arqAluno.writeUTF(novoAluno.dataNasc);
arqAluno.writeFloat(novoAluno.mensalidade);
arqAluno.writeChar(novoAluno.sexo);
arqAluno.close();
System.out.println("Dados alterados com sucesso !\n");
}catch (IOException e) {
System.out.println("Erro na gravaao do registro - programa ser finalizado");
System.exit(0);
}
}
}while (confirmacao != 'S'&&confirmacao != 'N');
leia.nextLine();
}while ( ! regAluno.matricula.equals("FIM"));
leia.close();
}
}
15.4.3 - Exemplo 3:
Programa para CONSULTA de dados em um registro de Alunos gravado em um arquivo em disco de
nome ALUNOS.DAT
import java.io.*;
import java.util.*;
publicclassExemploConsulta {
publicstaticclassAluno{
publicchar
ativo;
public String matricula;
public String nomeAluno;
public String dataNasc;
publicfloat
mensalidade;
publicchar
sexo;
}
57
"
"
"
"
PROGRAMA ENCERRADO
+
+
+
+
************** \n");
regAluno.nomeAluno);
regAluno.dataNasc);
regAluno.mensalidade);
regAluno.sexo);
}while ( ! regAluno.matricula.equals("FIM"));
leia.close();
}
}
15.4.4 - Exemplo 4:
Programa para EXCLUSO de dados em um registro de Alunos gravado em um arquivo em disco de
nome ALUNOS.DAT
58
Obs: como a excluso fsica de registros uma operao complexa e demorada, normalmente o que
se faz uma excluso lgica dos registros. No programa abaixo, a excluso lgica se trata apenas de
alterar o valor do campo ativopara o valor 'N'. Sendo assim, nos programas de incluso, alterao,
consulta e no prprio de excluso, toda vez que um registro tiver o valor do campo ativo = 'N', este
registro ser ignorado e tratado como se no existisse, ou seja, est excludo !
import java.io.*;
import java.util.*;
publicclassExemploExclusao {
publicstaticclassAluno{
publicchar
ativo;
public String matricula;
public String nomeAluno;
public String dataNasc;
publicfloat
mensalidade;
publicchar
sexo;
}
publicstaticvoid main(String[] args) {
AlunoregAluno = newAluno();
RandomAccessFile arqAluno;
// arqAluno a varivel que representar o arquivo em disco
Scanner leia = new Scanner(System.in);
booleanencontrou;
String matriculaChave;
charconfirmacao;
longposicaoRegistro = 0;
do{
do{
System.out.println(" *************** EXCLUSO DE ALUNOS ***************** ");
System.out.print("Digite a Matrcula do Aluno que deseja excluir ( FIM para encerrar ): ");
matriculaChave = leia.nextLine();
if (matriculaChave.equals("FIM")) {
break;
}
encontrou = false;
try{
arqAluno = new RandomAccessFile("ALUNOS.DAT", "rw");
while (true){
posicaoRegistro = arqAluno.getFilePointer();
regAluno.ativo
= arqAluno.readChar();
regAluno.matricula
= arqAluno.readUTF();
regAluno.nomeAluno
= arqAluno.readUTF();
= arqAluno.readUTF();
regAluno.dataNasc
regAluno.mensalidade = arqAluno.readFloat();
regAluno.sexo = arqAluno.readChar();
if ( matriculaChave.equals(regAluno.matricula) &®Aluno.ativo == 'S'){
encontrou = true;
break;
}
}
arqAluno.close();
}catch (EOFException e){
encontrou = false;
System.out.println("Esta matrcula no foi encontrada no arquivo !\n");
}catch (IOException e) {
System.out.println("Erro na abertura do arquivo - programa ser finalizado");
System.exit(0);
}
}while ( ! encontrou);
59
if (matriculaChave.equals("FIM")){
System.out.println("\n ************
break;
}
PROGRAMA ENCERRADO
************** \n");
60
CONSISTNCIAS:
- o nome do cliente deve ter no mnimo 10 caracteres.
- o cdigo do cliente deve ser nmero inteiro e maior que (zero).
- o valor da compra deve ser maior que zero.
- o ano da primeira compra dever ser menor ou igual a 2013.
- emDia : por ser um campo do tipo boolean (lgico), no arquivo este campo deve ser preenchido
com o valor TRUE ou FALSE. Entretanto, para exibir o valor na tela o programa dever exibir S ou N,
e o usurio dever digitar tambm o valor S ou N para este campo. Para isto, o programa dever
utilizaruma varivel auxiliar do tipo char e solicitar ao usurio que responda a pergunta: ("Cliente
est em dia (S/N)?"). Se a resposta for 'S', atribuir TRUE ao campo emDia, caso contrrio,
atribuir o valor FALSE
- Quando o codClientefor digitado, verificar no arquivo se j existe algum outro registro que j
possua o codClienteinformado e com ativo == 'S'(registro no excludo). Caso existir,
mostrar uma mensagem de erro ("Cliente j cadastrado !"), e no permitir a incluso.
Questo 7.2 - Fazer os programas para alterar, consultar e excluir dados dos registros no arquivo do
exerccio anterior.
61