Dúvida sobre o operador de módulo no Java

5 respostas
W

Galera, me deparei com um problema confuso, e nele eu tinha que usar o operador de módulo. Olhem o seguinte trecho de código:

int primeiro = 0;
primeiro = primeiro - 7;
primeiro %= 10;
System.out.println(primeiro);

O resultado impresso foi -7! Só que eu fiz o mesmo teste com o Python e o resultado impresso foi 3! E 3 é o valor que eu de fato estava esperando.no Java, ;-; alguém pode me explicar porque isso aconteceu, por favor?

5 Respostas

wko.java

Na linha 3 você esta fazendo a operação:

primeiro = primeiro(-7) % 10;

O correto seria:

primeiro = 10 % primeiro(-7);

Afinal, o resto da divisão de 10 por 7 é 3. E de 7 por 10?

Espero ter ajudado, abraços!!!

W

Não resolve o meu problema =\ já tentei agora desse jeito e nada.

D

Tanto 3 como -7 são restos da divisão, a diferença está em como ambas são calculadas.
Em Java, -7 / 10 = 0 e -7 % 10 = -7 então 10 * 0 + (-7) = -7
Em Python, -7 // 10 = -1 e -7 % 10 = 3 então 10 * (-1) + 3 = -7

# Python
print (-7//-10); #0
print (-7%-10); #-7

print (-7//10); #-1
print (-7%10); #3

print (7//10); #0
print (7%10); #7

print (7//-10); #-1
print (7%-10); #-3

//Java
        System.out.println(-7/-10); // 0
        System.out.println(-7%-10); // -7
        
        System.out.println(-7/10); // 0
        System.out.println(-7%10); // -7
        
        System.out.println(7/10); // 0
        System.out.println(7%10); // 7
        
        System.out.println(7/-10); // 0
        System.out.println(7%-10); // 7
W

Minha dúvida é, como obtenho o mesmo resultado que em Python, só que no Java?
Quero fazer o resto da divisão de -7 por 10 e obter 3.

W

Consegui resolver. Para obter o mesmo resultado que eu estava obtendo em Python, eu tive que fazer um truque. Segue como eu fiz:


public class Teste {
    public static void main(String[] args) {
        int primeiro = 0;
        primeiro = (10 + (primeiro - 7)) % 10;
        System.out.println(primeiro);
    }
}
Criado 11 de fevereiro de 2016
Ultima resposta 11 de fev. de 2016
Respostas 5
Participantes 3