Lista de Códigos
2.5 Controle de fluxo
A maioria dos programas toma decisões que afetam seu fluxo. As declarações que tomam essas decisões são chamadas de declarações de controle.
O controle de fluxo na linguagem Java pode ser utilizado tanto por sentenças condicionais quanto por controles de estruturas de repetição. O controle de fluxo em Java é similar ao encontrado nas linguagens C e C++.
2.5.1 Comando de seleção: if-else
O comando de seleçãoif-elsepermite especificar dois comandos (ou dois blocos de comandos delimitados por chaves “{” e “}”) que serão alternativas de execução.
Um bloco será executado caso a condição seja verdadeira (true) e o outro, caso a condição seja falsa (false). Quando o bloco de comandos é composto de um único comando, as chaves que delimitam o bloco podem ser omitidas. A cláusula else é opcional. Nesse caso, o comando especifica apenas um bloco de comandos que deve ser executado apenas quando a condição for verdadeira.
O Código 2.2 ilustra um programa Java que utiliza o comando if-else e que, ao receber três valores inteiros, imprime o maior deles. É importante salientar que esse programa utiliza uma funcionalidade presente na linguagem Java que consiste
4 Versão lançada em setembro de 2004.
50
p u b l i c c l a s s E x e m p l o I f {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { i n t a = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ; i n t b = I n t e g e r . p a r s e I n t ( a r g s [ 1 ] ) ; i n t c = I n t e g e r . p a r s e I n t ( a r g s [ 2 ] ) ;
S y s t e m . o u t . p r i n t l n ( " V a l o r e s : " + a + " , " + b + " , " + c ) ; i n t m a i o r ;
i f ( a > b & a > c ) { m a i o r = a ; } e l s e i f ( b > c ) {
m a i o r = b ; } e l s e {
m a i o r = c ; }
S y s t e m . o u t . p r i n t l n ( " M a i o r é " + m a i o r ) ; }
}
Código 2.2 Exemplo do comando de seleçãoif-else.
na possibilidade de passar argumentos, pela linha de comando, para o programa a ser executado. O argumento args é um array de strings (Seção 3.4.1.1) em que são atribuídos valores, caso os argumentos sejam passados na linha de comando. A Figura 2.4 apresenta um exemplo da execução da classeExemploIf.
>javaExemploIf 10 4 15
Dentro do método main, a variável args terá os seguintes valores:
args[0] = 10 args[1] = 4 args[2] = 15 e a saída será:
Valores: 10,4,15 Maior é 15
Figura 2.4 Exemplo da execução da classeExemploIf.
Sendo args um array de strings, deve-se converter os valores para inteiros para serem utilizados no programa. O métodoparseInt() da classe Integer, utilizado nesse programa, realiza a conversão destringspara inteiros.
51
2.5.2 Comando de seleção: switch
O comando de seleçãoswitché utilizado quando existem execuções diferenciadas para determinados valores de uma única variável. Ou seja, o comandoswitchtambém expressa alternativas de execução, porém, nesse caso, as condições estão restritas à comparação de uma variável do tipoint(ou char) com valores constantes.
i m p o r t j a v a . u t i l . S c a n n e r ;
p u b l i c c l a s s E x e m p l o S w i t c h {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { S c a n n e r s c a n n e r = new S c a n n e r ( S y s t e m . i n ) ; S y s t e m . o u t . p r i n t ( " D i g i t e um número : " ) ; i n t n = s c a n n e r . n e x t I n t ( ) ;
s w i t c h( n ) { c a s e 1 : {
S y s t e m . o u t . p r i n t l n ( " Domingo " ) ; b r e a k; }
c a s e 2 : {
S y s t e m . o u t . p r i n t l n ( " S e g u n d a " ) ; b r e a k; }
c a s e 3 : {
S y s t e m . o u t . p r i n t l n ( "Terça" ) ; b r e a k; }
c a s e 4 : {
S y s t e m . o u t . p r i n t l n ( " Q u a r t a " ) ; b r e a k; }
c a s e 5 : {
S y s t e m . o u t . p r i n t l n ( " Q u i n t a " ) ; b r e a k; }
c a s e 6 : {
S y s t e m . o u t . p r i n t l n ( " S e x t a " ) ; b r e a k; }
c a s e 7 : {
S y s t e m . o u t . p r i n t l n ( "Sábado" ) ; b r e a k; }
d e f a u l t: S y s t e m . o u t . p r i n t l n ( "Opção Inválida" ) ; }
}
}
Código 2.3 Exemplo do comando de seleçãoswitch.
O Código 2.3 ilustra um programa Java que utiliza o comandoswitche que, dado um inteiron(digitado pelo usuário no teclado), imprime o dia da semana correspon- dente. A Figura 2.5 apresenta um exemplo da execução da classeExemploSwitch.
>javaExemploSwitch
Dentro do método main, o programa solicitará que digite um número Digite um número: 5
e a saída será:
Quinta
Figura 2.5 Exemplo da execução da classeExemploSwitch.
52
É importante salientar que esse programa utiliza uma funcionalidade, provida pela classeScanner, a qual será apresentada na Seção 4.5.3. Ela consiste na possibilidade de entrada de dados pelo teclado.
2.5.3 Comando de repetição: while
O while é um comando usado para executar um laço (loop). Isto é, repetir um trecho de código algumas vezes. A ideia é que esse trecho de código seja repetido enquanto uma determinada condição seja verdadeira (true).
i m p o r t j a v a . u t i l . S c a n n e r ;
p u b l i c c l a s s E x e m p l o W h i l e {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
// E n c o n t r a r a 1 a p o tên c i a de 2 que s e j a m a i o r ou i g u a l que umnúmero d i g i t a d o ( p o s i t i v o ) S c a n n e r s c a n n e r =new S c a n n e r ( S y s t e m . i n ) ;
S y s t e m . o u t . p r i n t ( " D i g i t e um número : " ) ; i n t n = s c a n n e r . n e x t I n t ( ) ;
i n t x = 1 ; w h i l e ( x < n ) {
x = x ∗ 2 ;
}
S y s t e m . o u t . p r i n t l n ( "A 1 a p o t ê n c i a de 2 m a i o r ou i g u a l que " + n + " é " + x ) ; }
}
Código 2.4 Exemplo do comando de repetiçãowhile.
O Código 2.4 ilustra um programa Java que utiliza o comandowhilee que, dado um inteiron(digitado pelo usuário no teclado), imprime a primeira potência de 2 que seja maior ou igual ao inteiro n digitado. A Figura 2.6 apresenta um exemplo da execução da classeExemploWhile.
>javaExemploWhile
Dentro do método main, o programa solicitará que digite um número Digite um número: 5
e a saída será:
A 1a potência de 2 maior ou igual que 5 é 8
Figura 2.6 Exemplo da execução da classeExemploWhile.
53
2.5.4 Comando de repetição: do..while
O comando do..while é uma pequena variação do comando while. No co- mandowhile, a condição é testada sempre antes da execução do corpo de comandos que compõe o laço. Já o comando do..while tem a condição testada apenas no final. Consequentemente, no caso dodo..while, existe a garantia de que o conteúdo no interior do laço será executado pelo menos uma vez, enquanto nowhile, ele pode nunca ser executado. Na prática, a existência desses dois tipos de laços é uma mera conveniência sintática, já que um pode ser facilmente substituído pelo outro.
i m p o r t j a v a . u t i l . S c a n n e r ;
p u b l i c c l a s s ExemploDoWhile {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { S c a n n e r s c a n n e r = new S c a n n e r ( S y s t e m . i n ) ; b y t e n ;
do {
S y s t e m . o u t . p r i n t ( " D i g i t e um número e n t r e 1 e 1 0 : " ) ; n = s c a n n e r . n e x t B y t e ( ) ;
} w h i l e ( n < 1 | | n > 1 0 ) ; }
}
Código 2.5 Exemplo do comando de repetiçãodo..while.
O Código 2.5 ilustra um programa Java que utiliza o comando do..while e que solicita que o usuário digite um número inteiro n. O laço é repetido enquanto a condição 1 ≤ n ≤ 10 não for satisfeita. A Figura 2.7 apresenta um exemplo da execução da classeExemploDoWhile.
>javaExemploDoWhile
Dentro do método main, o programa solicitará que digite um númeron Digite um número: 45
O númeron não satisfaz a condição1≤n≤10 Digite um número: 5
Figura 2.7 Exemplo da execução da classeExemploDoWhile.
54
2.5.5 Comando de repetição: for
Outro comando de repetição extremamente utilizado é o comandofor. A ideia é a mesma do comandowhile– fazer um trecho de código ser repetido enquanto uma condição continuar verdadeira. Mas, além disso, o comando for isola também um espaço para inicialização de variáveis e o incremento dessas variáveis. Isso faz com que as variáveis, as quais são relacionadas ao laço, fiquem mais legíveis.
i m p o r t j a v a . u t i l . S c a n n e r ;
p u b l i c c l a s s E x e m p l o F o r {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { S c a n n e r s c a n n e r =new S c a n n e r ( S y s t e m . i n ) ; S y s t e m . o u t . p r i n t ( " D i g i t e um número : " ) ; i n t n = s c a n n e r . n e x t I n t ( ) ;
i n t soma = 0 ;
f o r (i n t i = 1 ; i <= n ; i ++) { soma += i ;
}
S y s t e m . o u t . p r i n t l n ( "A soma d o s " + n + " p r i m e i r o s números i n t e i r o s p o s i t i v o s é " + soma ) ; }
}
Código 2.6 Exemplo do comando de repetiçãofor.
O Código 2.6 ilustra um programa Java que utiliza o comando for e que, dado um inteiro n (digitado pelo usuário no teclado), imprime a soma dos n primeiros números inteiros positivos. A Figura 2.8 apresenta um exemplo da execução da classe ExemploFor.
>javaExemploFor
Dentro do método main, o programa solicitará que digite um número Digite um número: 5
e a saída será:
A soma dos 5 primeiros números inteiros positivos é 15
Figura 2.8 Exemplo da execução da classeExemploFor.
2.5.6 Comandobreak
Apesar de termos condições booleanas nos laços, em algum momento, pode-se decidir interromper (através do comandobreak) o laço, por algum motivo especial, sem que o resto do laço seja executado.
55
O Código 2.7 ilustra um programa Java que utiliza o comando break para interromper o laço do comando for. Esse código vai somar os números de 1 a n e parar quando a variável i > n. Ou seja, apresenta o mesmo comportamento do Código 2.6, que realiza a soma dosnnúmeros inteiros positivos.
i m p o r t j a v a . u t i l . S c a n n e r ;
p u b l i c c l a s s E x e m p l o B r e a k {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { S c a n n e r s c a n n e r = new S c a n n e r ( S y s t e m . i n ) ; S y s t e m . o u t . p r i n t ( " D i g i t e um número : " ) ; i n t n = s c a n n e r . n e x t I n t ( ) ;
i n t soma = 0 ;
f o r (i n t i = 1 ; ; i ++) { i f ( i > n ) b r e a k; soma += i ; }
S y s t e m . o u t . p r i n t l n ( "A soma d o s " + n + " p r i m e i r o s números i n t e i r o s p o s i t i v o s é " + soma ) ; }
}
Código 2.7 Exemplo do comandobreak.
2.5.7 Comandocontinue
Da mesma maneira, é possível obrigar o laço a interromper a iteração corrente e executar a próxima iteração no laço. Para isso, pode-se utilizar a palavra-chave continue.
p u b l i c c l a s s E x e m p l o C o n t i n u e {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { f o r (i n t i = 1 ; i <= 1 0 0 ; i ++) {
i f ( i % 2 != 0 ) c o n t i n u e; // número ímpar S y s t e m . o u t . p r i n t l n ( i ) ;
} }
}
Código 2.8 Exemplo do comandocontinue.
O Código 2.8 ilustra um programa Java que utiliza o comando continue. Esse código imprime apenas os números pares.
56