Você está na página 1de 101

Centro de Formao

So Domingos

40

Fundamentos de Programao
em

Java
guia prtico

Joaquim Jos Hangalo

Luanda, 2011
40

Guia prtico de introduo


programao e linguagem java
com Orientao a Objectos

Princpios da programao na
linguagem Java
Como qualquer linguagem de programao, a linguagem Java tem
regras estritas indicando como os programas devem ser escritos.
bom ter familiaridade com a sintaxe da linguagem, aprendendo a
reconhecer e definir os tipos primitivos, identificadores e expresses
em Java

Antes de comear
Convenes do Cdigo Java
a) Classes: O nome da classe deve ter a inicial maiscula e as demais
minsculas. Quando voc utiliza dois nomes, as iniciais devem ser
maisculas.
class MeuPrimeiroPrograma
b) Interfaces: A mesma regra aplicada s classes
c) Mtodos: Devem iniciar com letra minsculas e as iniciais das
prximas palavras devem ser maisculas.
informeSalario()
d) Variveis: Devem iniciar com letra minsculas e as iniciais das
prximas palavras devem ser maisculas.
clienteCorrente
e) Constantes: Devem ser todas em maisculas, com as palavras
separadas por sublinhado.
IDADE_MAXIMA 40
f) Utilizar identao de cdigo
g) boa prtica comentar o cdigo!

Palavras Reservadas

abstract double int strictfp


boolean else interface super
break extends long switch
byte final native synchronized
case finally new this
catch float package throw
char for private throws
class goto protected transient
const if public try
continue implements return void
default import short volatile
do instanceof static while

Regras gerais para escrever um programa


em Java

Um programa em Java constitudo de uma ou mais classes


delimitadas por chaves { }, onde uma destas classes,
obrigatoriamente possui um mtodo chamada main(). As principais
regras so:
Letras maisculas e minsculas so tratadas como caracteres
diferentes;
O formato do texto livre;
O mtodo main(){} especifica onde o programa comea e
termina de ser executado;
Todos os comandos so terminados por ponto e vrgula;
Todas as variveis devem ser declaradas;
{ mtodo comea a ser executado; 40

} mtodo termina de ser executado.

Elementos bsicos da Linguagem

Tipos de dados, variveis e contas

As variveis e constantes so os elementos bsicos que um programa


manipula

Tipos de Dados

Determinam o conjunto de valores e as possveis operaes


realizadas sobre os mesmos; informam a quantidade de memria (em
bytes) que uma varivel pode ocupar;
Cada tipo de dado possui um intervalo de valores permitido.
Na linguagem Java existem dois grupos de tipos de dados:
1. Tipos bsicos primitivos, chamados de built-in types que so
divididos em trs categorias (numricos, booleanos e caracteres);
2. Tipos compostos os quais so dividis em trs categorias (Strings,
arrays e personalizados)
Tipos de dados Primitivos
Java uma linguagem de programao fortemente orientada a
objetos e, com exceo dos tipos primitivos, qualquer coisa em Java
uma classe/objeto.
Tipos Numricos Inteiros
Tipo Tamanho Faixa
e
m 40
bi
ts
byte 8 -128 at +127
short 16 -32,768 at +32,767
int 32 -2,147,483,648 at+2,147,483,647
long 64 -9,223,372,036,854,775,808 at
+9,223,372,036,854,775,807
Tipos Numricos Reais
Tipo Tamanho Faixa
em bits
float 32 -3.40292347E+38 at +3.40292347E+38
doubl 64 -1.79769313486231570E+308 at
e +1.79769313486231570E+308
Tipo caracter
Tipo Tamanho Faixa
em bits
char 16 UNICODE - 65536 caracteres possveis
Observao: Um caracter delimitado por apstrofos caracter. O
que causa confuso, pois as Strings so delimitadas por aspas
String.
Caracteres Especiais de Escape:
'\u0000' a caracteres Unicode
'\uFFFF'
\b retrocesso
\t tab
\n avano de linha
\r retorno de carro
\ aspas
\' apstrofo
\\ barra invertida
Observao: A linguagem Java no possui o tipo primitivo string,
bastante conhecido em vrias outras linguagens. Para manipulao
de texto so utilizadas as classes String e StringBuffer.
Tipo Lgico
Tipo Faixa
boolean true ou false

Quadro Resumo
40

Tipo Natureza Valores permitidos Tamanho


(bytes)
boolean Lgico false / true 1
char Texto 1 caractere (x) 1
String Texto cadeira de caracteres um objeto
(Ol)
byte Inteiro -27 at 27-1 1
short Inteiro -215 at 215-1 2
int Inteiro -231 at 231-1 4
long Inteiro -263 at 263-1 8
float Ponto - 4
Flutuante
double Ponto - 8
Flutuante

Em java alguns tipos primitivos tm uma classe contentora (wrapper)

Tipos primitivos Classe wrapper


boolean Boolean
int Integer
double Double
long Long
float Float
-- String
-- Date
char Char

Variveis
Uma varivel um espao reservado na memria do computador
para armazenar um determinado tipo de dado.
Uma Varivel: objeto que pode assumir diversos valores; espao
de memria de um certo tipo de dado associado a um nome para
referenciar o seu contedo
A varivel o ncleo de um objecto. Varveis so espaos nomeados
na memria que armazenam valores e para cada espao de memria 40
associado um nome (identificador) e o tipo de valor a ser
armazenado, dentre os tipos primitivos temos o tipo numricos,
caracteres, boobelanos e referencia.
Uma varivel representa a unidade bsica de armazenamento
temporrio de dados e composta por um tipo, um identificador
(nome), um tamanho e um valor.

Declarao de Variveis

Declaro a instruo para reservar uma quantidade de memria


para um certo tipo de dado, indicando o nome pelo qual a rea ser
referenciada .

Sintaxe
>> tipo de dado nomeDaVarivel; ou
>> tipo nome1, nome2,...,nomen

Ex: String nome;


int idade, num;
nomeDaVarivel tambm chamado identificador

Regras para nome de identificadores(das variveis)


Permite letras e nmeros
Comea com uma letra ou "$" ou "_"
Possui tamanho ilimitado. Quantos caracteres se quiser
(32);
No pode ser uma das palavras reservadas. No se pode
definir um identificador com o mesmo nome que uma palavra
reservada (ver tabela das palavras reservadas) 40
A linguagem Java case sensitive" , diferencia
maisculas de minsculas
peso != Peso != pEso

importante observar certos padres para a definio de


identificadores para variveis.
O uso de nomes curtos indicado para reduzir o volume de
cdigo a ser escrito.
Evitar o uso de caracteres acentuados, espaos e smbolos especiais
pode ser aconselhvel para tornar o programa potencialmente mais
portvel.

Nomenclatura dos nomes das variveis


As variveis so nomeadas com um atributo no singular
No so utilizados os smbolos de sublinhado (-) ou
Os nomes compostos de mltiplas palavras so
organizados segundo o padro CamelCase, com todas as palavras
juntas, onde a primeira letra da primeira palavra minscula e das
restantes palavra a primeira letra de cada uma fica em maiscula
Ex: nomeDoAluno, salarioAnual, mediaSemestral
Exemplo
public class Variaveis {
public static void main(String[] args) {
int idade;
idade = 30;
System.out.println(idade);
}
}

O escopo de uma varivel o bloco de cdigo onde ela visvel.


No caso de um atributo (varivel membro) o seu escopo a prpria
classe, j no caso de uma varivel ou argumento (varivel local) o
seu escopo comea na chamada de um mtodo e termina quando o
mesmo finaliza.
40

Constantes
As constantes podem ser declaradas em qualquer lugar dentro de
uma classe ou de um mtodo.
Para definir uma constante no Java, utiliza-se o modificador final e,
no seu identificador, todas as letras devem ser maisculas (de acordo
com a conveno de codificao). O seu contedo uma vez atribudo
no poder mais ser alterado.
A sintaxe para a definio de constantes :
[modificador de acesso] static final tipo idetificador = valor;

Exemplo

public static final float PI = 3.141592;


final Boolean DEBUG = false;

Inicializao de variveis.
Inicializar uma varivel atribuir um valor varivel
Sintaxe: A sintaxe para a inicializao de variveis :
tipo var_1 = valor_1 [, var_2 = valor_2, ...]
Onde tipo o tipo de dado, var_1 o nome da varivel a ser
inicializada e valor_1 o valor inicial da varivel.

Operador e atribuio
Para se inicializar uma varivel utiliza-se o operador de atribuio =
importante notar que, em java, o operador de igualdade tem
outra notao ==.

int idade = 24;


String nome=Maria Sapalo
Nenhuma varivel em um programa Java pode ser usada antes de ser
inicializada. Quando um objeto criado, as variveis so inicializadas 40
automaticamente com os seguintes valores:

byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0D
char \u0000
boolean false
Referncias a null
Objectos

Todas as variveis locais devem ser iniciadas manualmente!


Variveis Locais: variveis declaradas no escopo de mtodos ou em
estruturas de controle.

Converso entre tipos primitivos (Casting)

possvel transformar um tipo primitivo em outro, atravs de uma


operao chamada typecast, colocando o tipo destino da
transformao, entre parntesis, antes da expresso a ser convertida.
Esse tipo de converso chamado de converso explcita. Por outro
lado existe a converso implcita, a qual realizada pela MVJ, mesmo
sem possuir operador de typecast, isso quando o tipo de retorno
menos abrangente que o tipo que o recebe.
int x = 8;
float y = x;
x= (int)y;

O casting do tipo com preciso menor para um tipo com maior


preciso, temos uma promoo (widening conversions)
O casting do grande para o pequeno, acarreta um rebaixamento
(narrowing conversions)
Abaixo esto relacionados todos os casts possveis na linguagem
Java. A indicao Impl. quer dizer que aquele cast implcito e 40
automtico, ou seja, no preciso indicar o cast explicitamente.

Programa(s) introducao.TiposPrimitivos.java
Demonstrao
/**
* Demonstrao de Tipos Primitivos
*/
package introducao;

public class TiposPrimitivos {

public static void main ( String[] args ) {


/* Declarando tres variaveis do tipo float */
float nota1, nota2, nota3;
/* Inicializando as tres variveis float */
nota1 = 10;
nota2 = 7;
nota3 = 3;
/* Declarando e inicializando trs variaveis float*/
float n1 = 5, n2 = 2, n3 = 9;

int idade = 28;


char sexo = 'M'; //Lembrar de usar apstofros
double salario = 3000.00;
boolean achou = false;
/*
* quando uma varivel declarada como final a mesmo no
pode ter seu
* contedo alterado
*/
final char FLAG = 'F';
/*
* Erro, pois literais numricas com casas decimais so double
*/ 40
// nota1 = 8.5
nota1 = 8.5f; // converso explicita para float
nota2 = 7.0f; // converso explicita para float
nota3 = (float) 9.0; // converso explicita para float
System.out.println("Dados do Aluno");
System.out.print("Idade \t= " + idade + "\n" );
System.out.println("Sexo \t= " + sexo);
System.out.println("Notas \t= " + nota1 + "\t" + nota2 + "\t" +
nota3);
System.out.println("Achou \t= " + achou);
System.out.println("Flag \t= " + FLAG);
/* Converso de double para int */
double d = 34.78;
int i = (int) d;
System.out.println("double : " + d + "\n int : " + i);

}
}

Comentrios
Comentrios em Java podem ser expressos em trs formatos
distintos. Na primeira forma, uma
barra dupla // marca o incio do comentrio, que se estende at o
fim da linha. A segunda forma o comentrio no estilo C tradicional,
onde o par de smbolos /* marca o incio de comentrio, que pode se
estender por diversas linhas at encontrar o par de smbolos */, que
delimita o fim do comentrio.
O outro estilo de comentrio especfico de Java e est associado
gerao automtica de documentao do software desenvolvido.
Nesse caso, o incio de comentrio delimitado pelas sequncias de
incio /** e de trmino */. O texto entre essas sequncias ser
utilizado pela ferramenta javadoc para gerar a documentao do
cdigo em formato hipertexto.
Para gerar esse tipo de documentao, os comentrios devem estar
localizados imediatamente antes da definio da classe ou membro
(atributo ou mtodo) documentado. Cada comentrio pode conter
uma descrio textual sobre a classe ou membro, possivelmente
incluindo tags HTML, e directrizes para o programa javadoc. As 40
diretrizes para javadoc so sempre precedidas por @, como em @see
nomeClasseOuMembro que gera na documentao um link para a
classe ou membro especificado, precedido pela frase See also .
A documentao de uma classe pode incluir as directrizes @author,
que inclui o texto na sequncia como informao sobre o autor do
cdigo na documentao; e @version, que inclui na documentao
informao sobre a verso do cdigo.
A documentao de um mtodo pode incluir as directrizes @param,
que apresenta o nome e uma descrio de cada argumento do
mtodo; @return, que apresenta uma descrio sobre o valor de
retorno; e @exception, que indica que excepes podem ser lanadas
pelo mtodo.

Quadro Resumo
// este um comentrio monolinha; termina no fim desta linha
/* este multilinha; s termina quando aparecer o delimitador
final */
/** este um comentrio de documentao para a ferramenta
javadoc */

Operadores
Veremos agora os operadores da linguagem Java, que agregam
importantes funcionalidades aos programas.
Eles possuem uma ordem de precedncia na execuo da expresso.
Para alterar a ordem de precedncia deve-se, agrupar as expresses
com parnteses.

Os operadores so utilizadores para criar expresses aritmticas ou


lgicas

Uma expresso um arranjo de operadores e operandos. A cada 40


expresso vlida atribudo um valor numrico.
Exemplo: 4 + 6 uma expresso cujo valor 10.
Em java os operadores podem ser de atribuio, aritmticos, de
atribuio aritmtica, incrementais, relacionais, lgicos e condicionais.

Atribuio

A operao de atribuio a operao mais simples do java. Consiste


de atribuir um valor ou o valor de uma expresso a uma varivel.

Sintaxe:
identificador = valor ou expresso;
onde identificador o nome de uma varivel e expresso uma
expresso vlida (ou outro identificador).
Exemplo:
a = 1;
delta = b * b - 4. * a * c;
i = j;

= ==
o smbolo "=" representa o comando de atribuio.
o smbolo "==" representa o sinal de igualdade.
Atribuio Composta
Para facilitar a programao, Java oferece um tipo de atribuio
chamada atribuio composta. Esse tipo de atribuio pode ser
utilizado quando se deseja atribuir a uma varivel X, o valor de X
adicionado a 10, por exemplo.
Exemplos:
x += 10; // Equivale x = x + 10;
x += y; // Equivale x = x + y;
a -= b; // Equivale a = a b;
a *= 3; // Equivale a = a * 3;

40
Concatenao de Strings
O operador + executa uma concatenao de objetos de Strings,
gerando uma nova String.
String tratamento = Sra. ;
String nomeCompleto = Marta Rocha;
String saudao = tratamento + nomeCompleto;

Operadores aritmticos
So utilizadas para criar expresses aritmticas. Expresses que
resultam num valor numrico

Operador Ao
aritmtico
- Subtrao
+ Adio
* Multiplicao
/ Diviso
% Resto inteiro da diviso
-- ++ Decremento/incremento

Precedncia dos operadores aritmticos (Hierarquia nas


Operaes)
Hierarqu Operao
ia
1 Parnteses
2 Mtodos
3 ++ --
4 - (menos unrio)
5 */%
6 +-

