Você está na página 1de 25

SENAC

Linguagem Orientada a Objetos

Área: Algoritmos
Linha: Desenvolvimento

Lucas Silveira − Autor

Brası́lia - 2017

i
1 Sintaxe Básica do Java
Apresentando várias maneiras de se escrever texto. Email: cnecsistemas2016@gmail.com

• O método print imprime na tela e o cursor permanece exatamente após o último caracetere impresso,
ou seja, qualquer outra coisa q for impressa ou digitada virá imediatamente após (colada) ao text
impresso pelo print.

• O println imprime e dá uma quebra de linha (enter), o cursor ficará posicionado na próxima linha,
tudo q for impresso ou digitado após o println virá na linha imediatamente abaixo do q foi impresso
pelo println.

• O printf (método da versão 5 de java, vale lembrar) é um método que imprime seguindo uma
formatação ditada por uma String. Sendo mais explı́cito: O primeiro parâmetro desse método
deve ser uma String contendo todos os comando de formatação (comandos de escape) para que em
seguida se passa uma lista de argumentos q seguirão a formatação definida no primeiro parâmetro
String passado.

1 public class SENAC {


2 public static void main ( String [] args ) {
3 String texto = " ao SENAC " ;
4 System . out . print ( " Bem vindos " + texto ) ;
5 System . out . println ( " Bem vindos " + texto ) ;
6 System . out . printf ( " Bem vindos % s " , texto ) ;
7 System . out . printf ( " Bem vindos " + texto ) ;
8 }
9

10 }

Utilizando o método printf para exibir múltiplos argumentos:

1 package senac
2

3 /* *
4 *
5 * @author lucas
6 */
7 public class SENAC {
8 public static void main ( String [] args ) {
9 System . out . printf ( " % s \ n % s \ n " , " bem vindo " , " a Asa Sul !!! " ) ;
10 }
11

12 }

1.1 Somando Inteiros em Java

1 package senac ;
2 /* *
3 *

1
4 * @author lucas
5 */
6 import java . util . Scanner ;
7

8 public class SENAC {


9 public static void main ( String [] args ) {
10

11 Scanner input = new Scanner ( System . in ) ;


12

13 int num1 , num2 , soma ;


14

15 System . out . print ( " Primeiro numero : " ) ;


16 num1 = input . nextInt () ;
17

18 System . out . print ( " Segundo numero : " ) ;


19 num2 = input . nextInt () ;
20 soma = num1 + num2 ;
21 System . out . println ( " Resultado da soma : " + soma ) ;
22

23 }
24 }

Exercicio:
Adeque o código acima para receber valores em ponto flutuante, e somente valores positivos.

1.2 Aritmética

Regras de precedência de operadores:

1. Operações de multiplicação, divisão e módulo são aplicadas primeiro. Se uma expressão contiver
várias dessas operações elas serão aplicadas da esquerda para a direita. Os operadores citados
anterioremente tem o mesmo nı́vel de precedência.

2. Operações de adição e subtração pertencem ao segundo nı́vel de precedência. Se uma expressão


contiver várias dessas operações elas serão aplicadas da esquerda para a direita. Os dois operadores
possuem o mesmo nı́vel de precedência.

3. Para evitar redundância o desenvolvedor pode utilizar parênteses ”(”, ”)”exemplo: (x*y)+ z ou x
* (y+z).

2
1.3 Operadores de Igualdade e Operadores Relacionais

Exemplo:

1 package senac ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 import java . util . Scanner ;
8

9 public class SENAC {


10 public static void main ( String [] args ) {
11 Scanner input = new Scanner ( System . in ) ;
12 int num1 , num2 ;
13 System . out . print ( " Primeiro numero : " ) ;
14 num1 = input . nextInt () ;
15 System . out . print ( " Segundo numero : " ) ;
16 num2 = input . nextInt () ;
17 if ( num1 == num2 ) {
18 System . out . printf ( " % d ==% d \ n " , num1 , num2 ) ;
19 }
20 if ( num1 != num2 ) {
21 System . out . printf ( " % d !=% d \ n " , num1 , num2 ) ;
22 }
23 if ( num1 < num2 ) {
24 System . out . printf ( " %d <% d \ n " , num1 , num2 ) ;
25 }
26 if ( num1 > num2 ) {
27 System . out . printf ( " %d >% d \ n " , num1 , num2 ) ;
28 }
29 if ( num1 <= num2 ) {
30 System . out . printf ( " %d <=% d \ n " , num1 , num2 ) ;
31 }
32 if ( num1 >= num2 ) {

3
33 System . out . printf ( " %d >=% d \ n " , num1 , num2 ) ;
34 }
35 }
36 }

