• Nenhum resultado encontrado

Como vimos em alguns dos exemplos anteriores, um laço pode ser aninhado dentro de outro. Os laços aninhados são usados para resolver uma grande variedade de pro- blemas de programação e são parte essencial do ato de programar. Portanto, antes de encerrarmos o tópico das instruções de laço Java, examinemos mais um exemplo de laço aninhado. O programa a seguir usa um laço for aninhado para encontrar todos os fatores (exceto 1 e o próprio número) dos números de 2 a 100. Observe que o laço externo produz os números cujos fatores serão obtidos. O laço interno determina os fatores dos números.

/*

Usa laços aninhados para encontrar os fatores dos números de 2 a 100.

*/

class FindFac {

public static void main(String[] args) {

for(int i=2; i <= 100; i++) {

System.out.print("Factors of " + i + ": "); for(int j = 2; j < i; j++) if((i%j) == 0) System.out.print(j + " "); System.out.println(); } } }

Aqui está uma parte da saída produzida pelo programa:

Factors of 2: Factors of 3: Factors of 4: 2

Choose one (q to quit): 6

The break:

break; or break label;

Help on: 1. if 2. switch 3. for 4. while 5. do-while 6. break 7. continue

Factors of 5: Factors of 6: 2 3 Factors of 7: Factors of 8: 2 4 Factors of 9: 3 Factors of 10: 2 5 Factors of 11: Factors of 12: 2 3 4 6 Factors of 13: Factors of 14: 2 7 Factors of 15: 3 5 Factors of 16: 2 4 8 Factors of 17: Factors of 18: 2 3 6 9 Factors of 19: Factors of 20: 2 4 5 10

No programa, o laço externo executa i de 2 a 100. O laço interno testa sucessivamente todos os números de 2 a i, exibindo aqueles cuja divisão por i é exata. Observe o uso do operador % para determinar quando um valor gera uma divisão exata por outro. Se o resultado for zero, o divisor é um fator. Um desafio adicional: o programa anterior pode ser mais eficiente. Consegue ver como? (Dica: o número de iterações do laço interno pode ser reduzido.)

EXERCÍCIOS

1. Escreva um programa que leia caracteres do teclado até um ponto ser recebido. Faça-o contar o número de espaços. Relate o total no fim do programa.

2. Mostre a forma geral da escada if-else-if. 3. Dado o código if(x < 10) if(y > 100) { if(!done) x = z; else y = z; }

else System.out.println("error"); // que if?

a que if o último else está associado?

4. Mostre a instrução for de um laço que conte de 1.000 a 0 em intervalos de -2. 5. O fragmento a seguir é válido?

for(int i = 0; i < num; i++) sum += i;

6. Explique o que break faz. Certifique-se de explicar suas duas formas. 7. No fragmento a seguir, após a instrução break ser executada, o que é exibido?

