Итак, мой друг и я программируем Блэкджек на Java, и мы хотели проверить правильность ввода в наших полях ввода (например, ввод только цифр). Поэтому мы сели за его компьютер, и он написал это решение:
public static boolean testeTextFieldInt(JTextField textField, int geld) {
if (!textField.getText().isEmpty()) {
try {
if(Integer.parseInt(textField.getText())>0 && Integer.parseInt(textField.getText())<geld ) {
return true;
}
} catch (NumberFormatException e) {
return false;
}
}
return false;
}
Теперь я не согласен с этим решением, потому что ваш код не должен зависеть от ошибки, или я ошибаюсь? поэтому я сел и написал это:
public static boolean checkInput(JTextField textField, int spielerGeld, String eingabe) {
boolean matched = false;
switch (eingabe) {
case "num":
if (!textField.getText().isEmpty() && textField.getText().matches("^[0-9]*$")) {
int geldinput = Integer.parseInt(textField.getText());
if (geldinput > 0 && geldinput < spielerGeld) {
matched = true;
}
}
break;
case "string":
if (!textField.getText().isEmpty() && textField.getText().matches("^[a-zA-Z]*$")) {
matched = true;
}
break;
default:
break;
}
return matched;
}
Имейте в виду, у нас пока нет текстовых полей, которые мы должны проверять, но я просто реализовал их, чтобы понять, как можно выполнить несколько проверок в одном методе.
Итак, теперь мой вопрос: какой код «лучше»? и что мы могли бы сделать лучше?
Заранее спасибо!
EDIT1:
Так как некоторые уже упоминали, вы говорите, что мой метод не построен по принципу Единой ответственности.
Но если разделить на 'checkInputIsnumber' и checkInputIsString ', первое решение (мой друг) все равно останется «лучшим»?
EDIT2:
Лучше определено, как в, метод должен быть с низкой цикломатической сложностью, легко читаемым и легко поддерживать в долгосрочной перспективе.