Operações Matemáticas: Adição, Subtração, Multiplicação, Divisão, Resto da Divisão (módulo) e precedência dos operadores

Quanto é 1 + 2 x 2 ?
Para nós, pode ser 5 ou 6. Pro Java é sempre 5.

Se fizer a soma primeiro, é 6: 1+2 x 2 = 3 x 2 = 6
Se fizer o produto primeiro, é 5: 1 + 2x2 = 1 + 4 = 5
E o computador? Como faz? E se ele se confundir também?

E 5 dividido por 2 ?
2.5 ? Pro Java pode ser 2.5 ou 2.

Operações Matemáticas em Computação

Primeiro, esqueça o 'x' como sinal de multiplicação, de agora em diante é '*'.
Segundo, divisão se representa com o '/'. Por exemplo, 4/2 = 2
Terceiro, tudo em computação é matemática.

Aliás, computação vem de computar, ou seja, contar.
Até quando você escreve em Java, a JVM(Java Virtual Machine) troca informações com sua máquina na forma de matemática (em bits).
Até as imagens, são divididas em pequenos blocos, são numerados e cada bloquinho é pintado com uma cor devidamente identificada.

Adivinhe como é essa identificação? Claro, por meio de números.
Ou achou que a máquina ia dividir em 'rosa emo', 'azul bebê' ou 'azul piscina'?

Adição, Subtração e Multiplicação

Essas três não tem muitas dificuldade. São 'zona'. Você pode somar, subtrair e multiplicar o que quiser.
Á rigor, tudo é uma soma.
Subtração é uma uma soma com números negativos: a - b = a + (-b)
Multiplicação é uma soma repetida várias vezes: a * b = a + a + a + a ... + a (o 'a' se repete 'b' vezes).

O seguinte código pede dois números inteiros (se não for inteiro, terá erros) e mostra o resultado da soma, subtração e multiplicação, sem segredo:

import java.util.Scanner;

public class Operacoes {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);        
    int num1;
        int num2;
        
        System.out.print("Digite o primeiro número: ");
        num1 = entrada.nextInt();
        
        System.out.print("Digite o segundo número: ");
        num2 = entrada.nextInt();
        
        System.out.println();
        System.out.println(num1 + " + " + num2 + " = " + (num1 + num2) );
        System.out.println(num1 + " - " + num2 + " = " + (num1 - num2) );
        System.out.println(num1 + " * " + num2 + " = " + (num1 * num2) );
        
        
    }
}

Caso não for usar inteiros (ou for) aconselho a usar 'printf', pois você pode formar a saída.

Formatação com printf

Uma forma diferente de exibir números é:
System.out.printf("número: %d", num1);

O exemplo passado ficaria:

import java.util.Scanner;

public class Operacoes {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);        
    int num1;
        int num2;
        
        System.out.print("Digite o primeiro número: ");
        num1 = entrada.nextInt();
        
        System.out.print("Digite o segundo número: ");
        num2 = entrada.nextInt();
        
        System.out.printf("\n%d + %d = %d\n", num1, num2, num1 + num2);
        System.out.printf("%d - %d = %d\n", num1, num2, num1 - num2);
        System.out.printf("%d * %d = %d\n", num1, num2, num1 * num2);
        
        
    }
}

Ou seja, o '%d' será substituído pelo valor de %d.
Para substituir valores de variáveis float, use %f
Com multiplicação e divisão de números decimais, a coisa pode ficar bagunçada por conta das vírgulas. Por isso, vamos adicionar esse '.2' entre o '%' e o 'f', ficando %.2f.
Isso quer dizer que, após o ponto decimal, imprimir somente duas casas decimais. Veja:

import java.util.Scanner;

public class Operacoes {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        float num1;
        float num2;
     
        System.out.print("Digite o primeiro número: ");
        num1 = entrada.nextFloat();
     
        System.out.print("Digite o segundo número: ");
        num2 = entrada.nextFloat();
     
        System.out.printf("\n%.2f + %.2f = %.2f\n", num1, num2, num1 + num2);
        System.out.printf("%.2f - %.2f = %.2f\n", num1, num2, num1 - num2);
        System.out.printf("%.2f * %.2f = %.2f\n", num1, num2, num1 * num2);
        System.out.printf("%.2f / %.2f = %.2f\n", num1, num2, num1 / num2);
     
     
    }
}