Observao: Quando houver duas ou mais operaes de mesma


hierarquia, o compilador executa-as da esquerda para a direita.

40

Operadores relacionais ou de comparao


Estes operadores so utilizadores para criar expresses booleanas Ou
seja, expresses que retornam falso ou verdadeiro. Estes operadores
permitem comparar valores, ou seja, so utilizados principalmemte
em comandos que possuem condies.

Operadores relacionais
Operado Ao
r
> Maior que
>= Maior ou igual a
< Menor que
<= Menor ou igual
== Igual a
!= Diferente de

3 == 3, 4<=5, 5>=4, 3<4, 4>3, 4!=3

Operadores Lgicos
So utilizadores para combinar o valor lgicos de duas ou
mais expresses booleanas. So operadores utilizados em
comandos que tem mais de uma condio.

Operadores lgicos
Operador Ao
lgica
&& ou & AND (e)
|| ou | OR (ou)
! NOT (no)

Observao: && e || so chamados Short Circuit Operator, ou


seja, quando o resultado das condies no puder mais ser alterado,
h um truncamento nas prximas condies.
40

Precedncia (Hierarquia dos operadores)

Precedncia dos operadores relacionais e lgicos


Hierarqu Operao
ia
1 !
2 > >= < <=
3 == !=
4 &&
5 ||

Observao: As expresses que utilizam operadores relacionais e


lgicos retornam 0 (zero) para falso e !0 (no zero) para verdadeiro,
ou seja:

true diferente de 0 (!= 0) e false igual 0 (== 0)

Tabela de verdade dos operadores &&, || e no

p q p&&q p||q !q !p

0 0 0 0 1 1

0 1 0 1 0 1

1 0 0 1 1 0

1 1 1 1 0 0
Exerccios
Qual o resultado da expresso
a) !0 && 0 || 0 b) !(0 && 0) || 0
10>5 && !(10<9) || 3<=4

Operadores de incremento e decremento


40

Incremento ++
Decremento --

As seguintes operaes so equivalentes:


x++; x = x + 1;
x--; x = x - 1;

Altera o valor da variavel de n unidades.


Caso a unidade no seja informada o padro 1(um) ser utilizado.

Os operadores (++ ou --) podem ser colocados antes ou depois do


operando. Quando precede seu operando, Java efetua a operao de
incremento ou decremento antes de utilizar o valor do operando.
Quando o operador vier depois do operando, Java utiliza o valor do
operando antes de increment-lo ou decrement-lo.
Quando o operador colocado depois da varivel tem-se um ps
incremento ou ps decremento. Quando o operador colocado antes
da varivel tem-se um pr incremento ou pr decremento. O quadro
seguinte ilustra o funcionamento do mecanismo

Operado Uso Descrio


r
++ op++ Incremente op de 1; avalia o valor de op antes de
incrementa-lo
++ ++op Incrementa op de 1; avalia o valor de op depois de
incrementa-lo
-- op-- Decrementa op de 1; avalia o valor de op antes de
decrementa-lo
-- --op Decrementa op de 1; avalia o valor de op depois de
decrementa-lo

Observe-se antes de mais nada que ++x diferente de x++! 40

Quadro exemplo de incremento e decremento

Valor inicial Expresso Valor Final Interpretao

X Y X Y
10 10 y = x++ 11 10 y=xx=
x+1
10 11 y = ++x 11 11 x = x+1 y =
x
10 10 y = x -- 9 10 y=xx=x
1
10 9 y = -- x 9 9 x = x -1 y = x

Linearizao de expresses
Uma expresso em Java qualquer combinao vlida de operadores
(aritmticos, relacionais, lgicos), constantes, variveis e mtodos.
Exemplo: c = Math.sqrt (a) + b / 3.4;

A linearizao cConsiste em transformar expresses matemticas 40

tradicionais em expresses em java.


Ex.
A expresso pode ser
transformada em (3+5)/((2+2)/2)

Tabela de precedncias de todos os


operadores

Operador Aco
40

Mtodos de entrada e sada de dados

A seguir so mostrados alguns mtodos que permitem fazer entrada


de dados via teclado e sada de dados via monitor (tela).
Entrada de dados via teclado utilizando a classe
Scanner do pacote java.util

Para utilizar a classe Scanner numa classe java deve-se proceder da


seguinte maneira:
1 importar o pacote java.util
import java.util.Scanner;
2 Instanciar e criar um objecto Scanner:
Scanner ler = new Scanner(System.in);
3 Ler valores atravs do teclado
Mtodos de leitura da classe Scanner
3.1 Ler um valor inteiro: int n = ler.nextInt();
3.2 Ler um valor real: float preco = ler.nextFloat();
3.3 Ler um valor real: double salario = ler.nextDouble();
3.4 Ler uma String: String palavra = ler.next();
usado na leitura de palavras simples, ou seja, que no usam o
caracter espao (ou barra de espao)
3.5 Ler uma String: String palavra = ler.nextLine();
usado na leitura de palavras compostas, por exemplo Patinho Feio 40

Na leitura consecutiva de valores numricos e String deve-se


esvaziar o buffer do teclado antes da leitura de outro valor, por
exemplo
System.out.println(Escreva um numero);
Int n = ler.nextInt();
ler.nextLine(); // esvazia o buffer do teclado
System.out.println(Escreva um texto);
String palavra = ler.nextLine();

import java.util.Scanner;

public class TestScanner8 {

public static void main(String[] args) {


Scanner input = new Scanner (System.in);
String s;
int x;

System.out.print("Escreva um Inteiro: ");


x = input.nextInt();

System.out.println("O Valor digitado e: " + x);


System.exit(0);
}
}
Entrada e saida de dados via teclado utilizando a classe
JOptionPane do pacote javax.swing

Para utilizar a classe JOptionPane numa classe java deve-se proceder


da seguinte maneira:
1 importar o pacote javax.swing
import javax.swing.JOptionPane;
A Classe Java JOptionPane oferece caixas de dilogo 40
predefinidas que permitem aos programas exibir mensagens
aos utilizadores;

import javax.swing.*; // carrega toda a biblioteca swing

public class TesteJOptionPane {

public static void main(String[] args) {


String s;

s = JOptionPane.showInputDialog("String: ");
int x = Integer.parseInt(s);
JOptionPane.showMessageDialog(null, "Inteiro: " + x,
"Resultado", JOptionPane.PLAIN_MESSAGE);
// JOptionPane.showMessageDialog(null, "Inteiro: " + x);
// funciona tambm, pois os dois ltimos argumentos podem
ser suprimidos
System.exit(0);
}
}

Sintaxe:

JOptionPane.showMessageDialog(null, x = + x, Ttulo,
JOptionPane.PLAIN_MESSAGE);

O primeiro argumento null, significando vazio. O primeiro


argumento do mtodo showMessageDialog() utilizado para
posicionamento da janela. Ao ser null ignorado e a janela
apresentada no centro da tela.
x = + x significa que sair na caixa de dialogo x = 5 (por
exemplo)
Ttulo significa o ttulo da caixa de dilogo
JOptionPane.PLAIN_MESSAGE significa caixa sem cone
Tipos de cones
Tipo de cone Tipo de Mensagem 40
cone de erro JOptionPane.ERROR_MESSAGE
cone de informao i JOptionPane.INFORMATION_MESSA
GE
cone de advertncia ! JOptionPane.WARNING_MESSAGE
cone de pergunta ? JOptionPane.QUESTION_MESSAGE
Sem cone JOptionPane.PLAIN_MESSAGE

A linha System.exit ( 0 ) necessria em programas com interface


grfica, terminando o aplicativo Java.
O retorno Zero (0) para o mtodo exit() indica que o programa
finalizou com sucesso. Valores diferentes de zero significam erros na
execuo e podem ser tratados por aplicativos que chamaram o
programa Java.
A classe System faz parte do pacote padro java.lang, que dispensa a
importao (comando import) por ser acrescida aos seus programas
por default

possvel converter String para qualquer tipo primitivo. Para tal


utilizam-se os metodos das classes contentoras
int Integer.parseInt( string )
float Float.parseFloat( string )
double - Double.parseFloat( string )

Entrada de dados via teclado em terminal textual


usando as bibliotecas BufferedReader e
InputStreamReader .
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TesteReader {

public static void main(String[] args) throws IOException {

BufferedReader userInput = new BufferedReader


(new InputStreamReader(System.in));
System.out.print("Nome: "); 40
String nome = userInput.readLine();
Integer n = nome.length();
System.out.println("Nome: " + nome + " tem " +
nome.length() + " caracteres");
System.exit(0);
}
}

Apresentao(escrita) de dados no monitor


Sada de dados via tela usando o mtodo System.out.print,
System.out.println ou System.out.printf.
O mtodo printf, herado do c, est incorporado no pacote de
classes System.out.
System.out.printf("%2d * %d = %3d\n", i, n, (i*n));
obs:
%2d ser substitudo por um valor decimal usando 2 posies
da tela.
\n - pula uma linha
System.out.printf(" %0,2d- %s\n", (i+1), nome); 40
obs.
0,2 coloca zeros a esquerda, por exemplo: 01, 02, 03,
04, ..., 09, 10
%d - ser substitudo por um valor decimal (valores inteiros)
%i - ser substitudo por um valor inteiro
%ld ser substitudo por um valor inteiro longo (long)
%f - ser substitudo por um valor real (%8.2f
reservando 8 posies da tela das quais 2 sero usadas para
as casas decimais)
%c - ser substitudo por um caractere
%s - ser substitudo por uma cadeia de caracteres

import java.util.Scanner;

public class TesteSaida {


public static void main(String[] args) {
Scanner entrada = new Scanner (System.in);
String s;
int x;
System.out.print("Inteiro: ");
s = entrada.nextLine();
x = Integer.parseInt(s);
System.out.println("Valor: " + x);
System.out.printf("Valor: %03d\n ", x);
System.exit(0);
}
}
Mtodos para funes matemticas
padres

Java possui uma classe: Math que possui diversos mtodos


para resolver funes matemticas.
A classe java.lang.Math de Java oferece uma srie de mtodos
estticos para exponenciao, trigonometria, funes de mximo e 40

mnimo, etc. Como todos esses mtodos so estticos, possvel


