#java #try-catch
Вопрос:
У меня есть этот код для школьного задания, которое я провалил, потому что оно не соответствовало стандартам моих преподавателей. Я не мог понять, как заставить программу работать, даже если вход был только в одном из двух ящиков. Если одно поле остается пустым, оно переходит в ловушку и выводит сообщение об ошибке «Пожалуйста, введите действительный номер». Я, может быть, думал о создании ArrayList для пользовательских входных данных и добавлении их вместе?
Это фрагмент кода для ящиков:
JButton creditButton = new JButton("CREDIT"); creditButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { double num1=0, num2=0, balance=0; try { num1 = Double.parseDouble(creditInput.getText()); num2 = Double.parseDouble(debitInput.getText()); balance = num1 - num2; totalBalance.setText("$" Double.toString(balance)); }catch(Exception e2) { JOptionPane.showMessageDialog(null, "Please Enter A Valid Number"); } } }); JButton debitButton = new JButton("DEBIT"); debitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { double num1=6, num2=6, balance=0; try { num1 = Double.parseDouble(creditInput.getText()); num2 = Double.parseDouble(debitInput.getText()); balance = num1 - num2; totalBalance.setText("$" Double.toString(balance)); }catch(Exception e2) { JOptionPane.showMessageDialog(null, "Please Enter A Valid Number"); } } }); JButton clearButton = new JButton("CLEAR"); clearButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { creditInput.setText(""); debitInput.setText(""); } });
Комментарии:
1. Как написано, обработка исключений слишком широка, поскольку она охватывает оба входа одновременно. Изолируйте каждый вход. Если есть исключение для синтаксического анализа, вам нужно знать, почему существует исключение, что можно сделать, только посмотрев на входные данные и посмотрев, является ли строковое представление допустимым числом, например, пустая строка может быть
0
, если вы хотите, ноabc
все равно должна быть ошибкой.2. (Я бы подумал, что пустой ввод будет ошибкой, но это ни здесь, ни там.)
3. @DaveNewton хорошо. Поэтому я приношу свои извинения, так как я очень новичок в этом, но я думаю, что вы хотите сказать, что мне нужно знать, что есть исключение, потому что, если кто-то попытается ввести что-то другое, кроме действительного номера, должна появиться ошибка. Уловка все :
catch(Exception e2)
недостаточно хороша, потому что она не будет работать, если там ничего нет. Поэтому я тоже попыталсяArithmeticException e
, но это дало мне фактические ошибки в кодировании.
Ответ №1:
Проверьте, является ли вход нулевым, и если он равен 0
if(creditInput.getText() == null){ num1 = 0.0; }else{ num1 = Double.parseDouble(creditInput.getText()); } if(debitInput.getText() == null){ num2 = 0.0; }else{ num2 = Double.parseDouble(debitInput.getText()); } balance = num1 - num2;