Na verdade não é essa incógnita toda por trás não...
Tem as combinações e &&( and) e ||(or)
1 - Se vc usa um "!=" Quer dizer que pra ser verdadeiro tem que ser diferente da sua condição aplicada
2 - se vc usa os operadores lógicos && as duas condições aplicadas devem ser verdadeiras
Exemplo:
Int a = 1;
Int b = 2;
If(a != 0 && b != 0) // aqui ele valida os dois parâmetros, e se os dois atenderem, ele cai no teu
3 se vc usa a condição || (or)
If(a != 0 && b != 0) ele nem olha o parâmetro b, pois no "ou" basta uma só condição ser verdadeira, pra ele entrar na instrução.
Não tem muito seguredo..
Resumindo...se vc usa &&(and) pra entrar na sua condição, os dois parâmetros tem que ser verdadeiros
Quando vc usa || (ou) qqr uma das condições devem ser verdadeiras, uma delas estiver, ele entra no seu bloco abaixo do IF
Mas o único problema mesmo, foi declarar a incrementaçao dentro do bloco if, a sua lógica estava correta