referencia-los pelo nome da classe sem ter de criar uma instncia da
mesma.
Principais mtodos da classe Math:
Mtodo Descrio
abs(x) Valor absoluto de x (este mtodo
tambm tem verses para
valores float, int e long)
ceil(x) Arredonda x para o menor inteiro
no menor que x
cos(x) Cosseno trigonomtrico de x (x
em radianos)
exp(x) Mtodo exponencial
floor(x) Arredonda x para o maior inteiro
no maior que x
log(x) Logartimo natural de x (base e)
max(x, y) Maior valor entre x e y (este
mtodo tambm tem verses
para valores float, int e long
min(x, y) Menor valor entre x e y (este
mtodo tambm tem verses
para valores float, int e long)
pow(x, y) x elevado potncia y
sin(x) Seno trigonomtrico de x (x em
radianos)
sqrt(x) Raiz quadrada de x
tan(x) Tangente trigonomtrica de x (x
em radianos)
etc
Exerccios
Algumas frmulas apresentadas nos enunciados esto na sua forma
MATEMTICA e no na forma como devem ser escritas nos nos programas.
As indicaes entre parnteses so sugestes de nomes de
variveis(escrever os nomes das variveis conforne a conveno).
Elaborar o diagrama de blocos e/ou o pseudocdigo (portugus estruturado) 40
em todos os casos(em comentrio no programa).

1 - Faa um programa para ler um valor inteiro e que imprima o seu


antecessor e sucessor.
2 - Faa um programa para ler um valor real e exiba o prximo
inteiro.
3 - Crie um programa que receba trs nomes quaisquer, por meio da
linha de execuo do programa, e que os imprima na tela da seguinte
maneira: o primeiro e o ltimo nome sero impressos na primeira
linha um aps o outro, o outro nome ( o segundo) ser impresso na
segunda linha, tudo no mesmo comando.
4 - Faa um programa que receba a quantidade de trs produtos e o
valor de trs produtos, no seguinte formato: Quantidade1 Valor1
Quantidade2 Valor2 Quantidade3 Valor3. O programa deve calcular
estes valores seguindo a frmula total = Quantidade1 x Valor1 +
Quantidade2 x Valor2 + Quantidade3 x Valor3. O valor total deve ser
apresentado no final da execuo do programa.
5 - Qual a sada quando o programa abaixo executado:
public class Alfabeto {
public static void main(String args[]) {
int i = 65;
char c = (char) i;
System.out.println(Aps o + c + vem o + (c +
1) ); } }
6 - Faa um programa que receba a largura e o comprimento de um
lote de terra e mostre a rea total existente em metros quadrados.
7 - Faa um programa que leia dois valores inteiros e imprima o resto
da diviso do primeiro pelo segundo sem usar o %.
8 - Crie um programa que receba quatro valores quaisquer e mostre a
mdia entre eles, o somatrio entre eles e o resto da diviso do
somatrio por cada um dos valores.
9 - Faa um programa para imprimir a tabela abaixo apenas com a 40
instruo System.out.println();

Nome Arquivo Ttulo Localizao


-----------------------------------------------------------------
Cap_1.doc O que Java c:\Livro\p1
Cap_11.docMultithreding c:\Livro\p1
Cap_14.docEventos c:\Livro\p2
Ap_1.doc Referncia c:\Livro\Ap

10 - Qual das afirmativas so verdadeiras a respeito do cdigo


abaixo? (marque uma ou mais)
public class CarTeste {
public static void main(String args[]) {
byte b1 = 3;
byte b2 = 5;
byte b = (byte) b1 b2;
System.out.println(b); }
}
O cdigo no compila porque deveria usar uma converso (cast)
explicito para converter int para byte.
O cdigo no compila porque o tipo primitivo byte no aceita
valores negativos.
O cdigo compila, executa e imprime: -2
O cdigo compila, executa e imprime: 2
O cdigo compila, executa e no imprime nada
11 - Leia um nmero inteiro e escreva seu sucessor e antecessor.
12 - Leia dois nmeros e escreva o dividendo, divisor, quociente e
resto.
13 - Calcule a dvida do cheque especial ao ser quitada 6 meses
depois a uma taxa de 5% de juros. O valor do emprstimo deve ser
informado.
14 - Dada a base e a altura de um retngulo, calcule o permetro, a
rea e a diagonal. 40
15 - Dada o lado de um quadrado, calcule o permetro, a rea e a
diagonal.
16 - Dado o raio de um crculo, calcule o permetro e a rea.
17 - Dados os trs lados de um paraleleppedo, calcule o permetro, a
rea, o volume e a diagonal.
18 - Dados dois catetos de um triangulo retngulo, calcule a
hipotenusa.
19 - Dada a razo de uma PA e seu primeiro termo, calcular o 20
termo.
20 - Dada a razo de uma PG e seu primeiro termo, calcular o 20
termo.
21 - Dado um horrio, calcule quantos minutos e segundos
transcorreram desde o incio do dia.
22- Dado o valor do salrio-mnimo e um determinado salrio, calcule
quantos salrios-mnimos esto contidos nele.
Estruturas de controlo de fluxo 40

A ordem de execuo normal de comandos num programa em Java


sequencial. As estruturas de controlo de fluxo permitem modificar
essa ordem natural de execuo atravs dos mecanismos de escolha
ou de iterao.

Controlo de Fluxo
O Controle de fluxo a habilidade de ajustar a maneira como um
programa realiza as suas tarefas. Por meio de estruturas e instrues
especiais, essas tarefas podem ser executadas selectivamente,
repetidamente ou excepcionalmente. No fosse o controlo de fluxo,
um programa poderia executar apenas uma nica sequncia de
tarefas, perdendo completamente uma das caractersticas mais
interessantes da programao: a dinmica.
Em java podemos classificar a estruturas de controlo de fluxo em
basicamente quatro categorias:

Categoria Estrutura
Tomada de decises if-else, switch-case
Laos ou repeties for, while, do-while
tratamento de excees try-catch-finally, throw
Outros break, continue, return, label
Estruturas ou comandos de seleco
ou deciso 40

As estruturas de deciso permitem que um programa possa realizar


diferentes alternativas de sequencias de instrues durante a sua
execuo. Dependendo do valor de uma expresso ou de uma
varivel boolena, o programa executa uma ou outra sequencia de
instrues.
Existem trs categorias distintas: seleco simples, seleco dupla e
seleco mltipla, as quais so abordadas a seguir.

Estrutura de deciso simples

Estrutura de deciso simples


Sintaxe
if(<expresso boolena>)
instruo
ou
if(<expresso boolena>){
<sequencia de instrues>
}

40

Falso
Condio

Verdadeiro

Process

Quando o computador encontra e executa este comando, o que


realizado em primeiro lugar o teste da expresso booleana. Se ela
resultar em verdadeiro, ento a instruo ou sequncia de
instrues executada. Caso contrrio, o programa avana e
executas as instrues posteriores ao comando if.

import java.util.Scanner;

public class TrocaValorDasVariaveis{

//Imprimir os numeros em ordem crescente


public static void main(String[] args){
int variavel1, variavel2, variavelAuxiliar;
Scanner teclado = new Scanner(System.in);
System.out.println("\nDigite o valor para a primeira variavel");
variavel1=teclado.nextInt();
System.out.println("\nDigite o valor para a segunda variavel");
variavel2 = teclado.nextInt();
System.out.println("\n\n Os valores foram inseridos na seguinte
ordem:\t"+"1->\t"+variavel1+"\t2->\t"+variavel2);
if(variavel1> variavel2){ 40
variavelAuxiliar = variavel1;
variavel1 = variavel2;
variavel2=variavelAuxiliar;
}
System.out.println("\n\n Valores em ordem crescente:\t"+"1-
>\t"+variavel1+"\t2->\t"+variavel2);
}
}

Estrutura de deciso dupla


O comando de deciso ou seleco dupla pode ser comparado com a
bifurcao de um caminho. preciso escolher uma das alternativas e
segui-la.
Em programao, o comando de seleco dupla serve para executar
sempre uma de duas alternativas de sequencias de instrues, de
acordo com a verificao de uma condio. A sintaxe da estrutura
mostrada a seguir.

if(<expresso booleana>){
<sequencia de instrues 1>
}
else{
<sequencia de instrues 2>
}
Verdadeiro Falso
condio

Aco Acco
40

Primeiramente, o computador testa a expresso booleana. Caso


resulte em verdadeiro, ento a sequencia de instrues 1
executada. Caso contrrio, a sequencia de instrues 2 executada.
Assim, apenas uma e sempre uma das sequencias de instrues
executada durante uma mesma realizao do comando de seleco
dupla.
Aps a operao de uma das sequencias de instrues, o programa
continuar a sua execuo na primeira linha de cdigo aps o conjunto
de instrues da estrutura de seleco.

import java.util.Scanner;
public class SituacaoAluno{

public static void main(String[] args){


float nota1, nota2, nota3, media;
int matricula;
Scanner teclado = new Scanner(System.in);

System.out.println("\nEscreva numero de matricula do aluno:\t");


matricula=teclado.nextInt();
System.out.println("\nEscreva a primeira nota do aluno:\t");
nota1=teclado.nextFloat();
System.out.println("\nEscreva a segunda nota do aluno:\t");
nota2=teclado.nextFloat();
System.out.println("\nEscreva a terceira nota do aluno:\t");
nota3=teclado.nextFloat();

media = (nota1+nota2+nota3)/3;

if(media <9.5) 40
System.out.println("O aluno N:\t"+matricula+"\tDeve fazer o
Exame. Ele teve media:\t"+media);
else
System.out.println("O aluno N:\t"+matricula+"\tFicou aprovado
com a media:\t"+media);
}

Em muitos casos, alm de ser elegante, o uso da estrutura de


seleco aninhada pode ser mais eficiente.
Nos exemplos seguintes verifica-se o facto de que ambos os
programas lem trs nmeros digitados pelo utilizador e identificam o
maior deles, porm, um dos programas faz menos verificaes que o
outros, ganhando eficincia.

import java.util.Scanner;
public class OrdenaTresNumeros{

public static void main(String[] args){


int numero1, numero2, numero3;

Scanner teclado = new Scanner(System.in);

System.out.println("\nDigite o primeiro numero:\t");


numero1 = teclado.nextInt();

System.out.println("\nDigite o segundo numero:\t");


numero2 = teclado.nextInt();
System.out.println("\nDigite o terceiro numero:\t");
numero3 = teclado.nextInt();

System.out.println("\nOrdenacao do numeros"); 40

if((numero1>numero2)&&(numero1>numero3)){

System.out.println("O maior numero digitado foi:\t"+numero1);


}

if((numero2>numero1)&&(numero2>numero3)){

System.out.println("O maior numero digitado foi:\t"+numero2);


}

if((numero3>numero1)&&(numero3>numero2)){

System.out.println("O maior numero digitado foi:\t"+numero3);


}

}
}

import java.util.Scanner;
public class OrdenaTresNumerosSegundo{

public static void main(String[] args){


int numero1, numero2, numero3;
Scanner teclado = new Scanner(System.in);

System.out.println("\nDigite o primeiro numero:\t");


numero1 = teclado.nextInt();

System.out.println("\nDigite o segundo numero:\t");


numero2 = teclado.nextInt(); 40
System.out.println("\nDigite o terceiro numero:\t");
numero3 = teclado.nextInt();

System.out.println("\nOrdenacao do numeros");

if(numero1>numero2){
if(numero1>numero3){
System.out.println("O maior numero digitado
foi:\t"+numero1);
}
else{
System.out.println("O maior numero digitado
foi:\t"+numero3);
}
}
else{
if(numero2>numero3){
System.out.println("O maior numero digitado foi:\t"+numero2);
}
else{
System.out.println("O maior numero digitado foi:\t"+numero3);
}
}
}
}
O programa do exemplo a seguir recebe do utilizador trs nmeros
inteiros e verifica se eles podem ser tamanhos dos lados de um
tringulo. Caso verdadeiro, o programa ainda indica a classificao do
tringulo.

import java.util.Scanner;
public class Triangulos{
40

public static void main(String[] args){


Scanner teclado = new Scanner(System.in);
int lado1, lado2, lado3;
int soma1, soma2, soma3;

System.out.println("Introduza o lado 1 do triangulo:\t");


lado1=teclado.nextInt();
System.out.println("Introduza o lado 2 do triangulo:\t");
lado2=teclado.nextInt();
System.out.println("Introduza o lado 3 do triangulo:\t");
lado3=teclado.nextInt();
soma1 = lado1+lado2;
soma2 = lado1+lado3;
soma3 = lado2 +lado3;

if((lado1==lado2) &&(lado2==lado3)){
System.out.println("Triangulo equilatero");
}
else{
if((soma1>lado3)&&(soma2>lado2)&&(soma3>lado1)){
if((lado1!=lado2)&&(lado1!=lado3)&&(lado2!=lado3)){
System.out.println("Triangulo escaleno\n");
}
else{
System.out.println("Triangulo isosceles\n");
}
}
else{
System.out.println("Os tres lados nao formam um triangulo");
}

} 40
}
}

Operador condicional ou ternrio (?:)


O java possui um operador ternrio (trs operandos), designado por
operador condicional, que indicado para abreviar if else simples.
uma alternativa til ao ifelse
A sua sintaxe dada por
<expresso booleana>? expresao1:exepresao2;
Se a expresso booleana retornar true, o resultado ser expressao1,
seno o resultado ser a expresso2

int valor1 = 120, valor2=0;


int maior;
maior = (valor1>valor2)? 100:200;
System.out.println(O maior valor e:\t+maior);

O programa a seguir gera dois reais aleatrios e utiliza o operador


condicional para determinar qual o menor e qual o maior.

Comando de seleco mltipla


O comando de seleco if bastante poderoso e largamente
utilizado. Entretanto, ele no o nico comando de seleco
existente. H um comando que, embora seja menos abrangente que
o comando if, resolve muitas situaes de forma clara e elegante.
Trata-se do comando de seleco mltipla.
O comando de seleco mltipla sempre pode ser substitudo por um
ou mais comandos if aninhados, mas ele torna o cdigo muito mais
claro quando se quer executar vrias sequencias de comandos 40
diferentes, sendo que cada sequencia deva corresponder a um
determinado valor de uma expresso.

Forma geral
switch(<valor>){
case <valor1>:
<sequencia de instrues 1>
break;
case <valor2>:
<sequencia de instrues 2>
break;
case <valorN>:
<sequencia de instrues N>
break;
default:
<sequencia de instrues>
}
40

Na estrutura do comando de seleco mltipla, a expresso


tradicionalmente uma expresso aritmtica ou uma varivel do tipo
numrico(a partir da verso 7 do JDK a expresso pode ser uma
String), e associa-se o valor da expresso ao valor de um
determinado case. Assim, apenas a sequencia de instrues do bloco
case correspondente ser executada. importante observar que cada
sequencia de instrues encerrada pelo comando break.
A clusula defoult opcional. Ela marca a sequencia de instrues
padro, que deve ser executada quando nenhuma comparao
obtiver sucesso. Se no estiver presente, nada ser executado nesse
caso.
Na linguagem java, cada case deve servir para comparar o resultado
da expresso com um valor especfico. No se permite comparaes
com o resultado de outras expresses.
No exemplo seguinte utiliza-se o comando switch na construo de
um programa que simula o funcionamento de uma urna electrnica.

import java.util.Scanner;
public class Urna{
public static void main(String[] args){
int opcao;

Scanner teclado = new Scanner(System.in);


System.out.println("\n\nURNA ELECTRONICA - O SEU VOTO VAI
PARA...\n");
opcao = teclado.nextInt(); 40
switch(opcao){
case 1:
System.out.println("Candidato Escolhido: Domingos Marques\n");
break;
case 2:
System.out.println("Candidato Escolhido: Vicente Matamba\n");
break;
case 3:
System.out.println("Candidato Escolhido: Garibaldina Meirelis\n");
break;
case 4:
System.out.println("Candidato Escolhido: Maria do Rosario
Hangalo\n");
break;
default:
System.out.println("Numero digitado invalido: Voto anulado\n");

}
}
}

Quando o comando break no termina uma sequencia de instrues


cuja comparao resultou verdadeira, a sequencia de instrues
seguinte executada sem que o teste correspondente seja
efectuado. Na prtica, o que acontece que quando uma comparao
do switch resultar em verdadeiro, todas as sequencias de instrues
seguintes so executadas at que o primeiro comando break seja
encontrado.
preciso, portando, ficar atento e finalizar cada sequencia de
instrues com o comando break evitando, assim, erros de
programao muitas vezes difceis de detectar.

Exerccios 40

Algumas frmulas apresentadas nos enunciados esto na sua forma


MATEMTICA e no na forma como devem ser escritas nos nos programas.
As indicaes entre parnteses so sugestes de nomes de
variveis(escrever os nomes das variveis conforne a conveno).
Elaborar o diagrama de blocos e/ou o pseudocdigo (portugus estruturado)
em todos os casos(em comentrio no programa).

1 Construa um programa que leia o valor de uma conta de luz (CL) e,


caso o valor seja maior que AKZ 50,00 apresente a mensagem: Voc
est a gastar muito. Caso contrrio no exiba mensagem nenhuma.
2 Construa um programa que leia o valor de uma conta de luz (CL) e,
caso o valor seja maior que AKZ 50,00 apresente a mensagem: Voc
est gastar muito. Caso contrrio exiba a mensagem: O seu gasto
foi normal.
3 Construa um programa que, tendo como dados de entrada a altura
(H) e o sexo (S) de uma pessoa calcule e apresente o seu peso ideal
utilizando as seguintes frmulas:
Para homens: Peso ideal (P) = (72,7 * H) 58
Para mulheres: Peso ideal (P) = (62,1 * H) 44,7
4 Construa um programa que determine quanto ser gasto para
encher o tanque de um carro (VG), sabendo-se que o preo da
gasolina de AKZ 1,80 e o preo do lcool de AKZ 1,00. O utilizador
fornecer os seguintes dados: Tipo de carro (TC) (G gasolina ou A
lcool) e Capacidade do tanque (CT), em litros.
5 Construa um programa que leia um nmero inteiro (positivo ou
negativo) e apresente o seu mdulo (nmero sem sinal).
6 Construa um programa que leia o preo de um produto (P) e
apresente a mensagem: Em promoo, caso o preo seja maior ou
igual a AKZ 50,00 e menor ou igual a AKZ 100,00. Caso contrrio,
deve apresentar a mensagem: Preo Normal. 40
7 Construa um programa que, recebendo os valores de vendas do
ms de determinado vendedor (VM) e o nome do mesmo (NOME),
apresente o nome, quando o valor da venda estiver entre AKZ
10000,00 e AKZ 50000,00 (inclusive).
8 Construa um programa que calcule o novo salrio (SAL_NOVO) de
um funcionrio. Considere que o funcionrio dever receber um
reajuste de 15% caso seu salrio (SAL) seja menor que 500. Se o
salrio for maior ou igual a 500, mas menor ou igual a 1000, o
reajuste deve ser de 10%. Caso o salrio seja maior que 1000, o
reajuste deve ser de 5%.
9 Construa um programa que leia dois nmeros (A e B). Caso A seja
igual a B, apresentar a soma dos dois. Caso um seja maior que o
outro, apresentar a diferena entre os dois nmeros (sempre
lembrando que a diferena entre dois nmeros SEMPRE positiva).
10 Construa um programa que leia o cdigo de um livro (CL) e
apresente a categoria do livro, conforme a tabela abaixo:
Cdigo do Livro Categori
(CL) a
A Fico
B No-
Fico
Qualquer outro Invlido
cdigo

11 Construa um programa que receba a leitura do termmetro (T).


Caso a temperatura esteja abaixo de 100C, apresentar a mensagem
de que a temperatura est muito baixa. Caso a temperatura esteja
entre 100C e 200C (inclusive), apresentar a mensagem de que a
temperatura est baixa. Caso a temperatura esteja acima de 200C e
inferior a 500C, apresentar a mensagem de que a temperatura est
normal. Caso contrrio, apresentar a mensagem de que a
temperatura est muito alta.
12 Construa um programa que leia a quantidade de dinheiro
existente no caixa de uma empresa (CAIXA), a quantidade de 40
produtos a ser comprada (QTD) e o preo de cada unidade (PR). Caso
o valor total da compra seja superior a 80% do valor em caixa, a
compra deve ser feita a prazo (3x), com juros de 10% sobre o valor
total. Caso contrrio, a compra dever ser realizada a vista, onde a
empresa receber 5% de desconto. Apresentar a forma de
pagamento escolhida e o valor a ser pago (total a vista ou total a
prazo), dependendo da escolha realizada pelo programa.
13 Construa um programa que leia as informaes de: horas
trabalhadas (HT), valor da hora trabalhada (VH). Calcule e apresente
o salrio lquido do empregado, baseado nas tabelas abaixo.
OBS: Salrio Lquido = Salrio Bruto INSS Imposto de Renda
Salrio Bruto = Horas trabalhadas * Valor da hora trabalhada
INSS = 11% do salrio lquido
Imposto de Renda aps descontar o INSS usar esse valor e ler a
alquota do imposto de renda e parcela a deduzir na tabela abaixo

Salrio Bruto INSS Alquota Valor a


Deduzir
At $1.257,12 Isento
(0%)
De $1.257,13 at 15% $188,57
$2.512,08
Mais que $2.512,08 27,5% $502,58

OBS: Imposto de Renda = Alquota * (Salrio Bruto INSS) Valor a


Deduzir
Repita o exerccio 13, s que agora, a porcentagem de desconto de
INSS no mais fixa. O desconto acontece de acordo com a tabela
abaixo:
Salrio Bruto Alquota
At $800,45 7,65%
De $800,46 at 8,65%
$900,00
De $900,01 at 9,00% 40
$1.334,07
De $1.334,08 at 11,00%
$2.668,15

OBS: Para Salrio Bruto acima de $2.668,15 o valor de desconto fixo


e vale $293,50

14 Construa um programa que calcule e apresente quanto deve ser


pago por um produto considerando a leitura do preo de etiqueta (PE)
e o cdigo da condio de pagamento (CP). Utilize para os clculos a
tabela de condies de pagamento a seguir:

Cdigo da condio de Condio de pagamento


pagamento
vista em dinheiro ou cheque,
1
com 10% de desconto
vista com carto de crdito,
2
com 5% de desconto
Em 2 vezes, preo normal de
3
etiqueta sem juros
Em 3 vezes, preo de etiqueta
4
com acrscimo de 10%

15 Construa um programa que tendo como dados de entrada o preo


de um produto (PR) e seu cdigo de origem (CO), apresente o preo e
a sua procedncia, de acordo com a tabela abaixo:
Cdigo de Origem Procedn
(CO) cia
1 Sul
2 Sudeste
3 Centro-
Oeste
4 Norte
5 Nordeste

16 Construa um programa que leia o ano de nascimento de uma


pessoa (AN) e mostre a sua idade e, tambm verifique e mostre se 40
essa pessoa j tem idade para votar (18 anos ou mais) e se j pode
conseguir o seu bilhete de identidade (18 anos ou mais).
17 Construa um programa que calcule e apresente a idade REAL de
uma pessoa. Ser fornecido pelo utilizador:
DN dia do nascimento DH dia da data de hoje
MN ms do nascimento MH ms da data de hoje
AN ano do nascimento AH ano da data de hoje
18 Construa um programa que, dados os comprimentos dos trs lados
(A, B e C) de um tringulo, verifique o tipo de tringulo formado.
Apresentar qual o tipo. Sabe-se que:
Tringulo do tipo Eqiltero possui os trs lados iguais
Triangulo do tipo Issceles possui dois lados iguais
Tringulo do tipo Escaleno possui os trs lados diferentes

19 Construa um programa que, dada a idade de um nadador (ID),


classifique-o numa das seguintes categorias e apresente a categoria:
Idade (ID) Categor
ia
5 at 7 anos Infantil A
8 at 10 anos Infantil B
11 at 13 anos Juvenil A
14 at 17 anos Juvenil B
Acima de 18 Adulto
anos
20 Construa um programa que leia o cdigo de um determinado
produto (CP) e mostre a sua classificao, utilizando a seguinte
tabela:

Cdigo do Produto Classificao


(CP)
1 Alimento no perecvel
2, 3 ou 4 Alimento perecvel
5 ou 6 Vesturio 40
7 Higiene Pessoal
8 ou 9 Limpeza e Utenslios
Domsticos
Qualquer outro Invlido
cdigo

21cConstrua um programa que indique o que o motorista deve fazer


de acordo com a cor do semforo (CS) e distncia do cruzamento
(DC) fornecida pelo usurio. As condies so:
(V) Vermelho = Parar
(A) Amarelo = se a distncia do cruzamento for menor que 5 metros
= Passar com cuidado
= se a distncia do cruzamento for maior ou igual a 5 metros = Parar
(D) Verde = Passar
22 Construa um programa para calcular o valor a ser pago pelo
perodo de estacionamento do automvel (PAG). O utilizador entra
com os seguintes dados: hora (HE) e minuto (ME) de entrada, hora
(HS) e minuto (MS) de sada. Sabe-se que este estacionamento cobra
hora cheia, ou seja, se passar um minuto ele cobra a hora inteira. O
valor da hora AKZ 4,00.
23 Construa um programa para calcular o valor a ser pago pelo
perodo de estacionamento do automvel (PAG). O utilizador entra
com os seguintes dados: hora (HE) e minuto (ME) de entrada, hora
(HS) e minuto (MS) de sada. Sabe-se que este estacionamento cobra
hora cheia, ou seja, se passar um minuto ele cobra a hora inteira. O
valor cobrado pelo estacionamento :
AKZ 4,00 para 1 hora de estacionamento
AKZ 6,00 para 2 horas de estacionamento
AKZ 1,00 por hora adicional (acima de 2 horas)

40

Estruturas de repetio (Laos,


Ciclos, Loops)
40
A repetio uma das tarefas mais comuns da programao, sendo
utilizada para realizar contagens, totalizaes, a obteno de
mltiplos dados, impresso etc
Um ciclo serve para realizar um processo repetidas vezes. As
estruturas de repetio tambm so chamadas ciclos, laos ou loop.
O cdigo includo entras a chavetas {} (opcionais quando o processo
repetitivo consta de apenas uma linha), ser executado apenas
quando se cumpre determinadas condies. preciso prestar ateno
aos ciclos infinitos, facto que ocorre quando a condio que faz com
que o ciclo termine (expresso boolean) no chega a cumprir-se.
Trata-se de uma falha muito tpica, comum entre os programadores
pouco experientes.

O comando for
Estrutura de repetio simples

O Java oferece uma poderosa coleo de construes de loop. O mais


verstil deles o loop for.
A estrutura for controlada por um contador. O contador
inicializado antes da iterao. Depois a condio testada, no fim de
cada iterao, at atingir o limite estabelecido.
O loop for tambm conhecido como repetio simples. A repetio
simples a execuo consecutiva de uma instruo ou bloco de
instrues por um nmero conhecido e fixo de vezes, o que muitas
vezes se denomina lao automtico. Cada repetio efectuada o
que se chama iterao.

Sintaxe
for(inicializao; expresso booleana; iterao)
instruo

40

ou
for(inicializao; expresso booleana; iterao){
instrues
}

O for tem trs seces distintas de controlo, todas opcionais,


delimitadas por um par de parnteses, nos quais cada seco
separada de outra por um ponto-e-vrgula.
A poro de inicializao ajusta a varivel de controlo do loop para
um valor inicial. A condio uma expresso booleana que testa a
varivel de controlo de loop. Se o resultado for verdadeiro(true), o
loop for continua a ser executado. Se for falso(false), o loop
encerrado. A expresso de iterao determina como a varivel de
controlo do loop alterada cada vez que o loop executado. Eis um
pequeno programa que ilustra o loop for.

import java.util.Scanner;

public class Tabuada {

public static void main(String args[]) {


Scanner teclado = new Scanner(System.in);
System.out.println("Informe um numero inteiro:");
int n = teclado.nextInt();

for (int i=1; i<=10; i++) {


System.out.println(i + " * " + n + " = " + (i*n));
}
}
}

40

import java.util.Scanner;
public class Factorial
{
public static void main(String args[]) {
Scanner teclado = new Scanner(System.in);
int num,fatorial=1;
System.out.println("Informe um numero inteiro:");
num=teclado.nextInt();
for(int i=num;i>=1;i--)
fatorial*=i;
System.out.println("O factorial do numero e:\t"+fatorial);
}
}

Estruturas de Repetio Condicionais

As estruturas de repetio condicionais so os comandos cujo


controlo da repetio de execuo feito por meio da avaliao de
uma expresso lgica associada ao comando, sendo ento chamados
de laos condicionais. Essas estruturas so adequadas para permitir a
execuo repetida de uma ou mais instrues por um nmero
indeterminado de vezes, isto , um nmero que no conhecido
durante a programao, mas que se torna conhecido durante a
execuo do programa, tal como um valor fornecido pelo utilizador,
obtido de um ficheiro, ou ainda de clculos realizados com outros
dados. No Java, tais estruturas so o while e do while.

O comando while

O comando while repete uma instruo ou um bloco de instrues 40

enquanto a expresso de controlo for verdadeira

inicializao
while(condio)
{
Instruo
iterac
}

A condio pode ser qualquer expresso booleana. O corpo do loop


ser executado enquanto a expresso condicional representada por
condio for satisfeita. Quando condio se tornar falsa, o controlo
passa para a prxima linha de cdigo imediatamente aps o loop. As
chavetas { } so desnecessrias se o que estiver a ser repetido for
apenas uma nica instruo.
Como o loop while avalia a expresso condicional no incio do loop, o
corpo do loop no ser executado nenhuma vez se a condio for
inicialmente falsa

public class WhileDemo


{
public static void main(String args[])
{
int contador=10;

while(contador>0)
{
System.out.println(contador+"!");
contador--;
}//fim de while.
System.out.println("Ok!");
}//fim de main()
}//fim de class WhileDemo

40

import java.util.Scanner;

// Verifica se um nmero inteiro primo.

public class NumeroPrimo {

public static void main(String args[]) {


Scanner teclado = new Scanner(System.in);
System.out.println("Informe um numero inteiro:");
int n = teclado.nextInt();
boolean ehPrimo = true;
int i = 2;
while ((ehPrimo == true) && (i <= (n / 2))) {
if ((n % i) == 0)
ehPrimo = false; // encontrou um divisor (no eh primo)
else i++; // prximo divisor usando autoincremento
}
if (ehPrimo == true)
System.out.println(n + " \"eh\" um numero primo.");
else
System.out.println(n + " \"no eh\" um numero primo.");
}
}
O comando do..while

Muitas situaes desejvel que o corpo do loop seja executado pelo


menos uma vez, mesmo que a condio de controlo seja inicialmente
falsa. Em outras palavras, h ocasies em que a condio de trmino
deve ser testada no fim do loop, e no no incio.
Para esses casos, a linguagem Java oferece um loop que faz
exatamente isso: o do-while. O loop do-while sempre executa o seu
corpo pelo menos uma vez, porque a expresso condicional est no
fim do loop. 40

Forma geral
inicializao
do
{
Instruo
iteraco
}while(condio);

Cada iterao do loop do-while executa primeiro o corpo do loop e


depois avalia a expresso condicional representada por condio. Se
a expresso for verdadeira, o loop ser repetido. Caso contrrio, o
loop termina. Como acontece com todos os loops da linguagem Java,
a condio deve ser uma expresso booleana.

public class DemoDoWhile{


public static void main(String[] args){

int a =0;
do{
System.out.println("Java");
a=a+1;
}while(a<5);
}
}
import javax.swing.*;

public class SomaDoWhile{


public static void main(String[] args){

int numero = 10, soma = 0;


40
do{
soma += numero;
numero++;
} while (numero < 10);
JOptionPane.showMessageDialog(null,"Total =" + soma);
}
}

Exerccios
Algumas frmulas apresentadas nos enunciados esto na sua forma
MATEMTICA e no na forma como devem ser escritas nos nos programas.
As indicaes entre parnteses so sugestes de nomes de
variveis(escrever os nomes das variveis conforne a conveno).
Elaborar o diagrama de blocos e/ou o pseudocdigo (portugus estruturado)
em todos os casos(em comentrio no programa).

1 Construa um programa que apresente o peso total que ser


carregado por um caminho. Sabe-se que esse caminho carrega 25
caixas, com pesos diferentes. Ser entrada do programa o peso (P) de
cada uma das caixas.
2 Construa um programa que leia a quantidade (Q) e o preo (PR) de
45 produtos diferentes, comprados por uma empresa, e apresente o
total gasto por ela.

3 Construa um programa que leia o nmero de horas trabalhadas


dirias (NH) de um funcionrio por um perodo de 30 dias (ele
trabalhou todos os 30 dias) e apresente o total de horas trabalhadas
por ele nesse perodo. 40
4 Construa um programa que leia o nmero de horas trabalhadas
dirias (NH) de um funcionrio por um perodo de 30 dias (ele
trabalhou todos os 30 dias) e apresente o salrio bruto recebido por
ele nesse perodo, sabendo que o valor do salrio base AKZ
10,00/hora trabalhada.

6 A converso de graus Fahrenheit para Celsius obtida pela frmula


C=5/9(F-32). Construa um programa que calcule e apresente TODAS
as temperaturas (em Celsius) correspondentes aquelas em Fahrenheit
de 1 at 50, ou seja, para cada temperatura em Fahrenheit, variando
de 1 at 50, calcular e apresentar uma temperatura em Celsius.

7 Construa um programa que apresente o valor de H, sendo H


calculado por:
H = 1 + 2 + 3 + 4 + ... + N
O valor de N ser apresentado pelo utilizador.

8 Construa um programa que calcule N! (factorial de N), sendo que o


valor de N (inteiro) fornecido pelo utilizador. Sabe-se que:
N! = 1 x 2 x 3 x 4 x .... x N
OBS: 0! = 1 (factorial do nmero zero igual a 1 por definio).
Alm disso, no deve ser permitido que seja calculado o fatorial de
nmero negativo, pois isso no existe.
9 Construa um programa que leia o conjunto de 20 nmeros inteiros e
mostre qual foi o maior valor fornecido.

10 Construa um programa que leia o conjunto de 20 nmeros inteiros


e mostre qual foi o maior e o menor valor fornecido.

11 Construa um programa que leia a quantidade (Q) e o preo (PR) de


vrios produtos diferentes, comprados por uma empresa, e apresente 40
o total gasto por ela. O final da lista de produtos dever ser indicado
pelo utilizador (escolha a maneira que preferir).
OBS: No se esquea de validar a entrada dos valores, pois no so
aceitas quantidades negativas, nem preos negativos.

12 Construa um programa que leia vrios nmeros inteiros e


positivos, calculando ao final da sequncia a soma e a mdia desses
nmeros. A sequncia termina quando o utilizador entrar com um
valor negativo (esse valor no deve fazer parte de nenhum dos
clculos).

13 Construa um programa que leia vrios nmeros inteiros e mostre


qual foi o maior valor fornecido. O final da lista de produtos ser
indicado quando o utilizador entrar com um valor negativo (esse valor
no deve fazer parte da comparao de valores).

14 Construa um programa que leia vrios nmeros inteiros e mostre


qual foi o menor valor fornecido. Para cada valor digitado, deve ser
solicitado ao utilizador que ele digite se ele deseja continuar.
OBS: No se esquea de validar a resposta do utilizador, pois ele s
pode responder S ou N.

15 Construa um programa que leia vrios nmeros inteiros e mostre


qual foi o maior e o menor valor fornecido. Para cada valor digitado,
deve ser solicitado ao utilizador que digite se ele deseja continuar.
OBS: No se esquea de validar a resposta do usurio, pois ele s
pode responder S ou N.

16 Construa um programa que leia um nmero e indique se ele par


ou impar. O programa s deve levar em considerao valores
positivos.

17 Anacleto tem 1,50m e cresce 2 centmetros por ano, enquanto 40


Felisberto tem 1,10 e cresce 3 centmetros por ano. Construa um
programa que calcule e apresente quantos anos sero necessrios
para que Felisberto seja maior que Anacleto.

18 Construa um programa que calcule a rea total de uma residncia


(sala, cozinha, quartos, etc., sendo todos eles retangulares). O
utilizador dever entrar com a largura (L) e o comprimento (C) de
cada cmodo da casa. Em seguida dever ser apresentada uma
pergunta, solicitando a confirmao do utilizador para continuar com
a entrada de dados (a confirmao ser dada quando o utilizador
entrar com S). Caso ele entre com o valor N. Dever ser
apresentada a rea total da casa.
OBS: No se esquea de validar a entrada da resposta do utilizador,
que s pode aceitar os caracteres S ou N.

19 Construa um programa que apresente a tabuada de um nmero N.


O valor de N ser apresentado pelo utilizador.
20 Num cinema, certo dia, cada espectador respondeu a um
questionrio, que perguntava a sua idade (ID) e a opinio em relao
ao filme (OP), seguindo os seguintes critrios:

Opinio Significado
A timo
B Bom
C Regular
D Ruim
E Pssimo
A entrada de dados sobre a opinio deve ser validada.
O final da pesquisa ser indicado quando a idade do utilizador for
informada como negativa (idade inexistente).
Construa um programa que, lendo esses dados, calcule e apresente:
Quantidade de pessoas que respondeu a pesquisa
Mdia de idade das pessoas que responderam a pesquisa
Porcentagem de cada uma das respostas 40

21 Construa um programa que leia as informaes de: horas


trabalhadas (HT), valor da hora trabalhada (VH). Calcule e apresente
o salrio lquido dos empregados da empresa, baseado nas tabelas
abaixo.
OBS: Salrio Lquido = Salrio Bruto INSS Imposto de Renda
INSS = 11% do salrio bruto
Imposto de Renda aps descontar o INSS usar esse valor e ler a
alquota do imposto de renda na tabela a seguir:

Salrio Bruto Alquot Deduzi


INSS a r
At $900 Isento
De $900 at $1800 15% $135
Mais que $1800 27,5% $360

No conhecido o nmero de funcionrios da empresa. Ao final de


cada clculo, o programa deve perguntar se a pessoa deseja calcular
o salrio de outro funcionrio. Caso a resposta seja negativa, o
programa deve parar.
OBS: No se esquea de validar a entrada da resposta do utilizador,
que s pode aceitar os caracteres S ou N.

22 Construa um programa que calcule e apresente o total da compra


realizada pelo cliente numa loja. So fornecidos ao programa, o preo
da etiqueta (PE) de cada um dos produtos comprados e, com a
compra encerrada, a condio de pagamento escolhida pelo cliente
(CP). Utilize para os clculos a tabela de condies de pagamento a
seguir:

Cdigo da condio de Condio de pagamento


pagamento
vista em dinheiro ou cheque, com 10% de
1
desconto
vista com carto de crdito, com 5% de 40
2
desconto
Em 2 vezes, preo normal de etiqueta sem
3
juros
Em 3 vezes, preo de etiqueta com
4
acrscimo de 10%

Uma compra pode ser composta por mais do que um produto,


portanto, deve ser indicado ao programa quando a compra deve ser
encerrada (escolha a forma que desejar).
OBS: No esquea de validar a entrada do cdigo da condio de
pagamento.

23 Construa um programa que indique qual a melhor forma de


pagamento para a compra realizada por uma empresa. Essa compra
ser composta por vrios produtos e a entrada de dados deve parar
quando o utilizador digitar como quantidade um valor negativo. O
programa deve ler a quantidade de dinheiro existente no caixa de
uma empresa (CAIXA), a quantidade de cada item comprado (QTD) e
o preo de cada produto (PR).
Caso o valor total da compra seja superior a 80% do valor em caixa, a
compra deve ser feita a prazo (3x), com juros de 10% sobre o valor
total. Caso contrrio, a compra dever ser realizada a vista, onde a
empresa receber 5% de desconto. Apresentar a forma de
pagamento escolhida e o valor a ser pago (total a vista ou total a
prazo), dependendo da escolha realizada pelo programa.
OBS: No se esquea de validar a entrada dos valores, pois no so
aceites preos negativos.

24 Construa um algoritmo que calcule o novo salrio (SAL_NOVO)


para cada um dos funcionrios da empresa. Considere que o
funcionrio dever receber um reajuste de 15% caso seu salrio (SAL)
seja menor que 500. Se o salrio for maior ou igual a 500, mas menor
ou igual a 1000, o reajuste deve ser de 10%. Caso o salrio seja maior 40
que 1000, o reajuste deve ser de 5%.
O programa deve parar quando for digitado um salrio (SAL) com
valor negativo, ou seja, invlido.
Alm disso, ao final, o programa deve apresentar quanto ser gasto a
mais pela empresa com esses aumentos.

Modularizao

Os programas so escritos a fim de resolverem vrios tipos de


problemas. Alguns desses problemas exigem mais tempo e maiores
esforos do programador. Por isso, indispensvel que o
programador utilize de tcnicas que visam uma maior organizao e
consequente entendimento facilitado do programa. Uma das tcnicas
mais utilizadas a modularizao.
Quando se trabalha em qualquer problema complexo, seja em
programao, seja em outra rea, o ser humano sente a necessidade
de dividir este problema maior em problemas menores. Cada
problema menor ento trabalhado de forma a solucionar as
questes que lhe cabem e, juntando-se cada uma dessas solues,
tem-se a soluo do problema maior. Este processo chamado de
modularizao e baseia-se na conhecida tcnica de dividir para
conquistar. 40
O programa pode ser dividido em vrias partes, sendo que cada parte
trata de uma determinada funcionalidade.
Desta forma, o programa tem a sua legibilidade melhorada, uma vez
que fica mais fcil entender o que o programa faz por completo ou
como o programa faz determinada subtarefa.
A modificabilidade do programa tambm melhorada, uma vez que
para se alterar uma determinada funcionalidade, necessrio apenas
alterar uma pequena parte do cdigo, no sendo necessrio modificar
vrios pontos do cdigo.
Com as funcionalidades do programa separadas logicamente, o
programador tem a oportunidade de reutilizar uma parte do
programa para escrever um outro programa que utilize, nalguma das
suas tarefas, o mesmo bloco de instrues. A confiabilidade do
programa tambm aumentada pelo facto dele ser mais fcil de ser
entendido e corrigido.
A produtividade para a elaborao de um programa tambm
aumentada, uma vez que cada parte do programa pode ser
trabalhada por uma equipa diferente, alm de que cada equipa s
precisa de saber o que as partes da outra equipa fazem e no como
fazem.

Mtodos

Um mtodo um trecho de um programa que realiza qualquer


operao computacional. Ele efectua parte de uma tarefa que um
algoritmo maior deveria executar, ou seja, ele uma parte do
programa, especializado nalguma funcionalidade. Na linguagem Java,
o uso de mtodos um dos recursos fundamentais de modularizao.
Um mtodo um conjunto de instrues que recebe alguns valores
como dados de entrada e, a partir deles, produz uma valor como
sada.

funo f(x)
Entrada Sada
40
Os dados de entrada so chamados de parmetros e o valor de sada
chamado de retorno. Durante a execuo do mtodo, os dados de
entrada so manipuladores, com o auxilio de operadores, de maneira
a produzir o resultado esperado. Durante esta manipulao de dados
a funo pode chamar outras funes, que contm rotinas que
auxiliam na elaborao do resultado final.

funo f(x)
Entrada Sada

funo
auxiliar
Os mtodos so utilizados para executar operaes, funes, aces,
etc., dentro das aplicaes. Desta forma, eles representam a parte
funcional de qualquer sistema, sendo muito importe compreender
bem a sua utilizao.
sintaxe para a declarao de um mtodo
[modificador]tipo_retorno identificador([parmetros]){
//corpo
[return]
}
Partes de um mtodos
Um mtodo constitudo por um cabealho, um dicionrio de dados,
um corpo e comentrio
Cabealho
O cabealho ou assinatura do mtodo onde esto definidos o nome
do mtodo, os tipos dos seus parmetros de entrada e o tipo de dado
de retorno.
Os parmetros do mtodos, so as informaes que ele precisa para
executar as suas instrues e o seus tipos devem ser rigorosamente
respeitados. Os parmetros do mtodo podem ser constitudos por
uma lista, separada por vrgulas, com os nomes das variveis (e seus 40
tipos) que recebero os argumentos quando o mtodo for chamado
ou executado. Nem todos mtodos recebem parmetros.
Na chamada da funo a quantidade o tipo de parmetros deve ser
rigorosamente respeitada sob pena do compilador detectar erros do
tipo not find simbol
O tipo de retorno do mtodo simboliza o tipo de produto gerado por
ele, melhor especifica o tipo de dado que ser retornado pelo mtodo.
O retorno do mtodo feito pelo comando return (valor).
Se o mtodo diz que retorna um nmero float, que dizer que o
programador deve esperar receber apenas este tipo de dado e tomar
as medidas necessrias para manipula-lo posteriormente.
O nome do mtodo server para identific-lo. O programador deve
escolher nomes auto-explicativos sobre a funcionalidade do mtodo,
ou seja, para o que ele serve. Isto torna o cdigo mais legvel e
menos susceptvel de erros por parte do programador.

Exemplo
float calculaMedia(float a, float b);
No exemplo acima, a funo calculaMedia possui dois parmetros de
entrada do tipo float e retorna um valor tambm do tipo float, j que
o tipo indicado para ele o float. O primeiro parmetro recebe o
nome a e o segundo recebe o nome b. O mtodo retorna um dado do
tipo float, ou seja, retornar um nmero que contm casas decimais.

Dicionrio de dados
O dicionrio de dados onde se faz a declarao de variveis e
constantes usadas no mtodos e no declaradas no cabealho do
mtodo.
Quando se declaram variveis nos mtodos, estas s podem ser
utilizadas naquele mtodos. Qualquer outro mtodos, mesmo aquele
que chamar o mtodo, no tem acesso a estas variveis. Assim, por
existirem e serem acessveis apenas naquele mtodo, so chamadas
de variveis locais. 40

Corpo
O corpo do mtodo onde esto contidas as instrues a serem
executadas pelo mtodos. Nele, podem ser realizadas operaes, tais
como: atribuies de valores s variveis, chamadas de outras
funes, clculos de expresses, leitura de dados e apresentao de
resultados.
Comentrios
Para melhorar a legibilidade e o entendimento do cdigo do mtodo,
recomendvel fazer comentrios.
Acima de cada mtodo pode-se colocar comentrios com as seguintes
finalidades: dizer para que serve o mtodo, quais os parmetros que
ele recebe, explicando como devem ser estes parmetros (unidade
de medida, relevncia para o mtodo, etc.), restries para
aplicaes, entre outras.
No dicionrios de dados, os comentrios podem ser utilizados para
explicar o significado de alguma varivel cujo nome no
suficientemente significativo.
No corpo do mtodo, os comentrios podem ser utilizados para
explicar o que foi feito num determinado conjunto de instrues cujo
entendimento no fcil ou que no tem utilidade aparente.
Em java, os comentrios dos mtodos devem ser feitos da mesma
maneira que a indicada anteriormente, entre /* e */ ou aps //
Exemplo
/*
Mtodo para calcular a distancia entre dois pontos no plano
cartesiano .
Dados de entrada :
float x1: a coordenada x do primeiro ponto .
float y1: a coordenada y do primeiro ponto .
float x2: a coordenada x do segundo ponto .
float y2: a coordenada y do segundo ponto .

40
Dados de sada :
dist : retorna a distncia entre os pontos passados
*/
float distancia ( float x1 , float y1 , float x2 , float y2){
float dx , dy , dist ;
dx = x2 - x1;
dy = y2 - y1;
dist = Math.sqrt (dx*dx + dy*dy);
return dist ;
}

Escopo das variveis variveis locais e


variveis globais
Um mtodo pode ter variveis locais, que so variveis declaradas
dentro do mtodo.
As variveis locais podem ser utilizadas apenas dentro do mtodo
onde foram declaradas.
Os parmetros do mtodo tambm so locais a ele.
Mtodos diferentes podem ter parmetros ou variveis locais com
nomes comuns.
Nesse caso, cada mtodo tem os seus prprios parmetros e
variveis locais, independentemente de os nomes serem os mesmos.
As variveis globais so as que esto declaradas fora de qualquer
mtodo. Estas so chamadas variveis de instncia ou, se tiverem o
modificador static, variveis de classe. As variveis assim declaradas
podem ser utilizadas em toda a extenso da classe.
Chamada do mtodos

Em programao, quando um mtodo solicita servios de um outro


mtodo, dizemos que foi feita uma chamada ao mtodo. Durante a 40
execuo de um programa, podem ser feitas diversas chamadas a um
mesmo mtodo.
A chamada de um mtodo em java feita digitando o nome da
funo e, em seguida, digitando os dados de entrada necessrios
entre parentes, se os houver, para que assim o mtodo execute as
instrues de que responsvel.

import javax.swing.JOptionPane;
public class EstudoMetodosI {
public static void main(String[] args) {
double xa, xb, ya, yb, distancia;
JOptionPane.showMessageDialog(null, "Forneceda as
coordendadas x e Y (em quilometros) das cidades A e B,
respectivamente");
xa =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada xa
"));
xb =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada xb
"));
ya =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada
ya"));
yb =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada
yb"));
distancia = distancia(xa, ya, xb, yb);
JOptionPane.showMessageDialog(null, "A distancia de " +
distancia + "Quilomentros");
}
static double distancia(double x1, double y1, double x2, double y2)
{ 40
double dx, dy, distancia;
dx = x2 - x1;
dy = y2 - y1;
distancia = Math.sqrt(dx * dx + dy * dy);
return distancia;
}
}

Passagem de parmetros

Os parmetros de um mtodo so os dados de entrada necessrios


para que ele possa realizar com sucesso o seu trabalho.
Cada parmetro de um mtodo posui um tipo, declarado no
cabealho do mtodo. Quando feita uma chamada ao mtodo,
podem ser passados como parmetros os valores de variveis do
programa principal, que obrigatoriamente devem ser do mesmo tipo
dos parmetros do mtodo chamado.
importante perceber que, quando feita uma passagem de
parmetros, apenas os valores das variveis so passados para o
mtodo chamado e no as variveis em si. Esse mtodo de passagem
de parmetros chamado passagem por cpia, ou ainda, passagem
por valor.
Em java, parmetros de tipos primitivos sempre so passados por
valor.
A primeira implicao dessa regra a no necessidade de ser utilizar
variveis como entrada para o outro mtodo, podendo-se utilizar
directamente um valor.
distancia = distancia(10, -15, 26, -23);

Outra implicao do facto de que apenas valores so passados como


parmetros para um mtodo a possibilidade de mudar o contedo
das variveis que so utilizadas como entrada para o mtodo. No
40
exemplo a seguira a varivel a, do mtodo dobraValor, recebe apenas
o valor da varivel x da funo principal. Como isto, a varivel x
permanece com o seu valor anterior chamada da funo
dobraValor, apenas a varivel a dessa funo tem o seu valor
alterado.

import javax.swing.JOptionPane;
public class EstudoMetodos {
public static void main(String[] args) {
mutiplica(3, 3, 3);
// metodo distancia
double xa, xb, ya, yb, distancia;
JOptionPane.showMessageDialog(null, "Forneceda as
coordendadas x e Y (em quilometros) das cidades A e B,
respectivamente");
xa =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada xa
"));
xb =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada xb
"));

ya =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada
ya"));
yb =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada
yb"));
distancia = distancia(xa, ya, xb, yb);
JOptionPane.showMessageDialog(null, "A distancia e de " +
distancia + "Quilomentros");
// metodo dobraValor
int x = 10; 40
dobraValor(x);
}
static double distancia(double x1, double y1, double x2, double y2)
{
double dx, dy, distancia;
dx = x2 - x1;
dy = y2 - y1;
distancia = Math.sqrt(dx * dx + dy * dy);
return distancia;
}
static int dobraValor(int a) {
System.out.println("Valor Original:\t" + a);
a = 2 * a;

System.out.println("\nO seu dobro eh:\t" + a);

return a;
}
static void imprimeNome() {
System.out.println("Maria do Rosario Hangalo");
}
static void mutiplica(float a, float b, float c) {
System.out.println("Resultado:\t" + (a * b * c));
}
static void saudacao() {
JOptionPane.showMessageDialog(null, "Bem vindos ao Centro de
Formao \n So Domingos");
}
}

Passagem de parmetros por referencia.


Ao se passar um vector como parmetro por valor, os seus elementos
se comportam como se fossem passados por referencia. 40
Isto significa que se forem alterado o valor de um elemento do vector
dentro do mtodo, essa alterao vai ocorrer tambm no elemento
do vector passado como parmentro.

public class InverteVector {


public static void main(String[] args) {
int[] valores = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println("Disposicao Orginam dos elementos");
for (int i = 0; i < valores.length; i++) {
System.out.println("Elemento na posicao" + i + ":\t" +
valores[i]);;
}
System.out.println("\nVector Invertido");
inverte(valores);
for (int i = 0; i < valores.length; i++) {
System.out.println("Elemento na posicao" + i + ":\t" +
valores[i]);;
}
}
static void inverte(int[] v) {
int k = v.length - 1;
for (int i = 0; i < v.length / 2; i++) {
int t = v[i];
v[i] = v[k - i];
v[k - i] = t;
}
}
}

Aps uma chamada ao mtodo inverte, os elementos do vector so


invertidos.

Retorno de valores 40
Esta seco trata da forma como os dados dos mtodos so
retornados, isto , como se produz uma sada do mtodo.
Um mtodo pode produzir, no decorrer da execuo das suas
instrues, uma valor final (uma sada), que dever ser passado para
o programa ou mesmo mtodo que o chamou. O valor retornado pelo
mtodo ser atribudo a alguma varivel do programa que chamou
este mtodo ou ento utilizado nalguma expresso ou ainda passado
para um mtodo de impresso no ecro.
Em java, deve-se declara o tipo de dado retornado pelo mtodo no
cabealho do mtodo e utiliza-se o comando return para especificar a
varivel ou o valor que dever ser retornado. Aps a sua execuo, a
execuo do mtodo corrente termina.

import javax.swing.*;
import java.text.*;

public class ConverteDistancias {

public static void main(String[] args) {


double milhas, kms;
milhas =
Double.parseDouble(JOptionPane.showInputDialog("Introduza a
distancia em milhas"));

kms = conversor(milhas);
mostraMsg(milhas, kms);
}

static double conversor(double milhas) {


double kms;
kms = 1.6093 * milhas;
return kms;
} 40

static void mostraMsg(double milhas, double kms) {


//definir o formato dos nnmeros decimais
DecimalFormat df = new DecimalFormat("0.00");

JOptionPane.showMessageDialog(null, "Distancia em Milhas:" +


df.format(milhas) + "\n" + "Distancia em Kms:" + df.format(kms));

}
}

Mtodos sem lista de parmetros


At agora os mtodos apresentados continham dados de entrada, ou
seja, uma lista de parmetros. Mas h casos em que isto no
necessrio, pois a funo executa as suas instrues sem precisar de
dados de entrada.

static void imprimeNome(){


System.out.println("Maria do Rosario Hangalo");

}
Mtodos sem retorno de dados
Assim como h mtodos que no tm nenhum parmetro, tambm h
funes que no retornam nenhum tipo de dados. Em java, para
traduzir esta situao utiliza-se a palavra reservada void como tipo de
dado retornado.

static void mutiplica(float a, float b, float c){


System.out.println("Resultado:\t"+(a*b*c)); 40
}

H tambm a opo do mtodo no ter nenhum parmetro de


entrada e nenhum dado de retorno

static void saudacao(){


JOptionPane.showMessageDialog(null, "Bem vindos ao Centro de
Formao \n So Domingos");
}

Separao das classes


No processo de modulizao podemos separar as classes que contm
os mtodos de propsitos gerais da classe que contem o mtodo
main.

public class Calculadora {

float num1;
float num2;
float resultado;

void setNum1(float n1) {


this.num1 = n1;
}

void setNum2(float n2) {


this.num2 = n2;
}

float getNum1() {
return num1;
}

float getNum2() {
return num2;
}

float getResultado() {
return resultado; 40
}

void setSoma(float n1, float n2) {


this.resultado = (n1 + n2);
}

void setSubtracao(float n1, float n2) {


this.resultado = (n1 - n2);
}

void setDivisao(float n1, float n2) {


this.resultado = (n1 / n2);
}

void setMultiplicasao(float n1, float n2) {


this.resultado = (n1 * n2);
}

void menu() {
System.out.println("@@@@@@@@@@Calculadora@@@@@@@@@
@@@@@");
System.out.println("Escolha a operasao");
System.out.println("1-Soma");
System.out.println("2-Divisao");
System.out.println("3-Multiplicasao");
System.out.println("4-Subtrasao");
}
}

import java.util.Scanner;

public class Principal {

public static void main(String args[]) {


int escolha = 0;
Scanner tec = new Scanner(System.in);

//Instanciar a classe que contem os mtodos


Calculadora calc = new Calculadora();
//chamada do mdoto menu()....
calc.menu();
System.out.println("Escolha uma opo:");
escolha = (tec.nextInt());
switch (escolha) {
case 1: {
System.out.println("Informe o primeiro valor a ser somado");
calc.setNum1(tec.nextFloat());
System.out.println("Informe o segundo valor a ser somado"); 40
calc.setNum2(tec.nextFloat());
calc.setSoma(calc.getNum1(), calc.getNum2());
System.out.println("O Resultado e : " + calc.getResultado());
break;
}
case 2: {
System.out.println("Informe o primeiro valor a ser dividido");
calc.setNum1(tec.nextFloat());
System.out.println("Informe o segundo valor a ser dividido");
calc.setNum2(tec.nextFloat());
calc.setDivisao(calc.getNum1(), calc.getNum2());
System.out.println("O Resultado e : " + calc.getResultado());
break;
}
case 3: {
System.out.println("Informe o primeiro valor a ser multiplicado");
calc.setNum1(tec.nextFloat());
System.out.println("Informe o segundo valor a ser multiplicado");
calc.setNum2(tec.nextFloat());
calc.setMultiplicasao(calc.getNum1(), calc.getNum2());
System.out.println("O Resultado e : " + calc.getResultado());
break;
}
case 4: {
System.out.println("Informe o primeiro valor a ser subtraido");
calc.setNum1(tec.nextFloat());
System.out.println("Informe o segundo valor a ser subtraido");
calc.setNum2(tec.nextFloat());
calc.setSubtracao(calc.getNum1(), calc.getNum2());
System.out.println("O Resultado e : " + calc.getResultado());
break;
}
}
}
}

Exerccios
Algumas frmulas apresentadas nos enunciados esto na sua forma
MATEMTICA e no na forma como devem ser escritas nos nos programas.
As indicaes entre parnteses so sugestes de nomes de
variveis(escrever os nomes das variveis conforne a conveno).
Elaborar o diagrama de blocos e/ou o pseudocdigo (portugus estruturado)
em todos os casos(em comentrio no programa).

40
1. Escreva um mtodo que receba um nmero inteiro positivo N como
parmetro e retorne a soma dos N nmeros inteiros existentes entre 1 e
esse nmero.
2. Escreva um mtodo que faa a converso binrio/decimal e vice-versa.
Sugesto: considerar o numero binrio como um vector de char de
0 ..1
3. Escrever um mtodo que aceite como entrada um numero inteiro positivo
n e mostre a sucesso dos nmeros inteiros positivos de 1 a n.
4. Escreva um mtodo que aceite como entrada um numero inteiro n e
visualize a sucesso dos nmeros inteiros positivos impares de 1 a n
5. Escreva um mtodo que aceite como entrada dois nmeros inteiros
positivos n e m, com n menor que m, e visualize a sucesso dos nmeros
positivos de n a m.
6. Escreva um mtodo que aceite como entrada um numero inteiro n e
visualize os nmeros primos menores do que n.
7. Escreva um mtodo que aceite como entrada um numero inteiro n e
visualize os nmeros triangulares menores do que n: 1, 3, 6, 10, 15, 21 [A
sequencia dos nmeros triangulares obtem-se partindo da unidade e
somando ao numero precedente: 2, 3, 4, 5]
8. Escrever um mtodo que aceite como entrada um numero inteiro n e
visualize as potencias cbicas dos nmeros naturais at potencia no
superior ao valor de n. 1, 8, 27, 64, 124
9. Escreva um mtodo que receba um valor inteiro positivo como parmetro
e retorne o factorial do nmero.
10. Escreva um mtodo que calcule uma potncia qualquer com expoente
inteiro maior ou igual a zero.
11. Alterar o mtodo anterior de modo que calcule tambm potncias com
expoente inteiro negativo.
12 . Escreva um mtodo que calcule, em funo da varivel x, o valor da
expresso:
13. O governo de uma cidade fez uma pesquisa entre os habitantes,
colectando dados sobre o salrio e o nmero de filhos.
Escreva uma funo que leia esses dados para um nmero no determinado
de pessoas e mostre a mdia salarial da populao, a mdia de filhos, o
maior salrio e a percentagem de pessoas com salrio at AKZ 12000,00.
14. Escreva um programa que controle o stock de uma empresa. Para isso
utilize uma matriz, onde cada coluna representa o cdigo do produto e cada
linha a quantidade em stock deste produto. Escreva trs funes para
controlo de stock: a primeira ser responsvel pela insero de produtos no
stock, a segunda pela remoo e a terceira para listar todo o stock.
15. Escreva um mtodo que dado um nmero inteiro retorne uma string
com cada dgito deste nmero por extenso, da forma:
40

64852 <= nmero passado como parmetro seis quatro oito cinco dois <=
string a ser retornada
16 Escreva um mtodo que receba um nmero inteiro. Este mtodo deve
verificar se tal nmero primo. No caso positivo, a funo deve retornar 1,
caso contrrio zero.
Escreva tambm um programa para testar tal mtodo.
17. Escreva um mtodo que receba dois nmeros inteiros x e y. Esse
mtodo deve verificar se x divisvel por y. No caso positivo, a funo deve
retornar 1, caso contrrio zero.
Escreva tambm um programa para testar tal mtod.
18. Um nmero dito regular caso a sua decomposio em factores primos
apresenta apenas potncias de 2, 3 e 5. Faa um mtodo que verifique se
um nmero (retorne 1) ou no (retorne 0) regular. Escreva tambm um
programa para testar tal funo.
19. Criar um mtodo que determine se um carcter, recebido como
parmetro, ou no uma letra do alfabeto. O mtodo deve retornar 1 caso
positivo e 0 em caso contrrio.
Escreva tambm um programa para testar tal mtodo.
20. Um nmero dito ser capicua se quando lido da esquerda para a
direita o mesmo que quando lido da direita para a esquerda. O ano 2002,
por exemplo, capicua. Ento, elabore um mtodo para verificar se um
nmero possui essa caracterstica. Caso o nmero seja capicua, o mtodo
deve retornar 1 e 0 em caso contrrio. Escreva tambm um programa para
testar tal mtodo.
21. Criar um mtodo que calcule e retorne o MAIOR entre dois valores
recebidos como parmetro. Um programa para testar tal mtodo deve ser
criado.
22 Criar um mtodo que verifique quantas vezes um nmero inteiro x
divisvel por um nmero inteiro y. O mtodo deve retornar -1 caso no seja
possvel calcular. Escreva tambm um programa para testar tal mtodo.
23. Construa uma funo que efectue a TROCA dos valores de a por b,
recebidos como parmetro. Crie tambm um programa que leia dois
valores quaisquer, e imprima os valores aps a chamada da funo TROCA.
24. Construa um mtodo que receba trs valores, a, b e c, retorne o
MAIOR e o MENOR valor desses trs. Deve ser criado um programa para
utilizar tal mtodo lendo os trs valores e imprimindo o maior e o menor
valor computado.
25. Construa um mtodo que receba dois valores inteiros a e b, retorne o
quociente, div, e o resto diviso, mod, de a por b. A funo deve retornar:
-1 caso no seja possvel realizar as operaes e 0 caso seja possvel. Um
programa para utilizar tal mtodo deve ser criado, tratando o retorno da
funo.
26. Construa um mtodo que receba cinco valores e determine o 2 e o 4
maior valores dentre eles. Construa tambm um programa para ler tais
valores, e imprimir o resultado obtido com a chamada do mtodo.
27. Construa um mtodo, que receba trs coeficientes relativos uma 40
equao de segundo grau (a.x2 + b.x + c = 0) e calcule as suas razes
atravs da frmula de Baskara:

O mtodo deve levar em conta a possibilidade da existncia de nenhuma,


uma ou duas razes. O mtodo deve retornar o nmero de razes ou -1 em
caso de inconsistncia. Os valores das razes devem ser retornados.
Construa tambm um programa para utilizar o mtodo construdo.
28. Crie um mtodo que realize a converso para Radianos (rad) a partir de
Graus (grad), onde grad passado como parmetro e rad retornado.
Sabe-se que 180 (graus) est para p radianos. Crie tambm um programa
para testar tal mtodo.

29. Crie um mtodo que realize a converso de Fahrenheit (F) para graus
Celsius (C), onde F passado como parmetro e C retornado. Sabe-se que
os pontos de fuso e ebulio nas escalas Celsius e Fahrenheit so: 0C e
100C, e 32F e 212F, respectivamente. Crie tambm um programa para
testar tal mtodo.
30. Crie um mtodo que realize a converso de Polegadas (pol) para
Centmetros (cm), onde pol passado como parmetro e cm retornado.
Sabe-se que 1 polegada est para 2,54 centmetros. Crie tambm um
programa para testar tal mtodo.
31. Crie um mtodo que realize a converso de ps (feet) para metros (m),
onde feet passado como parmetro e m retornado. Sabe-se que 1
metro est para 3,281 ps. Crie tambm um programa para testar tal
mtodo.
32. Crie um mtodo que realize a converso da escala Kelvin (K - escala
absoluta) para a escala Fahrenheit (F). Sabe-se que 273K equivale a 32F e
a cada variao de 10 unidades na escala Kelvin equivale a 18 na escala
Fahrenheit. O mtodo deve retornar zero caso no seja possvel realizar a
converso e um em caso contrrio. Crie tambm um programa para testar
tal mtodo.
33. Escrever um mtodo que receba o salrio mensal e a percentagem de
reajuste.
Calcular e retornar o valor do novo salrio. O salrio mensal, reajuste e novo
salrio devem ser do tipo float.
34. Escrever um mtodo que receba o raio de um crculo, calcular e
escrever a sua rea.
35. Faa um mtodo que leia uma sequncia de notas de alunos e mostre a
maior e a menor das notas. O final da leitura ser identificado pela
introduo de uma nota negativa, que no deve fazer parte do clculo.
36. Implementar um mtodo lerValorValido() que verifica se um valor
introduzido pelo utilizador pertence ao conjunto limitado por dois dados
valores inteiros, devolvendo o primeiro valor que pertena quele intervalo;
40

Arrays Estruturas de dados


homogneas

A manipulao de conjuntos de dados na memria um problema


clssico nas linguagens de programao em geral. A maneira
existente para resolver esta questo a utilizao de arrays. Um
array ou arranjo uma estrutura de dados armazenada na memria,
que possui uma referencia para o acesso e ndices para dimenses e
elementos. Os arrays podem ser unidimensionais (vectores) ou
multidimensionais(matrizes).
Os arrays, em java, so utilizados constantemente para reunir
objectos em coleces, nas quais possvel efectua pesquisas, bem
como manipulao e ordenao de elementos, de forma simples e
eficiente.
Um array uma sequencia de valores dos mesmo tipo, isto
homogneas, e os valores memorizados so chamados elementos.
Um array um tipo de dados que permite o armazenamento de
vrias informaes, na memria RAM, no mesmo instante de tempo e
com contiguidade fsica, ou seja, uma varivel possui vrios
elementos, igualmente distanciados, ou seja, um ao lado do outro na
memria principal.
Na linguagem java, os arrays so considerados objectos, sendo,
portanto, do tipo referencia. Eles podem armazenar colecces de
tipos primitivos (arrays primitivos) ou de tipos referencia (arrays de
objectos).
40
Cada elemento de um array armazena um valor. Os elementos de um
array so referenciados por meio de um ndice. O primeiro elemento
tem sempre o ndice 0 (zero). Portanto, para um array de n
elementos, os ndices variam de 0 a n-1.

Um elemento um valor dentro de um array e acedido pela sua


posio dentro deste array.
O valor destas posies pode ser manipulado conforme a necessiade.
Cada posio pode ser acedida individualmente, utilizando o operador
[] e informando a posio. A posio ou ndice de um array deve ser
um inteiro positivo ou uma expresso do tipo inteiro.
Todo array deve ser inicializado para que o seu tipo assuma valores
padro quando for passado algum valor, ou seja, de uma forma geral,
todo objecto (no apenas em arrays) no inicializado armazena null.

Em Java, os arrays tm tamanho fixo e, uma vez criados, no podem


ser redimensionados. O campo length contm o tamanho do array.
Um array um objecto da classe Object, ou seja, a criao de um
array cria, implicitamente, um objecto da classe java.lang.Object. Os
arrays so objectos e so criados dinamicamente e podem ser
assinados como variveis do tipo Object. Todos os mtodos da class
Object podem ser invocados num array.
O tamanho do array estabelecido quanto ele criado e aps a
criao o tamanho da sua estrutura fixa, portanto no pode ser
alterada. Quando se cria um objecto array utilizando o operador new,
todos os ndices so inicializados automaticamente, sendo 0 (zero)
para arrays numricos, falso para boolean, \0000 para caracteres, e
NULL para objectos.
Os arrays so objectos. Se forem passados como parmetros para um
mtodo, a passagem sempre por referencia do objecto.

Quando necessrio armazenar dados de diferentes tipos numa


estrutura simples ou ento se precisa utilizar uma estrutura que
possa mudar dinamicamente o seu tamanho ento tem-se a
disposio as coleces (Framework Collection) da API, as quais so
simples para este tipo de situao

Valores padro de arrays no


pr-definidos
Tipo de Valor Incial
elemento
byte, short, int 0 (zero)
char \0000 (Unicode)
long 0L (zero)
float 0.0F (zero)
double 0.0D (zero) 40
boolean false
Object null
Reference

Criao de arrays
Pode-se criar arrays vazios ou com elementos e estes elementos
podem ser consultados ou modificados.
Lembrete
Um a arrays uma coleco de tipos iguais sendo eles primitivos ou
no
O tamanho do array pode ou no ser especificado;
Pode-se colocar os colchetes [] antes ou depois do identificador do
array;
Pode-se fazer converso (casting) em elementos de arrays desde que
sejam seguidas as regras padro de casting.
Pode-se copiar topo ou parte de um array para outro arrays, desde
que seja do mesmo tipo
A criao de um array d-se quando da sua declarao.

Declarao para a criao de um array

Sintaxe
tipo_de_dado[] identificador = new tipo_de_dado[tamanho];
ou
tipo_de_dado identificador [] = new tipo_de_dado[tamanho];

Exemplo 1
float[] salario;
exemplo 2
double a[], b[], c[];
pode ser escrito como: double[] a, b, c;
Esta declarao simples de um array no aloca memria para
armazenar os elementos do array, ela apenas indica que se trata de
algum tipo de array. Se o programa tentar aceder qualquer elemento
deste array antes de se alocar memria para ele, o compilador
mostrar um erro de compilao.

A declarao do array no cria o objecto.S cria uma referncia


(ponteiro) para o array

Exemplo 2
char letra[] = new char[26]; // vetor de 26 valores do tipo char 40
Ponto p[] = new Ponto[3]; // vetor de 3 objetos da classe Ponto
int x[] = {2,8,3,5,1}; // declarao e inicializao

float[] salario = new float[10];

O acesso a um elemento de ndice fora do intervalo declarado para o


array gera uma excepo (erro em tempo de execuo).
Depois de criado, o array possui atributos e mtodos como qualquer
outro objecto.

Inicializao de arrays
Aps a criao, os elementos do array devem ser inicializados, antes
de serem utilizados (na criao, os elementos so inicializados com o
valor padro). Na verdade, quando se cria um novo array ele no tem
nada dentro dele e quando inicializado passa a ter o mnimo dentro
dele o que depende de cada tipo de array criado.
Existem diferentes modos de declarao e de inicializao de arrays.

Exemplo Descrio
String nome[] = new String[3]; Declara primeiro e inicializa
nome[0] = "Z"; depois. O tamanho do array
nome[1] = "J"; dado na declarao. A alocao
nome[2] = "Lu"; de memria feita pela
declarao. A inicializao ocorre
depois da memria ter sido
alocada.
String nome[]; Declara somente o ponteiro. Em
int n = 3; seguida cria os objectos. Notar
nome = new String[n]; que entre a declarao do
nome[0] = "Z"; ponteiro e a criao dos objectos,
nome[1] = "J"; o tamanho do array pode ser lido,
nome[2] = "Lu"; atribudo ou calculado. Com isso,
o array pode ter exactamente o
tamanho necessrio. A
inicializao ocorre depois da
memria ter sido alocada.
String nome[] = {"Z","J","Lu"}; Declara e inicializa. O tamanho
do array dado pelo nmero de
valores na lista de inicializao. A
alocao de memria feita
durante a inicializao.

Acesso aos elementos de um array


40
O acesso e a impresso dos elementos de um array pode ser feito de
duas formas. Imprimindo os ndices desejados em arrays pequenos
ou, de forma melhor e eficiente percorrendo o array com uma das
estruturas de repito (for, while, do-while)

public class AcessoElementos {

public static void main(String[] args) {


//cria um array com posies
int[] inteiros = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15};

//Lao for para mostrar todos os elementos do array


System.out.println("Todos os elementos do array");
for (int i = 0; i < inteiros.length; i++) {
System.out.print(inteiros[i] + ",");
}

System.out.println(); // Pula uma linha

System.out.println("Elemento 5=" + inteiros[4]);


System.out.println("Elemento 10=" + inteiros[9]);
System.out.println("Elemento 15=" + inteiros[14]);
}
}

Tambm possivel efectuar operaes matemtivas sobre os


elementos de arrays numricos. Os ndices do array podem ser
tratados como variveis independentes, sendo assim pode-se utilizar
estes ndices para realizar clculos

public class SomaPares {

public static void main(String[] args) {


// cria um array de numeros inteiros
int[] inteiros = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20};
int soma = 0;
for (int i = 0; i < inteiros.length; i++) {
if (inteiros[i] % 2 == 0) {
soma += inteiros[i];
}
}
System.out.print("A soma dos elementos pares do array e =" +
soma);
40
}
}

public class MeuArray {

public void mostrarValores(String nome, int vetor[]) {


for (int i = 0; i < vetor.length; i++) {
System.out.println(nome + "[" + i + "] = " + vetor[i]);
}
}
}
import javax.swing.JOptionPane;

public class LerTamanhoArray {

public static void main(String[] args) {


int v[];
String sTam;
int tam;
sTam = JOptionPane.showInputDialog("Tamanho do vetor");
tam = Integer.parseInt(sTam);
// Construir um array do tamanho desejado
v = new int[tam];
for (int i = 0; i < tam; i++) {
v[i] = 2 * (i + 1);
}
MeuArray mv = new MeuArray();
mv.mostrarValores("v", v);
}
}

import java.util.*;
public class ExemploArray {

public static void lerArray(int v[]) {


Scanner in = new Scanner(System.in);
for (int i = 0; i < v.length; i++) {
System.out.print("v[" + i + "] = ");
v[i] = in.nextInt();
}
}

public static int somarArray(int v[]) { 40


int soma = 0;
for (int i = 0; i < v.length; i++) {
soma = soma + v[i];
}
return soma;
}

public static void mostrarArray(int v[]) {


System.out.print("[");
for (int i = 0; i < v.length; i++) {
System.out.print(v[i]);
if (i < v.length - 1) {
System.out.print(", ");
}
}
System.out.println("]");
}

public static void main(String[] args) {


int n, x[];
Scanner in = new Scanner(System.in);
System.out.print("Tamanho do array: ");
n = in.nextInt();
x = new int[n];
lerArray(x);
mostrarArray(x);
int s = somarArray(x);
System.out.println("Soma = " + s);
}
}

Arrays como parmetros de mtodos


Os arrays podem ser parmetros de mtodos. Na chamada ao
mtodo, somente o nome do array passado. Os arrays, como so
objectos (e, portanto, o nome do array um ponteiro) so sempre
passados por referncia.
public class MeuArray {

public void mostrarValores(String nome, int vetor[]) {


for (int i = 0; i < vetor.length; i++) {
System.out.println(nome + "[" + i + "] = " + vetor[i]);
}
}
} 40
public class ProgArray {

public static void main(String[] args) {


int x[] = {1, 2, 3, 4, 5};
MeuArray mv = new MeuArray();
mv.mostrarValores("x", x);
}
}

Recordando:

Existem duas maneiras de passar parmetros para os mtodos: a


passagem por valor e a passagem por referncia.
Quando um parmetro passado por valor, uma cpia do valor do
parmetro passada para o mtodo chamado. O mtodo chamado
trabalha exclusivamente com a cpia. As alteraes feitas na cpia
pelo mtodo chamado no afectam o valor do parmetro original.
Quando um parmetro passado por referncia, o mtodo chamado
trabalha directamente com o parmetro original e, portanto, as
alteraes feitas pelo mtodo chamado afectam o parmetro
original.
Em Java, o programador no escolhe o tipo de passagem de
parmetros: valores primitivos so passados por valor e referncias a
objectos so passados por referncia.
Notar que:
Os arrays so passados por referncia (pois o nome do array uma
varivel de referncia)
Os elementos do array de tipos primitivos so passados por valor

Exerccios de consolidao.
1
Criar um programa que receba um array de inteiros e o apresente
ordenado utilizando o algoritmo da fora bruta
public class OrdenaVector {
public static void main(String[] args) {
int[] vetor = {5, 40, 20, 10, 50, 30};
System.out.print("Vector de Entrada: ");
for (int i = 0; i < vetor.length; i++) {
System.out.print(vetor[i] + " ");
}
System.out.println();
for (int i = 0; i < vetor[0] - 1; i++) {
for (int j = i + 1; j < vetor[0]; j++) {
if (vetor[i] > vetor[j]) {
int temp = vetor[i]; // sort 40
vetor[i] = vetor[j];
vetor[j] = temp;
}
}
}
System.out.print("Vetor Ordenado: ");
for (int i = 1; i < vetor.length; i++) {
System.out.print(vetor[i] + " ");
}
System.out.println();
System.out.println("Nmero de Elementos: " + vetor[0]);

}
}

2
Considere que um array v contm o nmero de notas dos alunos de
FP2 agrupadas em categorias, ou seja: v[0] contm o nmero de
notas de 0.0 a 0.9, v[1] contm o nmero de notas de 1.0 a 1.9, v[2]
contm o nmero de notas de 2.0 a 2.9, assim por diante, at v[10],
que contm o nmero de notas 10. Mostrar a distribuio de notas
por meio de um grfico de barra de asteriscos (*).

public class GraficoBarras {

public void mostrarGrafico(int vetor[]) {


for (int i = 0; i < vetor.length; i++) {
if (i < 10) {
System.out.printf("%3.1f-%3.1f: ", (i + 0.0), (i + 0.9));
} else {
System.out.printf("%7.1f: ", 10.0);
}
for (int j = 0; j < vetor[i]; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
import javax.swing.JOptionPane;

public class DistribuicaoNotas {

public static void main(String[] args) {


int v[] = new int[11];
String s;
int nAlunos, nota, categ;
for (int i = 0; i < 11; i++) {
v[i] = 0; 40
}
s = JOptionPane.showInputDialog("Numero de alunos");
nAlunos = Integer.parseInt(s);
// Ler as notas dos alunos e distribuir nas categorias
for (int i = 0; i < nAlunos; i++) {
s = JOptionPane.showInputDialog("Nota do aluno " + (i + 1));
nota = Integer.parseInt(s);
categ = nota / 10;
v[categ]++;
}
GraficoBarras gb = new GraficoBarras();
gb.mostrarGrafico(v);
}
}

Arryas Multidimensionais

A linguagem java no possui arrays multidimensionais, mas permite


declarar um array baseado num outro array, assim consegue-se um
array de arrays.
Estes arrays so chamados de array esparo por alguns
autores/programadores e so um agrupamento indexado de dados
onde nem todas as dimenses so iguais. Arrays esparos podem ser
representados em Java atravs de arrays com dimenses
heterogneas.
A flexibilidade de se colocar os colchetes esquerda ou a direita do
nome da varivel no se aplica a outros aspectos da sintaxe dos
arrays. Por exemplo, new int[][10], no vlido.
Sintaxe para a declarao e instanciao de arrays de arrays

tipo_de_dado[l][c] identificador = new tipo_de_dado[l][c];


ou
tipo_de_dadoidentificador [l][c] = new tipo_de_dado[l][c];
Onde l=linha e c = coluna.

Pode-se tambm utilizar a forma directa que tem a seguinte sintaxe,


por exemplo para um array 3x4;

int[][] matrizInteiros ={ {1, 2, 3, 4},{5, 6, 7, 8}, {9, 10, 11, 12}};


40
coluna [0] coluna [1] coluna [2] coluna [3]
Linha[0] 1 2 3 4
Linha[1] 5 6 7 8
Linha[2] 9 10 11 12

Percorrer uma matriz


Para percorrer uma matriz em geral necessrio utilizar mais de uma
estrutura de repetio

public class VectorMatriz {

public static void main(String[] args) {


int[] vetor = {10, 20, 30, 40, 50};
int[][] matriz = {{1, 2}, {3, 4}, {5, 6}};
int numLin = 3, numCol = 2;
System.out.println("Vector Unidimensional");
for (int i = 0; i < vetor.length; i++) {
System.out.println("Vector: " + vetor[i]);
}
System.out.println("\n\nMatriz Bidimensional de ordem: " +
numLin + " x " + numCol);
for (int i = 0; i < numLin; i++) {
for (int j = 0; j < numCol; j++) {
System.out.println("Matriz: " + matriz[i][j]);
}
}

}
}

Entrada de dados para um array Unidimensional:

final int NUMERO_ELEMENTOS = 7;


int [] vector = new int [NUMERO_ELEMENTOS];
for (int i = 0;i < vector.length;i++) {
s = JOptionPane.showInputDialog(Valor: );
vetor[i] = Integer.parseInt(s);
}

Entrada de dados para um vector Bidimensional:

final int NUMERO_LINHAS = 3;


final int NUMERO_COLUNAS = 4;
40

double [][] matriz = new double [NUMERO_LINHAS]


[ NUMERO_COLUNAS];
for (int i = 0;i < matriz.length;i++) {
for (int j = 0;j < matriz[i].lengeh;j++) {
s = JOptionPane.showInputDialog(Valor: );
matriz[i][j] = Integer.parseInt(s);
}
}

muito comum se cometerem erros quanda impresso dos


elementos de arrays de arrays. Na impresso em geral utilizado
mais de um for, mas no segundo for necessrio especificar tambm
a linha do array constante do primeiro for conforme de pode ser
destacado no trecho anterior.

import java.util.*;
public class ExemploMatriz {
public static void lerMatriz(int m[][]) {
Scanner in = new Scanner(System.in);
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
System.out.print("m[" + i + "," + j + "] = ");
m[i][j] = in.nextInt();
}
}
}

//O mtodo modificarMatriz(n,m) multiplica


//cada elemento de m pelo valor de n.
public static void modificarMatriz(int n, int m[][]) {
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
m[i][j] = n * m[i][j];
}
}
}

public static int[][] somarMatrizes(int a[][], int b[][]) {


int soma[][] = a;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
soma[i][j] = a[i][j] + b[i][j];
}
}
return soma; 40
}

public static void mostrarMatriz(int m[][]) {


for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
System.out.printf("%4d", m[i][j]);
}
System.out.println();
}
}

public static void main(String[] args) {


int numLins, numCols, mat1[][];
Scanner in = new Scanner(System.in);
System.out.print("Nmero de linhas: ");
numLins = in.nextInt();
System.out.print("Nmero de colunas: ");
numCols = in.nextInt();
mat1 = new int[numLins][numCols];
lerMatriz(mat1);
System.out.println("\nMatriz 1:");
mostrarMatriz(mat1);
int mat2[][] = new int[numLins][numCols];
mat2 = (int[][]) mat1.clone();
modificarMatriz(2, mat2);
System.out.println("\nMatriz 2:");
mostrarMatriz(mat2);
int mat3[][] = somarMatrizes(mat1, mat2);
System.out.println("\nMatriz 3:");
mostrarMatriz(mat3);
}
}

Em Java possvel criar mtodos que recebem um nmero no


especificado de parametros. Um tipo seguido por reticncias (...) indica que
o mtodo recebe um nmero varivel de parmetros deste tipo. As
reticncias podem ocorrer apenas uma vez e devem ser colocadas no fim
da lista de parmetros.
No corpo do mtodo, a lista de parametros de comprimento varivel
tratada como um vector.
public class CalcularMedia {
public double media(double... valor) {
//Notar que o parmetro valor tratado como um vetor no corpo do
mtodo.
double soma = 0.0;
for (int i = 0; i < valor.length; i++) {
soma = soma + valor[i];
}
return (soma / valor.length);
} 40
}
import java.util.Locale;
public class TesteMedias {
public static void main(String[] args) {
double d1 = 10.0;
double d2 = 20.0;
double d3 = 30.0;
double d4 = 40.0;
CalcularMedia cm = new CalcularMedia();
System.out.printf(Locale.US, "Valores: %4.1f, %4.1f, %4.1f, %4.1f\n",
d1, d2, d3, d4);
System.out.printf(Locale.US, "Media dos dois primeiros = %5.2f\n",
cm.media(d1, d2));
System.out.printf(Locale.US, "Media dos tres primeiros = %5.2f\n",
cm.media(d1, d2, d3));
System.out.printf(Locale.US, "Media de todos os quatro = %5.2f\n",
cm.media(d1, d2, d3, d4));
}
}

Exerccios de consolidao
1
Criar um programa que leia 4 notas de X alunos e armazene os
dados numa matriz. Em seguida, mostre as 4 notas e a mdia obtida
dos X aluno.

import java.util.Scanner;
public class MediaAlunos {
public static void main(String[] args) {
Scanner Entrada;
Entrada = new Scanner(System.in);
System.out.print("Digite a quantidade de alunos: ");
int lin = Entrada.nextInt();
float[][] mat = new float[lin][4];
for (int i = 0; i < mat.length; i++) {
System.out.println("Aluno" + (i + 1));
System.out.print("Digite nota 1: ");
mat[i][0] = Entrada.nextFloat();
System.out.print("Digite nota 2: ");
mat[i][1] = Entrada.nextFloat();
System.out.print("Digite nota 3: ");
mat[i][2] = Entrada.nextFloat();
System.out.print("Digite nota 4: ");
mat[i][3] = Entrada.nextFloat();
System.out.println("=========================
=======");
}
for (int i = 0; i < mat.length; i++) {
System.out.println("Aluno" + (i + 1));
System.out.println("Nota 1: " + mat[i][0]); 40
System.out.println("Nota 2: " + mat[i][1]);
System.out.println("Nota 3: " + mat[i][2]);
System.out.println("Nota 4: " + mat[i][3]);
System.out.println("Mdia: " + ((mat[i][0] + mat[i][1] +
mat[i][2] + mat[i][3]) / 4));
System.out.println("=========================
=======");
}
}
}

2
Criar um programa que l uma matriz e uma linha qualquer e retorne
a soma dos elementos dessa linha.

import java.util.Scanner;
public class ElementoLinha {
public static void main(String[] args) {
Scanner Entrada;
Entrada = new Scanner(System.in);
System.out.print("Linhas: ");
int lin = Entrada.nextInt();
System.out.print("colunas: ");
int col = Entrada.nextInt();
int[][] mat = new int[lin][col];
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
System.out.print("Elemento: ");
mat[i][j] = Entrada.nextInt();
System.out.print("\n");
}
}
System.out.print("Digite uma linha (0-" + (lin - 1) + "): ");
int linha = Entrada.nextInt();
System.out.println("Elementos da Linha");
for (int j = 0; j < col; j++) {
System.out.print(mat[linha][j] + "\t");
}
}
}

3
Cria um programa que le uma matriz quadrada e retorne a soma dos
elementos da diagonal principal e abaixo desta.

import java.util.Scanner;
public class SomaDiagonalAbaixo {
40
public static void main(String[] args) {
Scanner Entrada;
Entrada = new Scanner(System.in);
System.out.print("Ordem da Matriz: ");
int lin = Entrada.nextInt();
int[][] mat = new int[lin][lin];
for (int i = 0; i < lin; i++) {
for (int j = 0; j < lin; j++) {
System.out.print("Elemento: ");
mat[i][j] = Entrada.nextInt();
System.out.print("\n");
}
}
int soma = 0;
for (int i = 0; i < lin; i++) {
for (int j = 0; j < lin; j++) {
if (i >= j) {
System.out.print(mat[i][j] + "\t");
soma = mat[i][j] + soma;
}
}
}
System.out.println("A soma dos elementos : " + soma);
}
}

4
Criar um programa que leia uma matriz matA e retorne matB, tal que
matB=matAT.

import java.util.Scanner;
public class Transposta {
public static void main(String[] args) {
Scanner Entrada;
Entrada = new Scanner(System.in);
System.out.print("Linhas: ");
int lin = Entrada.nextInt();
System.out.print("colunas: ");
int col = Entrada.nextInt();
int[][] mat = new int[lin][col];
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
System.out.print("Elemento: ");
mat[i][j] = Entrada.nextInt();
System.out.print("\n");
}
}
int[][] mat2 = new int[lin][col];
for (int i = 0; i < lin; i++) { 40
for (int j = 0; j < col; j++) {
mat2[i][j] = mat[j][i];
}
}
System.out.println("Matriz digitada:");
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
System.out.print(mat[i][j] + "\t");
}
System.out.print("\n");
}
System.out.println("Matriz transposta:");
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
System.out.print(mat2[i][j] + "\t");
}
System.out.print("\n");
}

}
}

Exerccios
Algumas frmulas apresentadas nos enunciados esto na sua forma
MATEMTICA e no na forma como devem ser escritas nos nos programas.
As indicaes entre parnteses so sugestes de nomes de
variveis(escrever os nomes das variveis conforne a conveno).
Elaborar o diagrama de blocos e/ou o pseudocdigo (portugus estruturado)
em todos os casos(em comentrio no programa).
1. Implementar o mtodo lerVector() que preenche um vector com DIM
valores reais (DIM >= 1);

2. Implementar o mtodo mostrarVector() que mostra um vector com DIM


valores reais (DIM >=1);

Consulte os livros de lgebra linear e:


40
3. Escreva um programa para calcular a transposta de uma matriz.
4. Escreva um programa para calcular o determinante de uma matriz.
5. Escreva um programa para inverter uma matriz.

6. Foi feita uma estatstica em algumas cidades angolanas para colectar


dados sobre acidentes de trnsito. Foram obtidos os seguintes dados:
cdigo da cidade
nmero de veculos de passeio
nmero de acidentes de transito com vtimas
Faa um programa que leia estes dados e mostre:
qual o maior e o menor ndice de acidentes de transito e a que cidades
pertencem
qual a mdia de veculos nas cidades juntas
qual a mdia de acidentes de trnsito nas cidades com menos de 2.000
veculos de passeio
OBS.: A quantidade de cidades a serem lidas um nmero a ser digitado
pelo utilizador

7. Faa um programa para contagem de votos numa eleio presidencial


onde existem quatro candidatos. Os votos para cada candidato so
informados atravs do nmero do candidato.
Os dados utilizados para a contagem dos votos obedecem seguinte
codificao:
1,2,3,4 = voto para os respectivos candidatos;
5 = voto nulo;
6 = voto em branco;
O programa deve calcular e mostrar:
total de votos para cada candidato;
total de votos nulos;
total de votos em branco;
Para finalizar a leitura de votos, o utilizador deve digitar 0.
8. Faa um programa que imprima uma matriz quadrada de dimenso 2
contendo: o nmero 1 nos elementos abaixo da diagonal principal o nmero
0 nos demais elementos
9- Faa um programa que leia uma matriz A de duas dimenses com 4 linha
e 5 colunas. Construir uma matriz B de mesma dimenso, sendo que cada
elemento da matriz B dever ser o dobro de cada elemento correspondente
da matriz A, com excepo para os valores situados na diagonal principal
(posies B[1,1], B[2,2], B[3,3], B[4,4] e B[5,5]) os quais devero ser o triplo
de cada elemento correspondente da matriz. Apresentar, no fim, a matriz B.
10. Faa um programa que leia um vector A com 10 nmeros inteiros,
calcule e mostre a soma dos quadrados dos elementos do vector.

11. Dada uma tabela de 4x5 elementos, faa um programa para calcular a
soma de cada linha da matriz. Apresente o somatrio de cada linha, e o
somatrio total de todas as linhas.

12. Elaborar um programa que efectue o clculo de uma tabuada de um


nmero qualquer e armazene os resultados numa matriz A de uma
dimenso para 10 elementos. Apresentar os valores armazenados na
matriz.
40
13. Construir um programa que leia 6 elementos (valores inteiros) para as
matrizes A e B de uma dimenso do tipo vector.
Construir as matrizes C e D de mesmo tipo e dimenso, sendo que a matriz
C dever ser formada pelos elementos de ndice par das matrizes A e B, e a
matriz D dever ser formada pelos elementos de ndice mpar das matrizes
A e B. Apresentar as matrizes C e D.

14. Dada uma tabela de 4 x 5 elementos, faa um programa para calcular a


soma de cada linha e a soma de todos os elementos da matriz.
15. Escreva um programa que l uma matriz M(5,5) e calcula as somas:
a) da linha 4 de M
b) da coluna 2 de M
c) da diagonal principal
d) da diagonal secundria
e) de todos os elementos da matriz
Escreva estas somas e a matriz.
16. Construir um programa que l 6 valores, e conta quantos destes valores
so negativos. Armazene estes valores num vector. Ao final, imprima a
mdia aritmtica destes valores.

