Chegar na ultima linha e não contar -1, como proceder?

int coluna = CadresultadoTabela.getSelectedColumn();

if (evt.getKeyCode() == KeyEvent.VK_TAB) {
    int linha = CadresultadoTabela.getSelectedRow();
    Object obj = modelo.getValueAt(linha, 30);
    Object obj2 = modelo.getValueAt(linha, 31);
    Object obj3 = modelo.getValueAt(linha, 32);

    if ((obj == null || obj.toString().equals("")) && (obj2 == null || obj2.toString().equals(""))) {
        TabPreenchimento();
    } else {
        VerificarResultdo();
        if (modelo.getValueAt(linha, 33).equals("Reprovado")) {
            if (obj3 == null || modelo.getValueAt(linha, 32).equals("")) {
                CadresultadoTabela.changeSelection(linha, 32, false, false);
            } else {
                TabPreenchimento();
            }
        } else {
            TabPreenchimento();
        }
    }
} else if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
    int linha = CadresultadoTabela.getSelectedRow() - 1;
    Object obj = modelo.getValueAt(linha, 30);
    Object obj2 = modelo.getValueAt(linha, 31);
    Object obj3 = modelo.getValueAt(linha, 32);

    if ((obj == null || obj.toString().equals("")) && (obj2 == null || obj2.toString().equals(""))) {
        //VERIFICA SE A SELECAO ESTA NA ULTIMA LINHA
        if (CadresultadoTabela.getSelectedRow() != CadresultadoTabela.getRowCount()) {
            EnterPreenchimento();
        } else {
            TabPreenchimento();
        }
    } else {
        //VERIFICA SE A SELECAO ESTA NA ULTIMA LINHA
        if (CadresultadoTabela.getSelectedRow() != CadresultadoTabela.getRowCount()) {
            VerificarResultdoEnter();
        } else {
            VerificarResultdo();
        }
        if (modelo.getValueAt(linha, 33).equals("Reprovado")) {
            if (obj3 == null || modelo.getValueAt(linha, 32).equals("")) {
                CadresultadoTabela.changeSelection(linha, 32, false, false);
            } else {
                //VERIFICA SE A SELECAO ESTA NA ULTIMA LINHA
                if (CadresultadoTabela.getSelectedRow() != CadresultadoTabela.getRowCount()) {
                    EnterPreenchimento();
                } else {
                    TabPreenchimento();
                }
            }
        } else {
            //VERIFICA SE A SELECAO ESTA NA ULTIMA LINHA
            if (CadresultadoTabela.getSelectedRow() != CadresultadoTabela.getRowCount()) {
                EnterPreenchimento();
            } else {
                TabPreenchimento();
            }
        }
    }
}

pessoal, isso é um sistema para dar aprovado ou reprovado em uma jtable, mas quando ele chega na ultima linha e dou enter, o sistema não está verificando EnterPreenchimento(); e nem o TabPreenchimento(); alguém que conheça um pouco sabe me dizer se tem algum erro na montagem desse código? pq pelo meu visto parece está certo, mas como disse, quando chega na ultima linha, ele não está ativando os 2 métodos.

A última linha não é o CadresultadoTabela.getRowCount() e sim o CadresultadoTabela.getRowCount() - 1

Dá uma refatorada nesse código, tem muita instrução repetida.

Se eu fosse você, iria renderizar uma coleção de objetos com atributos específicos para cada coluna, isso evita ter que ficar escrevendo códigos do tipo modelo.getValueAt(linha, coluna).

fiz as alterações aqui, mas sem sucesso. engraçado q quando eu vou dando enter ele verifica todos, ai chega na ultima linha ele n verifica, mas se eu passar por ela 2x, ele verifica