Exercı́cio:
Implemente um algoritmo que lê um inteiro, determina e imprime se ele é impar ou par. Dica: utilize o
operador de módulo.

2 Classes e Métodos
Nosso próximo exemplo declara a classe SENAC com um método MostraMensagem que exibe o
nome do curso como parte da mensagem de boas vindas.

1 package senac ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 import java . util . Scanner ;
8

9 public class SENAC {


10

11 public void MostraMensagem ( String NomeCurso ) {


12 System . out . println ( " Bem vindo ao Curso : " + NomeCurso ) ;
13 } // end metodo
14

15

16 public static void main ( String [] args ) {


17

18 Scanner input = new Scanner ( System . in ) ;


19 // criando um objeto
20 SENAC obj = new SENAC () ;
21

22 String nomecurso ;
23

24 System . out . print ( " Entre com o curso : " ) ;


25 nomecurso = input . nextLine () ; // le uma linha de texto
26 System . out . println () ; // gera uma linha em branco
27

28 // chama o metodo criando MostraMensagem


29 obj . MostraMensagem ( nomecurso ) ; // lembrar de passar o parametro
30 }
31 }

2.1 Variáveis de instância, métodos set e get


No java temos como padrão utilizar métodos com prefixo set para definir variáveis e métodos com
prefixo get para recuper os dados de uma variável.

4
O exemplo a seguir apresenta o método setNomeCurso o qual armazena o nome do curso de uma
instituição e o método getNomeCurso obtém o nome do curso. O método MostraMensagem agora não
contém parâmetro, e utiliza o valor obtido pelo método getNomeCurso para mostrar a mensagem.

1 package senac ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 import java . util . Scanner ;
8

9 public class SENAC {


10

11 private String nomeCurso ;


12

13 public void setNomeCurso ( String nome ) {


14 nomeCurso = nome ;
15 }
16

17 public String getNomeCurso () {


18 return nomeCurso ;
19 }
20

21 public void MostraMensagem () {


22 System . out . println ( " Bem vindo ao Curso : " + getNomeCurso () ) ;
23 } // end metodo
24

25 public static void main ( String [] args ) {


26

27 Scanner input = new Scanner ( System . in ) ;


28 // criando um objeto
29 SENAC obj = new SENAC () ;
30

31 String nomecurso ;
32

33 System . out . print ( " Entre com o curso : " ) ;


34 nomecurso = input . nextLine () ; // le uma linha de texto
35 System . out . println () ; // gera uma linha em branco
36

37 // definindo o nome do curso utilizando o metodo setNomeCurso


38 obj . setNomeCurso ( nomecurso ) ;
39 // chama o metodo MostraMensagem
40 obj . MostraMensagem () ; // lembrar de passar o parametro
41 }
42 }

5
2.1.1 Modificadores de Acesso public e private

A maioria das declarações de variável instância é precedida pela palavra-chave private. Como public,
a palavra-chave private é um modificador de acesso. Variáveis ou métodos declarados com private só
são acessı́veis a métodos da classe em que são declarados. Assim, a variável nomeCurso só pode ser
utilizada nos métodos setNomeCurso e getNomeCurso e MostraMensagem da classe UBC.

2.2 Inicializando Objetos com Construtores


Quando um objeto é criado a partir de uma classe sem construtor, suas variáveis de instância são
inicializadas com valores padrões ( exemplo variáveis do tipo int são inicializadas com o valor 0, float com
o valor 0.0, String com valor null). Ao declarar uma classe, você pode fornecer seu próprio construtor a
fim de especificar a inicialização personalizada para objetos de sua classe. Vejamos um exemplo:

1 package senac ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 import java . util . Scanner ;
8

9 public class SENAC {


10

11 String nomeCurso ;
12

13 // construtor da classe
14 public SENAC ( String nome ) {
15 nomeCurso = nome ;
16 }
17

18 public void setNomeCurso ( String nome ) {


19 nomeCurso = nome ;
20 }
21

22 public String getNomeCurso () {


23 return nomeCurso ;
24 }
25

26 public void MostraMensagem () {


27 System . out . println ( " Bem vindo ao Curso : " + getNomeCurso () ) ;
28 } // end metodo
29

30 public static void main ( String [] args ) {


31

32 Scanner input = new Scanner ( System . in ) ;


33 // criando um objeto
34 SENAC obj = new SENAC ( " Desenvolvimento de Sistemas " ) ;
35

36 // chama o metodo MostraMensagem

6
37 obj . MostraMensagem () ; // lembrar de passar o parametro
38 }
39 }

2.2.1 Observação

Uma diferença importante entre construtores e métodos é que os construtores não podem retornar
valores, portanto não podem especificar um tipo de retorno (nem mesmo void). Normalmente, os cons-
trutores são declarados como public. Caso declare um construtor para a classe, o compilador java não
criará um construtor default para a classe.