17. Implemente um programa que tenha os seguintes mtodos:


a) Mtodo que receba por parmetro um vector de nmeros inteiros e
um nmero inteiro indicando o nmero de elementos armazenados
neste vector. Este mtodo dever retornar o maior valor armazenado
neste vector.
b) Mtodo que recebe por parmetro um vector de nmeros inteiros e
um nmero inteiro indicando o nmero de elementos armazenados
neste vector. Este mtodo dever retornar a mdia dos valores
armazenados neste vector.
No mtodo main dever ser declarado um vector de 100 posies
para armazenar a idade dos alunos do primeiro semestre do curso de
Engenharia Informti a. Pea ao utilizador para digitar as idades e
armazene-as no vector at que seja digitada uma idade negativa ou
at que o vector seja totalmente preenchido. Depois apresente a
mdia das idades e a idade do aluno mais velho chamando os
mtodos implementadas.

18. Um Quadrado Mgico uma matriz quadrada NxN na qual so


armazenados nmeros inteiros, de tal forma que a soma dos nmeros
presentes em cada linha, e a soma dos nmeros presentes em cada coluna,
sempre igual. Um exemplo de quadrado mgico de dimenso 3x3
apresentado a seguir. Crie um programa que leia um nmero N(<5), e ento
leia os nmeros de uma matriz NxN do teclado, verificando se os nmeros
digitados formam um Quadrado Mgico.

