Boa noite,
Gostaria que me ajudassem no seguinte problema: Preciso de causar uma exceção do tipo ArithmeticException dizendo que um overflow ocorreu ao somar dois ints quaisquer:
Comecei a fazer o programa, só falta inserir a Exception:
}
}[/code]
Muito obrigado.
Acho que deva ser isso:
Scanner entrada = new Scanner(System.in);
try {
System.out.println("Digite os inteitos a serem somados: ");
int m = entrada.nextInt(), n = entrada.nextInt();
int soma = m + n;
System.out.println(" O resultado e : " + soma);
}
catch (ArithmaticException arithmatic) { // aqui é capturado a exceção, você pode tratar ou lançar o erro
System.err.println("Error in the sum of the numbers");
}
Inseri a Exception, mas quando tento somar dois valores ints, o overflow nunca ocorre, mesmo quando somo 999999999 + 999999999.
Isso era previsto? Na verdade o programa deve ler repetidamente dois numeros inteiros diferentes de zero, chamar
o metodo soma para somar os dois inteiros lidos e imprimir, dependendo dos valores
dos argumentos, o resultado da soma, caso o valor da soma possa ser armazenado
em um valor de tipo int. Caso contrario uma mensagem apropriada para o usuario
(indicando que o valor da soma nao pode ser armazenado em um valor de tipo int).
A leitura deve terminar quando um dos valores lidos for igual a zero. Seria isso mesmo?
Obrigado
Bem a classe ArithmeticException ela somente captura operação incorretas e não overflow de ints,
para esse tipo de exception use a class NumberFormatException ou InputMismatchException elas capturam
esse tipo de exception.
o que fiz foi fazer um cast da soma para um Long, mas deve haver jeito melhor…
[code]public static void main(String[] args){
int a = 2147483647;
int b = 2147233647;
if ((((long) a) + ((long) b)) > Integer.MAX_VALUE){
throw new ArithmeticException("Erro");
}
}[/code]
ok?
int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE;
if(a + b < 0) {
//se o resutlado da soma for menor que zero, significa que a soma dos dois é maior que o valor máximo do tipo primitivo int
System.err.println("Valor da soma maior que um int");
}
Olha vou postar um exemplo, onde é pedido ao usuário que ele digite dois números, caso esses dois números inteiros
sejam maior do que a classe Integer suporta é feito novamente a pergunta ao usuário para que ele digite novamente os
dois números, enquanto os dois ou um número não for válido é repetido a pergunta.
public static void main(String[] args) {
boolean status = true;
do {
try {
String number1 = JOptionPane.showInputDialog("Type the first number: ");
String number2 = JOptionPane.showInputDialog("Type the second number: ");
int sum = Integer.parseInt(number1) + Integer.parseInt(number2);
JOptionPane.showMessageDialog(null, "Type sum of the two numbers is: " + sum);
status = false; // o programa somente é terminado quando chega até essa linha
}
catch (NumberFormatException numberFormat) {} // somente para capturar o erro
} while (status);
}