2015-01-20 2 views
2

как часть программы iam writing, для пользователя необходимо ввести номер, чтобы получить факс. До сих пор у меня есть это:код для сообщения об ошибке, если используется десятичная запятая

number = Integer.parseInt(JOptionPane.showInputDialog("\nPlease enter the number you wish to obtain the factorial for")); 
    JOptionPane.showMessageDialog(null, "You entered the number: " + number); 


    count = (number - 1); 

    if(number > 1) 
    { 

    do 

    { 

    factorial = number * count; 
    JOptionPane.showMessageDialog(null, number + " * " + count + " = " + factorial); 
    count--; 
    number = factorial; 

    } 

    while(count > 0); 

    JOptionPane.showMessageDialog(null, number + " * " + count + " = " + factorial); 

    JOptionPane.showMessageDialog(null, "The facorial of " + number + " is " + factorial); 

    } 

    else if (number == 0) 

    { 

    JOptionPane.showMessageDialog(null, "Factorial of 0 is 1"); 

    } 

    else if (number == 1) 

    { 

    JOptionPane.showMessageDialog(null, "Factorial of 1 is 1"); 

    } 

    else if (number < 0) 

    { 

    JOptionPane.showMessageDialog(null, "Please enter a number equal to or greater than 0"); 

Это прекрасно работает, но вкратце это также включает сообщение об ошибке, предлагающее УО пользователя ввести целое число, когда число decmimal был использован, а также если письмо вводится. Я изо всех сил пытаюсь написать код для достижения этого.

Заранее спасибо

Райан

+0

Целые числа не могут иметь десятичные точки. Вы должны использовать Double. –

+0

Нижеприведенная тема для вас (обратите внимание, что принятый ответ не самый лучший, потому что он ловит исключения, даже если ничего не так, поэтому лучше всего использовать функцию StringUtils.isNumeric(). http://stackoverflow.com/ Вопросы/1102891/how-to-check-if-a-string-is-a-numeric-type-in-java –

ответ

0

Проблема в том, что когда вход недействителен, Integer.parseInt выдает исключение , вырваться из потока вашего метода. Уловкой для решения этого является перемещение вызова Integer.parseInt внутри тела вашего кода, где вы можете иметь дело с любыми исключениями, вызванными недействительным вводом. Вы можете сделать это, сохраняя вход в String, и ловить исключение при разборе его:

String input = JOptionPane.showInputDialog("\nPlease enter the number you wish to obtain the factorial for"); 
number = -1; 
try { 
    number = Integer.parseInt(input); 
} catch (NumberFormatException nfe) { 
    ... // Show a message here saying that "input" is invalid 
} 

Обратите внимание на try/catch блок. NumberFormatException - это то, что Integer.parseInt бросает, когда вы передаете ему неверный ввод.

+0

Спасибо, это сработало :) – rymo

0

Вы можете использовать регулярные выражения, чтобы обеспечить число не является десятичным

if (!"wrong_number".matches("^-?\\d+$")) { 
    //error 
} 

В дополнение к этому, никогда не думайте, что ваш вход правильный, всегда проверьте сначала сделать конверсии позже :)

+0

Это кажется излишне сложным, он должен просто поймать 'NumberFormatException', который будет вызван попыткой разобрать non-int в целое число. – user3062946

+0

вопрос, я думаю. Мне нравится проверять, а не восстанавливать. – epoch