19 Elabore um programa para ler o nome completo de dez pessoas


armazenando-os numa matriz, e imprimindo-os no seguinte formato:
sobrenome, nome.
20. Elabore um programa que manipule os dados para uma sala de 52
alunos. O 40
programa deve receber como entrada (via leitura de teclado):
- Os nomes dos alunos.
- As duas notas parciais.
O programa deve calcular e imprimir, numa mesma linha, para cada aluno:
- O nome e a sua mdia final.
E tambm deve apresentar:
- A quantidade de alunos com mdia maior que a mdia geral da turma.
- A maior mdia da turma, e a menor mdia da turma.
- A quantidade de alunos aprovados (media >=9.5), reprovados(media < 7)
e em exame de recurso (media entre 9 e 7).

22. O Sudoku um jogo japons onde deve-se completar uma matriz 9x9 de
nmeros inteiros entre 1 e 9, de tal forma que:
em cada linha, aparea apenas um dgito de cada;
em cada coluna, aparea apenas um dgito de cada;
em cada sub-matriz 3x3 aparea apenas um dgito de cada;
Elabore um programa que seja capaz de verificar se uma matriz 9x9 uma
soluo para o Sudoku.

Dica: para verificar a presena nica de cada dgito em cada linha, coluna
ou submatriz, utilize um vector auxiliar de tamanho 10.

(continua)