Логика вроде бы правильная, но эта куча nested if'ов меня печалит - не лучше ли брать отрицания выражений в if'ах и бросать исключения?