Dúvida referente algorítimo para percorrer matriz em Java

Boa noite a todos,

Por favor, preciso de uma ajuda, sou estudante de Java e estou em um beco onde não estou encontrando a saída.

Criei uma matriz para armazenar login e senha de um sistema, porém na hora de percorrer ela para validar o login e a senha não esta funcionando, fiz diversos testes e pelo que percebi aparentemente o problema esta relacionado a matriz, pois se eu tento imprimir os dados que coloquei nela também esta dando o erro mas não estou conseguindo entender o que esta acontecendo.

public class Bean {

    Funcionario f1 = new Funcionario("RAFAEL", "1234");
    Funcionario f2 = new Funcionario("ERICK", "5678");
    Funcionario f3 = new Funcionario("STEPHANIE", "ABCD");

           
    
    public boolean validaLogin(String l, String s){
        
        String[][] cadastro = new String[3][2];
        cadastro[0][0] = f1.getLogin();
        cadastro[0][1] = f1.getSenha();

        cadastro[1][0] = f2.getLogin();
        cadastro[1][1] = f2.getSenha();                

        cadastro[2][0] = f3.getLogin();
        cadastro[2][1] = f3.getSenha();  
        
        
         boolean login = false;
         boolean validaLogin = false;
         boolean validaSenha = false;
         int posLogin = 5;
         int posSenha = 5;
            for(int i = 0; i <- cadastro.length; i++ ){
                for(int j = 0; j <= cadastro[i][j].length(); j++){
                    if(cadastro[i][j].equals(l)){
                        validaLogin = true;
                        posLogin = i;
                        break;
                    }
                }    
            }
            for(int i = 0; i <- cadastro.length; i++ ){
                for(int j = 0; j <= cadastro[i][j].length(); j++){
                    if(s.equals(cadastro[i][j])){
                        validaSenha = true;
                        posSenha = i;
                        break;
                    }
                }    
            }                    
           
            if(validaLogin == true && validaSenha == true && posLogin == posSenha ){
                
            login = true;        
            }         
        System.out.println("Login: " + validaLogin + " Senha: " + validaSenha + " posLogin: " + posLogin + " posSenha: " 
                + posSenha + " status login: " + login);  
        
        for (int i = 0; i < cadastro.length; i++) {
            for (int j = 0; j < cadastro.length; j++) {
                System.out.println(cadastro[i][j]);
            }
            
        }

        return login;
    }

}

refaz isso implementando um hashMap com usuário e senha e um set de usuários.

private Set<Funcionario> usuarios = new Set<>();

usuarios.add(new Funcionario("Rafael"));
usuarios.add(new Funcionario("Erick"));
usuarios.add(new Funcionario("Stephanie"));

isso vai garantir que só tenha um funcionário por set, por exemplo.
para o login, usar um HashMap não é uma má idéia. você com o Set dos usuários pode pegar a senha

Muito obrigado!