#java
#java
Вопрос:
У меня есть оператор if, который проверяет ввод пользователя. Например, есть 2 вещи, которые я хотел бы проверить. Во-первых, является ли все текстовое поле пустым. Если одно из текстовых полей не заполнено, появится всплывающее окно. Во-вторых, совпадают ли password и confirm password. Когда пароль и подтверждение пароля не совпадают, появляется всплывающее окно. Проблема в том, что при выполнении обоих условий постоянно появляются два всплывающих окна. Что мне нравится делать, так это когда происходят оба сценария, вложенный if не будет срабатывать, вместо этого будет срабатывать только основной if. Вложенный оператор if будет срабатывать только тогда, когда все текстовое поле заполнено, а пароль и пароль подтверждения не совпадают.
if(TextField1.getText().isEmpty()||TextField2.getText().isEmpty()||TextField2.getText().isEmpty()
||TextField4.getText().isEmpty()||TextField5.getText().isEmpty()||TextField6.getText().isEmpty()
||TextField8.getText().isEmpty()||TextField9.getText().isEmpty()||TextField10.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Please fill in all the details!",
"Invalid Input", JOptionPane.ERROR_MESSAGE);
if(!TextField4.getText().equals(TextField5.getText())){
JOptionPane.showMessageDialog(null, "Password and Confirm Password is not the same!",
"Invalid Input", JOptionPane.ERROR_MESSAGE);
}
}else{
writetoFile();
}
Комментарии:
1. Создайте второй
if
else if
и переместите его за пределы первогоif
.2. Рассмотрите возможность добавления текстовых полей в массив и выполните итерацию по этому массиву, чтобы найти, нужны ли какие-либо из них все детали. docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
3. Вы могли бы заменить все пустые проверки на stream:
Stream.of(textField1, textField2, ...).map(f -> f.getText()).findAny().isPresent()
. Или поместите текстовые поля в массив или список и создайте поток, используяArrays.stream(array)
илиlist.stream()
соответственно.
Ответ №1:
Вероятно, здесь вам понадобится условие if-ifelse-else . Попробуйте что-то вроде этого (непроверенный код)
if(TextField1.getText().isEmpty()||TextField2.getText().isEmpty()||TextField2.getText().isEmpty()
||TextField4.getText().isEmpty()||TextField5.getText().isEmpty()||TextField6.getText().isEmpty()
||TextField8.getText().isEmpty()||TextField9.getText().isEmpty()||TextField10.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Please fill in all the details!",
"Invalid Input", JOptionPane.ERROR_MESSAGE);
} else if(!TextField4.getText().equals(TextField5.getText())){
JOptionPane.showMessageDialog(null, "Password and Confirm Password is not the same!",
"Invalid Input", JOptionPane.ERROR_MESSAGE);
}else{
writetoFile();
}
Комментарии:
1. ах да, я забыл эту опцию.
Ответ №2:
После запуска первого всплывающего return;
окна он не перейдет ко второй проверке.
JOptionPane.showMessageDialog(null, "Please fill in all the details!",
"Invalid Input", JOptionPane.ERROR_MESSAGE);
return;