Sinal (-) inexplicÁvel!

Oi galera! Sou novo na área estou no segundo semestre de Ciências da Computação. Estou usando Netbeans para programar em java e um dos meus códigos se comportou de maneira estranha. Olhem só o código e o resultado.

package questao7;

//@author schinwinkwinsky

public class Main {

public static void main(String[] args) {
   int x;
   int soma=0;
   int mult=1;

   for (x=1; x<=30; x+=2){
       System.out.println(x);
       soma+=x;
   }
   System.out.println("A soma dos números acima é "+soma);

   for (x=2; x<=30; x+=2){
       System.out.println(x);
       mult*=x;
   }
   System.out.println("O produto dos números acima é "+mult);
}

}

RESULTA EM:

1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
A soma dos números acima é 225
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
O produto dos números acima é -1409286144
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

ALGUÉM SABE ME EXPLICAR PQ O PRODUTO FICOU NEGATIVO?

Oi, tudo bem?
O problema é que o valor do produto ultrapassa o valor máximo que cabe em um “int”, por isso apareceu esse
resultado estranho(não sei como funciona ao certo quando isso ocorre), mas troque o tipo da variavel “mult” de “int”
para “long” e o programa funcionará.

Obs.
O tipo int armazena 32-bits (de -2,147,483,648 até 2,147,483,647 (inclusive).
O tipo long armazena 64-bits (de -9,223,372,036,854,775,808 até 9,223,372,036,854,775,807 (inclusive).
Informações tiradas do java tutorial (http://java.sun.com/docs/books/tutorial/)

O produto dos números muito provavelmente deve ser maior do que o suportado pelo tipo int, o que deve está causando um vazamento.

Tente mudar a variável mult de int para long e veja se resolve.

Abraços.

Isso acontece devido ao complemento de dois do número. Isso acontece porque o primeiro bit do número (o mais significativo) é o que determina o sinal do número. Quando você tenta fazer operações com números que não cabem na variável, acaba “estourando” o tamanho do número e vazando pra esse bit. Portanto, ele acaba ficando negativo.

Como alguém mencionou, coloque long ao invés de int (ou, ainda, BigDecimal, que é melhor ainda) que funciona.

[]´s

Muito obrigado a todos pelas respostas! E ao moderador, desculpa pelo tópico duplo. Eu percebi que aconteceu e tentei excluir o tópico, mas não consegui. E desculpa pelo título com letras maiúsculas e as tags . Vou tentar não esquecer! Vlw!

Sem problemas, o meu papel é mesmo o de avisar. :wink: