Добрый день. Генерированный пароль должен быть длиной 8 символов, содержать как минимум одну цифру, одну букву латинского алфавита верхнего регистра и одну - нижнего. Код компилируется, консоль выводит пароль. Но периодически после компиляции консоль пустая - где проблема?
import java.io.ByteArrayOutputStream;

/*
Генератор паролей
*/

public class Solution {
    public static void main(String[] args) {
        ByteArrayOutputStream password = getPassword();
        System.out.println(password.toString());
    }

    public static ByteArrayOutputStream getPassword() {
    	ByteArrayOutputStream out = new ByteArrayOutputStream();
    	byte[] array = new byte[8];
    	for (int i = 0; i< array.length; i++) {
    		while (true) {
    			int rand = (int) (Math.random()*(122 - 48 +1))+ 48;
    			if (hasNum((byte)rand) | hasHighRegistr((byte)rand) | hasLowRegistr((byte)rand)) {
    				array[i] = (byte) rand;
    				break;
    			}
    		}
    	}
    	int number = 0;
    	int high = 0;
    	int low = 0;
    	for (byte b: array) {
    		if (hasNum (b)) {
    			number ++;
    		} else if (hasHighRegistr(b)) {
    			high ++;
    		} else if (hasLowRegistr(b)) {
    			low ++;
    		}
    	}
    	if (number >0 && high > 0 && low >0) {
    		out.writeBytes(array);
    	} else {
    		getPassword();
    	}
        return out;
    }

    private static  boolean hasNum(byte b) {
    	int num = (int) b;
    	if (num>= 48 && num <=57) {
    		return true;
    	}
    	return false;
    }

    private static boolean hasHighRegistr(byte b) {
    	int num = (int) b;
    	if (num >= 65 && num <= 90) {
    		return true;
    	}
    	return false;
    }

    private static boolean hasLowRegistr(byte b) {
    	int num = (int) b;
    	if (num >= 97 && num <= 122) {
    		return true;
    	}
    	return false;
    }
}