for(i = 0; i < 10; i++) { while(running) { if(x<y) break; // ... } System.out.println("after while"); } System.out.println("After for");

8. O que o fragmento abaixo exibe?

for(int i = 0; i<10; i++) { System.out.print(i + " ");

if((i%2) = = 0) continue;

System.out.println(); }

9. Nem sempre a expressão de iteração de um laço for tem de alterar a variável de controle de laço adicionando ou subtraindo um valor fixo. Em vez disso, a va- riável de controle pode mudar de qualquer maneira arbitrária. Usando esse con- ceito, escreva um programa que use um laço for para gerar e exibir a progressão 1, 2, 4, 8, 16, 32 e assim por diante.

10. As letras minúsculas ASCII ficam separadas das maiúsculas por um intervalo

igual a 32. Logo, para converter uma letra minúscula em maiúscula, temos de subtrair 32 dela. Use essa informação para escrever um programa que leia ca- racteres do teclado. Faça-o converter todas as letras minúsculas em maiúsculas e todas as letras maiúsculas em minúsculas, exibindo o resultado. Não faça alterações em outros caracteres. O programa será encerrado quando o usuário pressionar o ponto. No fim, ele deve exibir quantas alterações ocorreram na cai- xa das letras.

11. O que é um laço infinito?

12. No uso de break com um rótulo, este deve estar em uma instrução ou bloco que

contenha break?

13. Qual é a diferença entre os três valores literais a seguir: 5, ‘5’, “5”?

14. Suponha que c seja uma variável de tipo char. Como você verificaria se o valor

de c é o caractere de aspas simples?

15. A classe ContDemo deste capítulo mostra uma maneira de usarmos um laço

for para exibir os números pares de 0 a 100. Crie programas que exibam essa mesma saída, mas como descrito a seguir:

A. Usando um laço for que incremente a variável de controle em duas unida- des a cada iteração.

C. Usando um laço for cuja variável de controle retroceda de 100 a 0. D. Usando um laço for infinito sem expressão condicional e saindo do laço

com uma instrução break. E. Usando um laço while.

F. Usando um laço do-while.

16. Crie um programa que use um laço para exibir as potências de 3, de 30 até e in-

cluindo39.

17. Crie um programa que use um laço para exibir uma lista de 100 números com-

posta por 1s e –1s alternados, começando com 1.

18. A classe FindFac discutida neste capítulo exibe os fatores de todos os números

de 1 a 100. Modifique essa classe para que, em vez de parar em 100, ela conti- nue até encontrar um número com exatamente nove fatores.

19. Crie um programa que leia caracteres do teclado até ler um caractere de alimen-

tação de linha ‘\n’. Em seguida, faça-o exibir o número de vogais, de consoan- tes, de dígitos e de outros caracteres. Inclua o caractere final de alimentação de linha na contagem dos outros caracteres.

20. O programa StarPattern abaixo exibe o padrão de asteriscos que aparece logo

após. Modifique o programa para que exiba os outros padrões usando laços ani- nhados.

class StarPattern {

public static void main(String[] args) {

for(int i = 1; i <= 5; i++) { for(int j = 1; j <= i; j++) System.out.print('*'); System.out.println(); } } } * ** *** **** ***** A. ***** **** *** ** * B. * ** *** **** *****

C. **********

********

******

****

**

21. Como mencionado no texto, um identificador Java é composto por um ou mais

caracteres. O primeiro caractere deve ser uma letra maiúscula ou minúscula do alfabeto, um sublinhado (_) ou um cifrão ($). Cada caractere restante deve ser uma letra maiúscula ou minúscula do alfabeto, um dígito de 0 a 9, um subli- nhado ou um cifrão. Crie um programa Java que leia uma linha de caracteres e exiba se ela é um identificador Java válido.

22. Infelizmente, os valores Unicode dos caracteres ‘0’-‘9’ não correspondem aos

seus valores inteiros. Isto é, os valores Unicode de ‘0’-‘9’ são 48-57 e não 0-9. Mas podemos converter facilmente esses caracteres em seus valores inteiros subtraindo 48. Especificamente, se c for uma variável de tipo char contendo um dígito de ‘0’-‘9’, então podemos criar uma variável x de tipo int com os valores inteiros correspondentes como descrito a seguir:

int x = c – 48;

Use essa técnica de conversão em um programa que leia três dígitos, converta- -os em um inteiro com os três dígitos, dobre o valor do inteiro e então exiba o resultado. Por exemplo, se a entrada for ‘3’, ‘4’ e ‘5’, a saída será 690.

23. Se você dividir 1 por 2, obterá 0,5. Se dividir novamente por 2, obterá 0,25.

Crie um programa que calcule e exiba quantas vezes temos que dividir 1 por 2 para obter um valor menor do que um décimo de milésimo (0,0001).

PRINCIPAIS HABILIDADES E CONCEITOS

䊏 Saber os fundamentos da classe

䊏 Entender como os objetos são criados

䊏 Entender como as variáveis de referência são atribuídas

䊏 Criar um método

Usar a palavra-chave return

䊏 Retornar um valor de um método

䊏 Adicionar parâmetros a um método

䊏 Utilizar construtores

䊏 Criar construtores parametrizados

Entender new

䊏 Entender a coleta de lixo e os finalizadores

Usar a palavra-chave this

Antes de ir adiante em seu estudo de Java, você precisa conhecer a classe. A classe é a essência de Java. Ela é a estrutura lógica sobre a qual a linguagem Java é construída, porque define a natureza de um objeto. Como tal, forma a base da programação orien- tada a objetos em Java. Dentro de uma classe, são definidos dados e o código que age sobre eles. O código fica contido em métodos. Como classes, objetos e métodos são fundamentais para Java, eles serão introduzidos neste capítulo. Ter um entendimen- to básico desses recursos permitirá que você escreva programas mais sofisticados e compreenda melhor certos elementos-chave de Java descritos no próximo capítulo.