Experimente tirar o '.2' e veja a bagunça que fica na hora de multiplicar e dividir.

Divisão

Não divida nada por zero. Isso não existe.
Não é infinito (ou -infinito). É uma indefinição matemática.

Outra detalhe que você deve atentar é a divisão de inteiros. Quanto é 5/2?
Vamos ver o que o Java nos dizer com o seguinte programa:


import java.util.Scanner;

public class Operacoes {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int num1=5;
        int num2=2;
     
        System.out.println(num1/num2);
     
     
    }
}

run:
2
BUILD SUCCESSFUL (total time: 0 seconds)

2 ?
"Putz, como meu computador é burro!"

Calma, agora teste:

import java.util.Scanner;

public class Operacoes {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        float num1=5;
        float num2=2;
     
        System.out.println(num1/num2);
     
     
    }
}

run:
2.5
BUILD SUCCESSFUL (total time: 0 seconds)

Ou seja, divisões de inteiros retornam resultados inteiros. Mesmo se o resultado 'de verdade' fosse 2.999999, o Java retornaria somente a parte inteira, que é 2, e não 3.
Em termos técnicos, o Java trunca a parte decimal. Simplesmente descarta ela.

Resto da divisão

Voltando ao 5 / 2: caso a operação seja feita com inteiro, você sabe que o resultado é 2. Porém, terá um resto, que será 1.
Pois: 5 = 2 * 2 + 1

O símbolo de resto da divisão é %.
Assim, 8 % 3 = 2. Pois: 8 = 3*2 + 2

Em matemática chamamos de 'mod', de módulo: 8 mod 3 = 2

No Brasil, é aquele 'resto' que deixávamos lá embaixo nas continhas do colégio:



Teste:

public class Operacoes {

    public static void main(String[] args) {
     
        System.out.println(2009%19);
     
     
    }
}

Veremos e usaremos bastante o resto da divisão em várias questões/algoritmos.
Por exemplo, todo número par deixa resto da divisão por 2 igual à 0. Isso é uma informação valiosíssima.


Precedência dos operadores e uso dos parênteses

Para não existir confusão e mais de um resultado possível, o Java adota uma precedência de seus operadores:

1o: Multiplicação (*), Divisão (/) e resto da divisão (%) são calculados primeiro. Caso existam mais de um na mesma expressão, o Java impõe a precedência como sendo da esquerda pra direita na expressão.

2o: Adição (+) e Subtração(-) depois dos operadores acima serem calculados, esses são calculados. Caso existam mais de um na mesma expressão, o Java impõe a precedência como sendo da esquerda pra direita na expressão.

Para não existir confusão e para deixar seu código sempre mais claro, separe as expressões com parênteses. Por exemplo, como se calcula média dos números a e b?
a + b / 2 -> errado
(a + b)/2 -> certo

Os parentêses formam um bloco. É como se o que estivesse ali dentro fosse calculado separadamente.

No exemplo de inicio deste capítulo: 1 + 2 * 2
Dependendo do que você quer, divida em em parantêses que ficará implícito.

Veja:
1 + 2 * 2 = 5 (precedência do * perante ao +, em Java)
(1 + 2) * 2 = 6
1 + (2 * 2) = 5

É fácil ver que fica mais claro e organizado com o uso dos parênteses.


Exercícios:
1. Crie um programa que recebe suas três notas (colégio, faculdade) e calcule a média final.
2. Crie um programa que receba a altura e o peso do usuário, e diga seu IMC (Índice de Massa Corporal), dado pela fórmula:

Sabe quanto custa um bom livro de java?
Entre R$ 100,00 e R$300,00

Sabe quanto custa um bom curso presencial de Java?
Entre R$ 1.500,00 até R$ 4.000,00

Sabe quanto custa estudar pelo Java Progressivo?
Absolutamente nada.

Porém, também precisamos de sua ajuda e apoio.
Para isso, basta curtir nossa Fan Page e clicar no botão G+ do Google.