2.3 Precisão de Número de Ponto Flutuante


Variáveis do tipo float representam números de ponto flutuante de precisão simples e podem repre-
sentar até 7 dı́gitos significativos. As variáveis do tipo double representam números de ponto flutuante
de precisão dupla (fornecem 15 dı́gitos significativos). Para o intervalo de valores requerido pela maio-
ria dos programas, as variáveis do tipo float devem bastar, mas pode-se utilizar variáveis double para
”trabalhar com segurança”.
Nosso próximo aplicativo contém uma classe chamada Conta, que mantém o saldo de uma conta
bancária.

1 package ucb ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 import java . util . Scanner ;
8

9 public class Conta {


10

11 private double balanco ; // armazena o saldo


12 // construtor
13 public Conta ( double balancoInicial ) {
14 if ( balancoInicial > 0.0) {
15 balanco = balancoInicial ;
16 }
17 } // fim construtor
18

19 // realizar deposito
20 public void Deposito ( double acrescimo ) {
21 balanco = balanco + acrescimo ;
22 }
23

24 // retornar o saldo da conta


25 public double getBalanco () {
26 return balanco ;
27 }
28

7
29 public static void main ( String args []) {
30

31 Conta conta1 = new Conta (50.00) ; // criando um objeto do tipo Conta


32 Conta conta2 = new Conta ( -7.53) ; // criando um objeto do tipo Conta
33

34 // exibindo o saldo inicial dos objetos


35 System . out . println ( " balanco da conta1 : " + conta1 . getBalanco () ) ;
36 System . out . println ( " balanco da conta2 : " + conta2 . getBalanco () ) ;
37

38 // criar objeto scanner


39 Scanner input = new Scanner ( System . in ) ;
40 double deposito ; // deposito lido pelo usuario
41 System . out . print ( " Digite o deposito para a conta1 : " ) ;
42 deposito = input . nextDouble () ; // entrada do usuario
43 // adicionando valor a conta1
44 conta1 . Deposito ( deposito ) ;
45

46 // exibindo os saldos atuais


47 System . out . println ( " balanco da conta1 : " + conta1 . getBalanco () ) ;
48 System . out . println ( " balanco da conta2 : " + conta2 . getBalanco () ) ;
49

50 System . out . print ( " Digite o deposito para a conta2 : " ) ;


51 deposito = input . nextDouble () ; // entrada do usuario
52 // adicionando valor a conta2
53 conta2 . Deposito ( deposito ) ;
54

55 // exibindo os saldos atuais


56 System . out . println ( " balanco da conta1 : " + conta1 . getBalanco () ) ;
57 System . out . println ( " balanco da conta2 : " + conta2 . getBalanco () ) ;
58 }
59

60 } // fim classe

Exercı́cio: Implemente a operação de saque para a classe Conta.

2.4 Caixas de Diálogos


Até aqui utilizamos apenas o prompt para entradas e saı́das, agora será apresentada a classe Jopti-
onPane a qual fornece caixas de diálogo pré-construı́das que permitem aos programas exiber mensagens
ao usuários atráves de janelas. Vejamos exemplos:

1 package senac ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 import javax . swing . JOptionPane ; // importar classe
8

9 public class SENAC {

8
10

11 public static void main ( String [] args ) {


12 JOptionPane . showMessageDialog ( null , " Ola mundo " ) ;
13 }
14 }

O próximo exemplo trabalha com a inserção de dados pelo usuário:

1 package senac ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 import javax . swing . JOptionPane ; // importar classe
8

