Jump to content

Turbine o seu Perfil

Confira a atualização e participe do clube!
Clique e saiba mais

Junte-se ao Clube de Membros VIP

Tenha destaque e diversos benefícios!
Confira Aqui

Acesse nosso Discord

Conheça nossos canais interativos
Confira Aqui
Notícia
  • Adquira já o seu VIP!
Sign in to follow this  
opandaG

java [Curso] Variáveis e fluxo

Recommended Posts

Olá Galera, aqui é o panda!

Vamos para Aula de Numero 04, Variáveis e fluxo!

Comentem e deixe o feedback de vocês!

 

Dentro de um bloco, podemos declarar variáveis e usá-las. Em Java, toda variável tem um tipo que não pode ser mudado, uma vez que declarado:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Por exemplo, é possível ter uma idade que guarda um número inteiro:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Com isso, você declara a variável idade, que passa a existir a partir daquela linha. Ela é do tipo int, que guarda um número inteiro. A partir daí, você pode usá-la, primeiramente atribuindo valores.

 

A linha a seguir é a tradução de: "idade deve valer quinze".

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Comentários em Java

 

Para fazer um comentário em java, você pode usar o // para comentar até o final da linha, ou então usar o /* */ para comentar o que estiver entre eles.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Além de atribuir, você pode utilizar esse valor. O código a seguir declara novamente a variável idade com valor 15 e imprime seu valor na saída padrão através da chamada a System.out.println.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Por fim, podemos utilizar o valor de uma variável para algum outro propósito, como alterar ou definir uma segunda variável. O código a seguir cria uma variável chamada idadeNoAnoQueVem com valor de idade mais um.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

No mesmo momento que você declara uma variável, também é possível inicializá-la por praticidade:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Você pode usar os operadores +, -, / e * para operar com números, sendo eles responsáveis pela adição, subtração, divisão e multiplicação, respectivamente. Além desses operadores básicos, há o operador % (módulo) que nada mais é que o resto de uma divisão inteira.

 

Veja alguns exemplos:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Como rodar esses códigos?

 

Você deve colocar esses trechos de código dentro do bloco main que vimos no capítulo anterior. Isto é, isso deve ficar no miolo do programa. Use bastante System.out.println, dessa forma você pode ver algum resultado, caso contrário, ao executar a aplicação, nada aparecerá.

 

Por exemplo, para imprimir a idade e a idadeNoAnoQueVem podemos escrever o seguinte programa de exemplo:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Representar números inteiros é fácil, mas como guardar valores reais, tais como frações de números inteiros e outros? Outro tipo de variável muito utilizado é o double, que armazena um número com ponto flutuante (e que também pode armazenar um número inteiro).

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O tipo boolean armazena um valor verdadeiro ou falso, e só: nada de números, palavras ou endereços, como em algumas outras linguagens.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

true e false são palavras reservadas do Java. É comum que um boolean seja determinado através de uma expressão booleana, isto é, um trecho de código que retorna um booleano, como o exemplo:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O tipo char guarda um, e apenas um, caractere. Esse caractere deve estar entre aspas simples. Não se esqueça dessas duas características de uma variável do tipo char! Por exemplo, ela não pode guardar um código como '' pois o vazio não é um caractere!

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Variáveis do tipo char são pouco usadas no dia a dia. Veremos mais a frente o uso das Strings, que usamos constantemente, porém estas não são definidas por um tipo primitivo.

 

Tipos primitivos e valores

 

Esses tipos de variáveis são tipos primitivos do Java: o valor que elas guardam são o real conteúdo da variável. Quando você utilizar o operador de atribuição = o valor será copiado.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Aqui, i fica com o valor de 6. Mas e j? Na segunda linha, j está valendo 5. Quando i passa a valer 6, será que j também muda de valor? Não, pois o valor de um tipo primitivo sempre é copiado.

 

Apesar da linha 2 fazer j = i, a partir desse momento essas variáveis não tem relação nenhuma: o que acontece com uma, não reflete em nada com a outra.

 

Outros tipos primitivos

 

Vimos aqui os tipos primitivos que mais aparecem. O Java tem outros, que são o byte, short,long e float.

 

