Sequência numérica

7 respostas Resolvido
java
V

Alguém pode me ajudar com a função abaixo?
O objetivo é verificar se os números de uma senha estão em sequência crescente ou decrescente.

public class Tools {
    // retorna true p/ senha correta
 
	static boolean validatePassword(Context context, String strPassword) {

        // recebe uma string com a senha no padrao "123456" ou "654321"       
       
	   char[] arrayPassword = strPassword.toCharArray(); // monta lista c/ os caracteres da senha ["1", "2", ...]

        for (int item = 0, length = (strPassword.length()); item < length; item++) { //monta uma lista c/ os inteiros da senha
           
            int numInt1 = strPassword.charAt(item); // converte o string "0"->48

            // nao consegui me livrar deste if pois o programa falha se eu tentar: 
			// ->  int numInt2 = strPassword.charAt(item + 1);
            if (item <  ((strPassword.length()) -1)) { // verifica a ordem dos numeros da senha
     
                int numInt2 = strPassword.charAt(item + 1); // converte o string "1"->49

                if ((numInt1 - numInt2 == -1) || (numInt1 - numInt2 == 1)) {
                    Toast.makeText(context, "Os numeros: " + numInt1 + " e " + numInt2 + " sao sequencias", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(context, "Os numeros: " + numInt1 + " e " + numInt2 + " nao sao sequencias", Toast.LENGTH_LONG).show();
                }

            }
        } // end of for
        return true; // retorno p/ testes
    }

}

7 Respostas

G

@velasquez,

Qual o problema você está enfrentando?

wldomiciano

Eis uma solução:

char[] arrayPassword = strPassword.toCharArray();

if (arrayPassword[0] < arrayPassword[arrayPassword.length - 1]) {
  // Se o primeiro elemento for menor que o ultimo, então a ordem é crescente
} else {
  // Caso contrário, é decrescente
}

O código acima não contempla a situação em que o primeiro digito é igual ao último, mas vc disse que só a duas possibilidades, então acredito que será o suficiente.

V

Obrigado pelo retorno , gbueno
Meu problema é saber se o caminho esta correto e como melhorar a função.
Agradeço pela contribuição

V

wldomiciano,
Obrigado pelo retorno,
Por favor como estou iniciando no assunto aceito tod sugestão para melhorar minha idéia.
Agradeço pela contribuição.

G

Ah sim. Acho que você não estava no caminho errado, mas também não estava totalmente certo.

Fiz algumas modificações em sua implementação, veja abaixo:

public boolean validatePassword(String strPassword) {

    char[] arrayPassword = strPassword.toCharArray(); 
    boolean isValid = false;
    for (int i= 0; i < arrayPassword.length - 1; i++){
        if((arrayPassword[i] - arrayPassword[i + 1] == -1) || (arrayPassword[i] - arrayPassword[i + 1] == 1))
        {
            isValid = false;
        } 
        else 
        {
            isValid = true;
        }
    }
    return isValid;
}

Se tiver alguma duvida, manda ai…

V
Solucao aceita

@gbuenoo

Vou testar seu código.
Mais uma vez agradeço pela ajuda.

V

@wldomiciano
Obrigado novamente pela atenção.
Vou testar o seu código.
Espero permitir que a senha tenha apenas 2 digitos en sequência intercalados,

Ex: 040678
Vou tentar isto depois.

Criado 20 de março de 2020
Ultima resposta 20 de mar. de 2020
Respostas 7
Participantes 3