Java has a rather useful exception mechanism that can help you with this:
import java.util.StringJoiner; public class TestMain { private final String name; private final int age; private final char symbol; public TestMain(String name, int age, char symbol) { this.name = name; this.age = age; this.symbol = symbol; checkData(); } private void checkData() { StringJoiner errors = new StringJoiner("\n"); if (name == null || name.isEmpty()) errors.add("Имя не удовлетворяет условиям: " + name); if (age < 10 || age > 100) errors.add("Возраст не удовлетворяет условиям:" + age); if (symbol != 'x' && symbol != 'o') errors.add("Символ не удовлетворяет условиям: " + symbol); if (errors.length() > 0) throw new IllegalArgumentException(errors.toString()); } public String getName() { return name; } public int getAge() { return age; } public char getSymbol() { return symbol; } ... }
If you need to check local variables, then choose one of two ways:
1) Process all data in one method:
private boolean isDataValid(String name, int age, char symbol) { StringJoiner errors = new StringJoiner("\n"); if (name == null || name.isEmpty()) errors.add("Имя не удовлетворяет условиям: " + name); if (age < 10 || age > 100) errors.add("Возраст не удовлетворяет условиям:" + age); if (symbol != 'x' && symbol != 'o') errors.add("Символ не удовлетворяет условиям: " + symbol); if (errors.length() > 0) throw new IllegalArgumentException(errors.toString()); return true; }
2) Verify each parameter in a separate method (use this approach to avoid cumbersome constructions in one method, remember that methods should be easily readable, and if a method contains a large amount of code, its readability decreases):
private boolean isDataValid(String name, int age, char symbol) { StringJoiner errors = new StringJoiner("\n"); if (!isNameValid(name)) errors.add("Имя не удовлетворяет условиям: " + name); if (!isAgeValid(age)) errors.add("Возраст не удовлетворяет условиям:" + age); if (!isSymbolValid(symbol)) errors.add("Символ не удовлетворяет условиям: " + symbol); if (errors.length() > 0) throw new IllegalArgumentException(errors.toString()); return true; } private boolean isNameValid(String name) { return name != null && !name.isEmpty(); } private boolean isAgeValid(int age) { return age >= 10 && age <= 100; } private boolean isSymbolValid(char symbol) { return symbol == 'x' || symbol == 'o'; }
Regarding clause 2: In practice, I would advise you precisely it, since the method should only do its work, it should not go into the logic of other methods, on which it, in fact, does not depend.