Cada tipo possui características especiais que, para um programador avançado, podem fazer muita diferença.

 

Casting e promoção

 

Alguns valores são incompatíveis se você tentar fazer uma atribuição direta. Enquanto um número real costuma ser representado em uma variável do tipo double, tentar atribuir ele a uma variável int não funciona porque é um código que diz: "i deve valer d", mas não se sabe se d realmente é um número inteiro ou não.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O mesmo ocorre no seguinte trecho:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O mais interessante, é que nem mesmo o seguinte código compila:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Apesar de 5 ser um bom valor para um int, o compilador não tem como saber que valor estará dentro desse double no momento da execução. Esse valor pode ter sido digitado pelo usuário, e ninguém vai garantir que essa conversão ocorra sem perda de valores.

 

Já no caso a seguir, é o contrário:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O código acima compila sem problemas, já que um double pode guardar um número com ou sem ponto flutuante. Todos os inteiros representados por uma variável do tipo int podem ser guardados em uma variável double, então não existem problemas no código acima.

 

Às vezes, precisamos que um número quebrado seja arredondado e armazenado num número inteiro. Para fazer isso sem que haja o erro de compilação, é preciso ordenar que o número quebrado seja moldado (casted) como um número inteiro. Esse processo recebe o nome de casting.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O casting foi feito para moldar a variável d3 como um int. O valor de i agora é 3.

 

O mesmo ocorre entre valores int e long.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

E, se quisermos realmente fazer isso, fazemos o casting:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Alguns castings aparecem também:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O código acima não compila pois todos os literais com ponto flutuante são considerados double pelo Java. E float não pode receber um double sem perda de informação, para fazer isso funcionar podemos escrever o seguinte:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

A letra f, que pode ser maiúscula ou minúscula, indica que aquele literal deve ser tratado como float.

 

Outro caso, que é mais comum:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Você precisa do casting porque o Java faz as contas e vai armazenando sempre no maior tipo que apareceu durante as operações, no caso o double.

 

E, uma observação: no mínimo, o Java armazena o resultado em um int, na hora de fazer as contas.

 

Até casting com variáveis do tipo char podem ocorrer. O único tipo primitivo que não pode ser atribuído a nenhum outro tipo é o boolean.

 

Castings possíveis

 

Abaixo estão relacionados todos os casts possíveis na linguagem Java, mostrando a conversão de um valor para outro. A indicação Impl. quer dizer que aquele cast é implícito e automático, ou seja, você não precisa indicar o cast explicitamente (lembrando que o tipo boolean não pode ser convertido para nenhum outro tipo).

 

casting.png

 

Tamanho dos tipos Na tabela abaixo, estão os tamanhos de cada tipo primitivo do Java.

 

tamanho_tipos.png

 

O if e o else

 

A sintaxe do if no Java é a seguinte:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Uma condição booleana é qualquer expressão que retorne true ou false. Para isso, você pode usar os operadores <, >, <=, >= e outros. Um exemplo:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Além disso, você pode usar a cláusula else para indicar o comportamento que deve ser executado no caso da expressão booleana ser falsa:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Você pode concatenar expressões booleanas através dos operadores lógicos "E" e "OU". O "E" é representado pelo && e o "OU" é representado pelo ||.

 

Um exemplo seria verificar se ele tem menos de 18 anos e se ele não é amigo do dono:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Esse código poderia ficar ainda mais legível, utilizando-se o operador de negação, o !. Esse operador transforma o resultado de uma expressão booleana de false para truee vice versa.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Repare na linha 3 que o trecho amigoDoDono == false virou !amigoDoDono. Eles têm o mesmo valor.

 

Para comparar se uma variável tem o mesmo valor que outra variável ou valor, utilizamos o operador ==. Repare que utilizar o operador = dentro de um if vai retornar um erro de compilação, já que o operador = é o de atribuição.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O While

 

O while é um comando usado para fazer 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 permanecer verdadeira.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O trecho dentro do bloco do while será executado até o momento em que a condição idade < 18 passe a ser falsa. E isso ocorrerá exatamente no momento em que idade == 18, o que não o fará imprimir 18.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Já o while acima imprime de 0 a 9.

 

O For

 