9 public class SENAC {


10 public static void main ( String [] args ) {
11 String nome = JOptionPane . showInputDialog ( " Qual teu nome ? " ) ;
12 JOptionPane . showMessageDialog ( null , " Bem vindo , " + nome + " ao curso de
LPOO ! " ) ;
13 }
14 }

Exercicio: Adeque a classe Conta para utilizar a classe JoptionPane para capturar e retornar
resultados.

3 Instruções de Controle: Parte 1


Normalmente, instruções em um programa são executadas uma após a outra na ordem em que são
escritas. Esse processo é chamado execução sequencial. Várias instruções java, que discutiremos mais
adiante, permitirão que você especifique que a próxima instrução a executar não é necessariamente a
próxima na sequência. Isso é chamado de transferência de controle.
O java contém 3 tipos de estrutura de controle: a instrução de sequência, instrução de seleção,
instruções de repetição.

• Instrução de sequência:

– É nativo do java. A não ser que seja instruı́do de outra forma, o computador executa as
instruções java uma depois da outra na ordem em que elas são escritas.

• Instruções de seleção:

– Instrução if realiza uma ação se uma condição for verdadeira ou pula a ação se a condição for
falsa.
– Instrução if...else realiza uma ação se uma condição for verdadeira e realiza uma ação diferente
se a condição for falsa.
– Instrução switch realiza uma de muitas ações diferentes, dependendo do valor de uma ex-
pressão.

9
• Instruções de repetição (loop): permitem que programas executem instruções repetidamente con-
tanto que uma condição (chamada condição de continuação do loop) permaneça verdadeira.

– Instruções while e for realizam a ação ou grupo de ações no seu corpo zero ou mais vezes (se
a condição de continuação de loop for inicialmente falsa, a ação não será executada).
– Instrução Do...while realiza a ação ou grupo de ações no seu corpo uma ou mais vezes.

• Observação: if, else, switch, while, do e for são palavra-chave do java.

3.1 Instrução de seleção única if


A nota de aprovação na instituição para a aprovação é 7. Logo a condição abaixa deve ser obedecida:
Se a nota do aluno for maior que ou igual a 7
Imprima ”Aprovado”
No java o trecho de código que satifaz a condição acima seria:

1 if ( notaAluno >= 7)
2 System . out . println ( " Aprovado " ) ;

3.2 Instrução de seleção if...else


A nota de aprovação na instituição para a aprovação é 7. Logo a condição abaixa deve ser obedecida:
Se a nota do aluno for maior que ou igual a 7
Imprima ”Aprovado”
Caso contrário (Else)
Imprima ”Reprovado”
No java o trecho de código que satifaz a condição acima seria:

1 if ( notaAluno >= 7)
2 System . out . println ( " Aprovado " ) ;
3 else
4 System . out . println ( " Reprovado " ) ;

3.3 Instruções if...else aninhadas


Um programa pode testar múltiplos casos colocando instruções if...else dentro de outras instruções
if...else aninhadas. Exemplo: Imprima A para notas maiores que 9, B para notas de 8 a 8.9, C para
notas de 7 a 7.9, D para notas de 6 a 6.9 e F para todas as outras notas.
No java o trecho de código que satifaz a condição acima seria:

1 if ( notaAluno >= 9)
2 System . out . println ( " A " ) ;
3

4 else if ( notaAluno >= 8)


5 System . out . println ( " B " ) ;
6

7 else if ( notaAluno >= 7)


8 System . out . println ( " C " ) ;
9

10
10 else if ( notaAluno >= 6)
11 System . out . println ( " D " ) ;
12

13 else
14 System . out . println ( " F " ) ;

3.4 Exercı́cios comandos de controle


1. Faça um programa em java que leia os valores A, B, C e imprima na tela se a soma de A + B é
menor que C.

2. Faça um programa em java que leia o nome, o sexo e o estado civil de uma pessoa. Caso sexo seja
”F”e estado civil seja ”CASADA”, solicitar o tempo de casada (anos).

3. Faça um programa para receber um número qualquer e informar na tela se é par ou ı́mpar.

4. Faça um programa em java que leia dois valores inteiros A e B se os valores forem iguais deverá
se somar os dois, caso contrário multiplique A por B. Ao final de qualquer um dos cálculos deve-se
atribuir o resultado para uma variável C e mostrar seu conteúdo na tela.

5. Encontrar o dobro de um número caso ele seja positivo e o seu triplo caso seja negativo, imprimindo
o resultado.

6. Faça um programa em java que leia uma variável e some 5 caso seja par ou some 8 caso seja ı́mpar,
imprimir o resultado desta operação.

7. Escreva um programa em java que leia três valores inteiros e diferentes e mostre-os em ordem
decrescente.

8. O IMC- Índice de Massa Corporal é um critério da Organização Mundial de Saúde para dar uma
indicação sobre a condição de peso de uma pessoa adulta. A fórmula é IMC = peso / ( altura *
altura). Elabore um programa que leia o peso e a altura de um adulto e mostre sua condição de
acordo com a tabela abaixo:

• Abaixo de 18,5 Abaixo do peso;


• Entre 18,5 e 25 Peso normal;
• Entre 25 e 30 Acima do peso;
• Acima de 30 obeso.

9. Escreva um programa em java que calcule o que deve ser pago por um produto, considerando o
preço normal de etiqueta e a escolha da condição de pagamento. Utilize os códigos da tabela a
seguir para ler qual a condição de pagamento escolhida e efetuar o cálculo adequado:

• À vista em dinheiro ou cheque, recebe 10% de desconto;


• À vista no cartão de crédito, recebe 15% de desconto;
• Em duas vezes, preço normal de etiqueta sem juros;
• Em duas vezes, preço normal de etiqueta mais juros de 10%.

11
3.5 Instrução de repetição while
Permite especificar que um programa deve repetir uma ação enquanto alguma condição permancece
verdadeira. Ex: Acumulador de indı́ces com 5 iterações. No java o trecho de código que satifaz a condição
acima seria:

2 int contador =0;


3 int acumulador =0;
4 while ( contador < 5)
5 {
6 acumulador += contador ;
7 }
8

9 System . out . println ( " Acumulador = " + acumulador ) ;

Exercı́cio: Faça o exemplo acima utilizando operador de multiplicação.


Exemplo, usando livro de notas para disciplinas.

1 package ucb ;
2

3 import java . util . Scanner ;


4

5 /* *
6 *
7 * @author lucas
8 */
9 public class LivrodeNotas {
10

11 private String nomeCurso ; // nome do curso de que este livro representa


12

13 // construtor da classe
14 public LivrodeNotas ( String nome ) {
15 nomeCurso = nome ;
16 }
17

18 // metodo para definir o nome do curso


19 public void setnomeCurso ( String nome ) {
20 nomeCurso = nome ;
21 } // fim metodo setnomeCurso
22

23 // metodo para recuperar o nome do curso


24 public String getnomeCurso () {
25 return nomeCurso ;
26 } // fim metodo getnomeCurso
27

28 // exibe uma mensagem de boas vindas ao usuario LivrodeNotas


29 public void MostrarMensagem () {
30

31 System . out . printf ( " Bem vindo ao Livro de Notas : % s \ n " , getnomeCurso () ) ;

12
32

33 } // fim metodo MostrarMensagem


34

35 // determina a media da classe com base em 10 notas


36 public void determinaMediaClasse () {
37

38 Scanner input = new Scanner ( System . in ) ;


39 int total =0; // soma notas inseridas pelo usuario
40 int contadorNotas =1; // numero da nota a ser inserida a seguir
41 int nota ; // valor da nota inserida pelo usuario
42 double media ; // media das notas
43

44 while ( contadorNotas <=10) { // faz o la ~


A §o 10 x
45 System . out . printf ( " Insira a Nota % d : " , contadorNotas ) ;
46 nota = input . nextInt () ;
47 total += nota ; // adiciona a nota ao total
48 contadorNotas ++; // equivale a contadorNotas = contadorNotas +1
49 } // fim while
50

51 media = total /10; // calculando a media


52 System . out . println ( " Media da turma " + getnomeCurso () + " e : " + media ) ;
53

54 } // fim metodo determinaMediaClasse


55

56 // metodo principal
57 public static void main ( String args []) {
58

59 // criando o objeto da classe LivrodeNotas


60 LivrodeNotas objeto = new LivrodeNotas ( " LPOO " ) ;
61 // exibindo msg de boas vindas
62 objeto . MostrarMensagem () ;
63 objeto . determinaMediaClasse () ;
64 } // fim main
65 } // fim classe

Exercı́cio: Altere o teste do exemplo anterior. Altere o nome da disciplina para ”Algoritmos”, em
seguida utilize o método get para mostrar o nome definido anteriormente. Além disso, crie um novo
objeto com a disciplina ”IA”, imprima as boas vindas ao usuário, e calcule a média das notas dos alunos
pertencentes ao novo objeto.

13
3.6 Formulando algoritmos: repetição controlada por sentinela
Desenvolva um programa para tirar a média da classe que processe as notas de acordo com um número
arbitrário de alunos toda vez que é executado.
Nesse exemplo, nenhuma indicação é dada de quantas notas o usuário irá inserir durante a execução
do programa. O problema aqui será como podemos determinar quando parar de inserir as notas e como
saber quando calcular e imprimir a média da classe.

1 package ucb ;
2

3 import java . util . Scanner ;


4

5 /* *
6 *
7 * @author lucas
8 */
9 public class LivrodeNotas {
10

11 private String nomeCurso ; // nome do curso de que este livro representa


12

13 // construtor da classe
14 public LivrodeNotas ( String nome ) {
15 nomeCurso = nome ;
16 }
17

18 // metodo para definir o nome do curso


19 public void setnomeCurso ( String nome ) {
20 nomeCurso = nome ;
21 } // fim metodo setnomeCurso
22

23 // metodo para recuperar o nome do curso


24 public String getnomeCurso () {
25 return nomeCurso ;
26 } // fim metodo getnomeCurso
27

28 // exibe uma mensagem de boas vindas ao usuario LivrodeNotas


29 public void MostrarMensagem () {
30

31 System . out . printf ( " Bem vindo ao Livro de Notas : % s \ n " , getnomeCurso () ) ;
32

33 } // fim metodo MostrarMensagem


34

35 // determina a media da classe com base em 10 notas


36 public void determinaMediaClasse () {
37

38 Scanner input = new Scanner ( System . in ) ;


39 int total =0; // soma notas inseridas pelo usuario
40 int contadorNotas =0; // numero da nota a ser inserida a seguir
41 int nota ; // valor da nota inserida pelo usuario
42 double media ; // media das notas

14
43

44 // fase de processamento
45 // solicita entrada e le a nota do usuario
46 System . out . print ( " Entre com a nota : " ) ;
47 nota = input . nextInt () ;
48

49 // faz um loop ate ler o valor de sentinela inserido pelo usuario


50 while ( nota != -1) { // inicio while
51 total += nota ;
52 contadorNotas ++; // incrementa 1 na variavel contadorNotas
53

54 // torna ler uma nova nota ou -1 pra sair do loop


55 System . out . print ( " Entre com a nota ou -1 para sair do loop : " ) ;
56 nota = input . nextInt () ;
57 } // fim while
58

59 // testa se o usuario inseriu pelo menos uma nota


60 if ( contadorNotas >0) {
61 media = total / contadorNotas ; // calculando a media
62 System . out . println ( " Media da turma " + getnomeCurso () + " e : " + media ) ;
63 }
64 else
65 { System . out . println ( " Nenhuma nota foi inserida " ) ;}
66

67

68 } // fim metodo determinaMediaClasse


69

70 // metodo principal
71 public static void main ( String args []) {
72

73 // criando o objeto da classe LivrodeNotas


74 LivrodeNotas objeto = new LivrodeNotas ( " LPOO " ) ;
75 // exibindo msg de boas vindas
76 objeto . MostrarMensagem () ;
77 objeto . determinaMediaClasse () ;
78 } // fim main
79 } // fim classe

3.7 Operadores de atribuição composta


Os operadores de atribuição composta abreviam expressões de atribuição. Instruções como: variável=
variável operador expressão;
onde operador é um dos operadores binários +, -, *, / ou % pode ser escrito na forma:
variável operador= expresão;
Por exemplo: c=c+3 pode ser escrito como c+=3;

15
3.8 Operadores de incremento e decremento
O java fornece dois operadores unários para adicionar 1 a uma variável ou para subtrair 1 do valor
de uma variável numérica. Esses são o operador de incremento unário, ++ e o operador de decremento
unário –.

3.9 Tipos primitivos


O java trabalha com 8 tipos primitivos:

4 Instruções de controle: Parte 2


Objetivos:

16
• Princı́pios básicos da repetição controlada por controlador.

• Utilizar intruções de repetição for e do...while para executar instruções em um programa repetida-
mente.

• Utilizar operadores lógicos para formar express?es condicionais complexas em instruções de controle.

4.1 Princı́pios básicos de repetição controlada por contador


Está seção utiliza a instrução de repetição while introduzida na seção anterior para formalizar os ele-
mentos necessários para realizar a repetição controlada por contador. Repetição controlada por contador
requer:

1. Uma variável de controle.

2. O valor inicial da variável de controle.

3. O incremento (ou decremento) pelo qual a variável de controle é modificada a cada passagem pelo
loop ou cada iteração do loop.

4. A condição de continuação do loop que determina se o loop deve continuar.

Considere o exemplo abaixo:

1 package ucb ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 public class ContadorWhile {
8 public static void main ( String [] args )
9 {
10

11 int contador =1; // declara e inicializa a variavel de controle


12

13 while ( contador <=10) { // condicao de continuacao do loop


14 System . out . printf ( " % d " , contador ) ;
15 contador ++; // incrementa a variavel de controle por 1
16 } // fim do while
17

18 }
19 }

Exemplo utilizando For:

1 package ucb ;
2

3 /* *
4 *
5 * @author lucas
6 */

17
7 public class ContadorFor {
8 public static void main ( String [] args )
9 {
10 for ( int counter =1; counter <=10; counter ++)
11 {
12 System . out . printf ( " % d " , counter ) ;
13 } // fim for
14 } // fim main
15 } // fim classe

Veja Figura 4.1 para entender os componentes de cabeçalho de instrução for. O formato geral da instrução

for é:
for (inicialização; condiçãoDeContinuaçãoDoLoop; incremento)
instrução

4.2 Exemplos com a estrutura for


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

2. for (int i= 10; i>= 1; i−−)

3. varie a variável de controle de 10 a 100 em incrementos de 10

(a) for (int i= 10; i<= 100; i+ =10)

4. varie a variável de controle de 20 a 2 em decremento de 2

(a) for (int i= 20; i>= 2; i− =2)

O próximo exemplo faz o cálculo de juros compostos utilizando for.

1 package ucb ;
2

3 /* *
4 *

18
5 * @author lucas
6 */
7 public class JurosCompostos {
8

9 private double principal ; // quantidade inicial antes dos juros


10 private double taxa ; // taxa de juros
11

12 // construtor da classe
13 public JurosCompostos ( double principal , double taxa ) {
14 this . principal = principal ;
15 this . taxa = taxa ;
16 }
17

18 public void calculaJuros () {


19 // exibe cabecalhos
20 double amount ; // quantia em depositos ao fim de cada ano
21 System . out . printf ( " %6 s %30 s \ n " , " Ano " , " Montante em deposito " ) ;
22

23 // calcula a quantidade de depositos para cada um dos dez anos


24 for ( int ano = 1; ano <= 10; ano ++) {
25 // calcula nova quantidade durante ano especificado
26 amount = principal * Math . pow (1.0 + taxa , ano ) ; // calcula o expoente
argumentos base , expoente
27 System . out . printf ( " %5 d , %20.2 f \ n " , ano , amount ) ;
28 }
29

30 } // fim metodo calculaJuros


31

32 public static void main ( String args []) {


33 JurosCompostos obj = new JurosCompostos (1000.0 , 0.05) ;
34 obj . calculaJuros () ;
35 }
36

37 }

4.3 Instrução de repetição do...while


A instrução de repetição do...while é semelhante à instrução while. Na instrução while, o programa
testa a condição de continuação do loop no inı́cio do loop, antes de executar o corpo do loop; se a condição
for falsa, o corpo nunca será executado. A instrução do...while testa a condição de continuação do loop
depois de executar o corpo do loop, assim, o corpo sempre executa pelo menos uma vez. Vejamos o
exemplo:

1 package senac ;
2

3 /* *
4 *
5 * @author lucas
6 */

19
7 public class DowhileTeste {
8

9 public static void main ( String args []) {


10

11 int contador = 1;
12 do {
13 System . out . printf ( " % d " , contador ) ;
14 contador ++;
15

16 } while ( contador <= 10) ;


17

18 }
19 }

4.4 Estrutura de seleção múltipla switch


O exemplo a seguir calcula a média de um conjunto de notas númericas inseridas pelo usuário utili-
zando a instrução switch para determinar se cada nota é equivalente a um A, B, C, D ou F e incrementar
o contador de notas escolares apropriado. A classe também exibe um resumo das notas referente a uma
disciplina.

1 package ucb ;
2 import java . util . Scanner ;
3 /* *
4 *
5 * @author lucas
6 */
7 public class LivrodeNotas {
8

9 private String Nomecurso ; // nome do curso que esse livro de notas representa
10 private int total ;
11 private int contaNotas ;
12 private int contaA ; // conta as notas A
13 private int contaB ; // conta as notas B
14 private int contaC ;
15 private int contaD ;
16 private int contaF ;
17

18 public LivrodeNotas ( String Nomecurso ) {


19 this . Nomecurso = Nomecurso ;
20 }
21

22 public void setNomecurso ( String nome ) {


23 Nomecurso = nome ;
24 }
25

26 public String getNomecurso () {


27

28 return Nomecurso ;

20
29 }
30

31 public void mostraMensagem () {


32 System . out . println ( " Bem vindo ao livro de notas " + this . getNomecurso () )
;
33 }
34

35 // adiciona 1 ao contador adeuqado da nota especificada


36 public void in cr e me n ta Co n ta d or No t as ( int nota ) {
37

38 switch ( nota / 10) {


39 case 9:
40 case 10:
41 contaA ++; // a nota esta entre 9 e 10
42 break ;
43 case 8:
44 contaB ++; // a nota esta esta entre 80 e 89
45 break ;
46 case 7:
47 contaC ++; // nota entre 70 a 89
48 break ;
49

50 case 6:
51 contaD ++; // nota entre 60 e 69
52 break ;
53

54 default : // nota menor que 60


55 contaF ++;
56 break ;
57 } // fim switch
58

59 } // fim metodo i nc r em en t aC o nt ad o rN ot a s
60

61 public void inputNotas () {


62 Scanner input = new Scanner ( System . in ) ;
63 int nota = 0; // pega a nota inserida pelo usuario
64

65 System . out . println ( " ************ Insira Notas entre 1 e


100**************** " ) ;
66 while ( nota != -1) {
67 nota = input . nextInt () ;
68 // condicao de parada
69 if ( nota <0)
70 break ;
71 total += nota ; // adiciona nota a total
72 contaNotas ++; // incrementa o numero de notas
73

74 // chama o metodo para incrementar o contador adequado


75 this . in cr e me n ta Co n ta d or No t as ( nota ) ;
76 } // fim while

21
77 } // fim metodo inputNotas
78

79 public void Relatorio () {


80 System . out . println ( " ********* Relatorio de Notas ********* " ) ;
81

82 // se usuario inseriu pelo menos uma nota


83 if ( contaNotas != 0) {
84 // calcula a media de todas as notas inseridas
85 double media = ( double ) total / contaNotas ;
86

87 // gera a saida de resumo de resultadsos


88 System . out . printf ( " Foram inseridas % d notas \ n " , contaNotas ) ;
89 System . out . printf ( " A media e %.2 f \ n " , media ) ;
90 System . out . println ( " Numero de estudantes que receberam notas A " +
contaA ) ;
91 System . out . println ( " Numero de estudantes que receberam notas B " +
contaB ) ;
92 System . out . println ( " Numero de estudantes que receberam notas C " +
contaC ) ;
93 System . out . println ( " Numero de estudantes que receberam notas D " +
contaD ) ;
94 System . out . println ( " Numero de estudantes que receberam notas F " +
contaF ) ;
95 } else // caso nao tenha notas
96 {
97 System . out . println ( " Nenhuma nota foi inserida pelo usuario " ) ;
98 }
99

100 } // fim metodo relatorio


101

102 // metodo principal do Java


103 public static void main ( String args [])
104 {
105

106 LivrodeNotas livro = new LivrodeNotas ( " LP2 " ) ; // criando objeto da classe
107 livro . mostraMensagem () ; // exibe a mensagem de boas vindas
108 livro . inputNotas () ; // le notas fornecidas pelo usuario
109 livro . Relatorio () ; // exibe o relatorio
110 }
111 } // fim classe

4.5 Instruções break e continue


Além das instruções de seleção e repetição o java fornece as instruções break e continue para alterar o
fluxo de controle. A seção anterior foi mostrado como o break pode ser utilizado para terminar a execução
de uma instrução switch. Nesta, discutiremos como utilizar o break em instruções de repetição.

22
4.5.1 Instrução break

Quando executada em um while, for, do...while ou switch, ocasiona a saı́da imediata dessa instrução.
Exemplo:

1 package ucb ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 public class Breaktest {
8

9 public static void main ( String args [])


10 {
11

12 int contador =1;


13 for (; contador < 10; contador ++) {
14

15 if ( contador ==5) {
16 break ; // termina o loop
17 } // fim if
18 System . out . printf ( " % d " , contador ) ;
19 } // fim for
20

21 System . out . println ( " \ nBreak no loop com contador = " + contador ) ;
22 }
23 }

4.5.2 Instrução continue

Quando executada em um while, for ou do...while, pula as instruções restantes no corpo do loop e
prossegue com a próxima iteração do loop. Exemplo:

1 package ucb ;
2

3 /* *
4 *
5 * @author lucas
6 */
7 public class Continuetest {
8

9 public static void main ( String args [])


10 {
11 for ( int i = 1; i <= 10; i ++) {
12 if ( i ==5) {
13 continue ; // pula o codigo restante do loop
14 }
15 System . out . printf ( " % d " , i ) ;
16 }

23
17

18 }
19 }

Exercı́cios:

1. Desenvolver um algoritmo que efetue a soma de todos os números ı́mpares que são múltiplos de
três e que se encontram no conjunto dos números de 1 até 500.

2. Desenvolver um algoritmo que leia a altura de 15 pessoas. Este programa deverá calcular e mostrar
:

• A menor altura do grupo;


• A maior altura do grupo.

3. Implemente um programa que leia um número não determinado de valores e calcule e escreva
a média aritmética dos valores lidos, a quantidade de valores positivos, a quantidade de valores
negativos e o percentual de valores negativos e positivos.

4. Implemente um programa que leia uma quantidade desconhecida de números e conte quantos deles
estão nos seguintes intervalos: [0-25], [26-50], [51-75] e [76-100]. A entrada de dados deve terminar
quando for lido um número negativo.

5. Implemente um programa que leia uma quantidade não determinada de números positivos. Calcule
a quantidade de números pares e ı́mpares, a média de valores pares e a média geral dos números
lidos. O número que encerrará a leitura será zero.

6. Implemente um programa que gera e escreve os números ı́mpares entre 100 e 200.

7. Implemente um programa que leia um valor para uma variável N de 1 a 10 e calcule a tabuada de
N. Mostre a tabuada na forma: 0 ∗ N = 0, 1 ∗ N = 1N, 2 ∗ N = 2N, · · · , 10 ∗ N = 10N .

8. Implemente um programa que leia um valor inicial A e imprima a sequência de valores do cálculo
de A! e o seu resultado. Ex: 5! = 5 ∗ 4 ∗ 3 ∗ 2 ∗ 1 = 120.

24

Você também pode gostar