Outro comando de loop extremamente utilizado é o for. A ideia é a mesma do while: fazer um trecho de código ser repetido enquanto uma condição continuar verdadeira. Mas além disso, o for isola também um espaço para inicialização de variáveis e o modificador dessas variáveis. Isso faz com que fiquem mais legíveis, as variáveis que são relacionadas ao loop:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Um exemplo é o a seguir:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Repare que esse for poderia ser trocado por:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Porém, o código do for indica claramente que a variável i serve, em especial, para controlar a quantidade de laços executados. Quando usar o for? Quando usar o while? Depende do gosto e da ocasião.

 

Pós incremento ++

 

i = i + 1 pode realmente ser substituído por i++ quando isolado, porém, em alguns casos, temos essa instrução envolvida em, por exemplo, uma atribuição:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Qual é o valor de x? O de i, após essa linha, é 6.

 

O operador ++, quando vem após a variável, retorna o valor antigo, e incrementa (pós incremento), fazendo x valer 5.

 

Se você tivesse usado o ++ antes da variável (pré incremento), o resultado seria 6:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Controlando loops

 

Apesar de termos condições booleanas nos nossos laços, em algum momento, podemos decidir parar o loop por algum motivo especial sem que o resto do laço seja executado.

 

for (int i = x; i < y; i++) {

if (i % 19 == 0) {

System.out.println("Achei um número divisível por 19 entre x e y");

break;

}

}

 

O código acima vai percorrer os números de x a y e parar quando encontrar um número divisível por 19, uma vez que foi utilizada a palavra chave break.

 

Da mesma maneira, é possível obrigar o loop a executar o próximo laço. Para isso usamos a palavra chave continue.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O código acima não vai imprimir alguns números. (Quais exatamente?)

 

Escopo das variáveis

 

No Java, podemos declarar variáveis a qualquer momento. Porém, dependendo de onde você as declarou, ela vai valer de um determinado ponto a outro.

 

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

O escopo da variável é o nome dado ao trecho de código em que aquela variável existe e onde é possível acessá-la.

 

Quando abrimos um novo bloco com as chaves, as variáveis declaradas ali dentro só valem até o fim daquele bloco.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

No bloco acima, a variável j pára de existir quando termina o bloco onde ela foi declarada. Se você tentar acessar uma variável fora de seu escopo, ocorrerá um erro de compilação.

 

cannot_find_symbol.png

 

O mesmo vale para um if:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Aqui a variável i não existe fora do if e do else! Se você declarar a variável antes do if, vai haver outro erro de compilação: dentro do if e do else a variável está sendo redeclarada! Então o código para compilar e fazer sentido fica:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Uma situação parecida pode ocorrer com o for:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Neste for, a variável i morre ao seu término, não podendo ser acessada de fora do for, gerando um erro de compilação. Se você realmente quer acessar o contador depois do loop terminar, precisa de algo como:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Um bloco dentro do outro

 

Um bloco também pode ser declarado dentro de outro. Isto é, um if dentro de um for, ou um for dentro de um for, algo como:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Para saber mais

 

  • Vimos apenas os comandos mais usados para controle de fluxo. O Java ainda possui o do..while e o switch. Pesquise sobre eles e diga quando é interessante usar cada um deles.
     
     
  • Algumas vezes, temos vários laços encadeados. Podemos utilizar o break para quebrar o laço mais interno. Mas, se quisermos quebrar um laço mais externo, teremos de encadear diversos ifs e seu código ficará uma bagunça. O Java possui um artifício chamado labeled loops; pesquise sobre eles.
     
     
  • O que acontece se você tentar dividir um número inteiro por 0? E por 0.0?
     
     
  • Existe um caminho entre os tipos primitivos que indicam se há a necessidade ou não de casting entre os tipos. Por exemplo, int -> long -> double (um int pode ser tratado como um double, mas não o contrário). Pesquise (ou teste), e posicione os outros tipos primitivos nesse fluxo.
     
     
  • Além dos operadores de incremento, existem os de decremento, como --i e i--. Além desses, você pode usar instruções do tipo i += x e i -= x, o que essas instruções fazem? Teste.
     


um pensador...

zmnNkjR.png

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...