Mesmo valor sendo menor, entra na condição

4 respostas
programação
MatheusDalZot

Boa tarde pessoal, estou com um problema, tentando fazer um sistema de ranking, porém mesmo o valor sendo menor que o valor atual, ele entra na Condição e Substitui.

No meu sistema ele varre todo o banco de dados e pega o valor do “Record” de cada usuário, ai depois ele compara com os valores das posições do ranking de 1 a 10, se o valor atual do Record for maior que o atual da posição, então ele entra e toma forma, caso não seja maior, ele vai para o próximo teste… Porém sempre o valor Record da última conta, sobrepõe todos os outros

for (int gid = 1; gid < MAX_CONTAS; gid++) { //--------- Compara e Seta dados se os ids forem iguais

nomeRecorde[gid] = dadosuser.get("nome");
recordRecorde[gid] = dadosuser.get("record");
nomeRecorde[idcompare] = dadosuser.get("nome");
recordRecorde[idcompare] = dadosuser.get("record");

int recordgid = recordRecorde[gid].hashCode();
String nomegid = nomeRecorde[gid].toString();
int recorduser = recordRecorde[idcompare].hashCode();
String nomeuser = nomeRecorde[idcompare].toString();

if (recorduser > ranking[0]) {
    Log.d("ranking", "VALORES Rank 01: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[0]+"Antes");
    ranking[0] = recorduser;
    nRanking[0] = nomeuser;
    txtPoss[0].setText("  1 | " + nRanking[0] + " | Recorde: R$" + ranking[0]);
    Log.d("ranking", "VALORES Rank 01: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[0]+"Depois");
} else if (recordgid > ranking[1]) {
    ranking[1] = recordgid;
    nRanking[1] = nomegid;
    txtPoss[1].setText("  2 | " + nRanking[1] + " | Recorde: R$" + ranking[1]);
    Log.d("ranking", "VALORES Rank 02: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[1]);
} else if (recordgid > ranking[2]) {
    ranking[2] = recordgid;
    nRanking[2] = nomegid;
    txtPoss[2].setText("  3 | " + nRanking[2] + " | Recorde: R$" + ranking[2]);
    Log.d("ranking", "VALORES Rank 03: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[2]);
} else if (recordgid > ranking[3]) {
    ranking[3] = recordgid;
    nRanking[3] = nomegid;
    txtPoss[3].setText("  4 | " + nRanking[3] + " | Recorde: R$" + ranking[3]);
    Log.d("ranking", "VALORES Rank 04: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[2]);
} else if (recordgid > ranking[4]) {
    ranking[4] = recordgid;
    nRanking[4] = nomegid;
    txtPoss[4].setText("  5 | " + nRanking[4] + " | Recorde: R$" + ranking[4]);
    Log.d("ranking", "VALORES Rank 05: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[2]);
} else if (recordgid > ranking[5]) {
    ranking[5] = recordgid;
    nRanking[5] = nomegid;
    txtPoss[5].setText("  6 | " + nRanking[5] + " | Recorde: R$" + ranking[5]);
    Log.d("ranking", "VALORES Rank 06: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[2]);
} else if (recordgid > ranking[6]) {
    ranking[6] = recordgid;
    nRanking[6] = nomegid;
    txtPoss[6].setText("  7 | " + nRanking[6] + " | Recorde: R$" + ranking[6]);
    Log.d("ranking", "VALORES Rank 07: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[2]);
} else if (recordgid > ranking[7]) {
    ranking[7] = recordgid;
    nRanking[7] = nomegid;
    txtPoss[7].setText("  8 | " + nRanking[7] + " | Recorde: R$" + ranking[7]);
    Log.d("ranking", "VALORES Rank 08: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[2]);
} else if (recordgid > ranking[8]) {
    ranking[8] = recordgid;
    nRanking[8] = nomegid;
    txtPoss[8].setText("  9 | " + nRanking[8] + " | Recorde: R$" + ranking[8]);
    Log.d("ranking", "VALORES Rank 09: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[2]);
} else if (recordgid > ranking[9]) {
    ranking[9] = recordgid;
    nRanking[9] = nomegid;
    txtPoss[9].setText(" 10 | " + nRanking[9] + " | Recorde: R$" + ranking[9]);
    Log.d("ranking", "VALORES Rank 10: ID: " + idcompare + "User"+recorduser+" = GID: " + gid + " Record: " + recordgid + " Rank Valor:" + ranking[2]);
}

//Log.d("ranking", "VALORES Rank 02: ID"+idcompare+" = GID "+gid+" = CID  -  > " + ranking[1] );

}

Valores das saídas que utilizei para saber e testar:

teste => {maior_nivel=1, registrado=true, nome=teste, id=1, dinheiro=18, senha=teste, email=teste, cliques=15, total_ganho=18, record=25} ANTES DO FOR
VALORES Rank 01: ID: 1User25 = GID: 1 Record: 25 Rank Valor:0Antes
VALORES Rank 01: ID: 1User25 = GID: 1 Record: 25 Rank Valor:25Depois
VALORES Rank 02: ID: 1User25 = GID: 2 Record: 25 Rank Valor:25
VALORES Rank 03: ID: 1User25 = GID: 3 Record: 25 Rank Valor:25
teste 02 => {maior_nivel=1, registrado=true, nome=teste 02, id=2, dinheiro=22, senha=teste 02, email=teste te te, cliques=11, total_ganho=22, record=50} ANTES DO FOR
VALORES Rank 01: ID: 2User50 = GID: 1 Record: 50 Rank Valor:0Antes
VALORES Rank 01: ID: 2User50 = GID: 1 Record: 50 Rank Valor:50Depois
VALORES Rank 02: ID: 2User50 = GID: 2 Record: 50 Rank Valor:50
VALORES Rank 03: ID: 2User50 = GID: 3 Record: 50 Rank Valor:50
teste03 => {maior_nivel=1, registrado=true, nome=teste03, id=3, dinheiro=42, senha=03, email=03, cliques=32, total_ganho=42, record=35} ANTES DO FOR
VALORES Rank 01: ID: 3User35 = GID: 1 Record: 35 Rank Valor:0Antes
VALORES Rank 01: ID: 3User35 = GID: 1 Record: 35 Rank Valor:35Depois
VALORES Rank 02: ID: 3User35 = GID: 2 Record: 35 Rank Valor:35
VALORES Rank 03: ID: 3User35 = GID: 3 Record: 35 Rank Valor:35

4 Respostas

darlan_machado

Não, apenas inicializa uma variável chamada gid como 1 e vai incrementando a mesma até que seu valor seja igual a MAX_CONTAS - 1.

Por que você não ordena o resultado da consulta ao banco pelo record e já resolve isso, sem a necessidade daquelas comparações todas?

MatheusDalZot

Boa tarde, como eu poderia fazer isso no Android Studio?

Tentei pesquisar, porém tudo resulta em MySQL, e estou utilizando no momento o Database Cloud Firestore/Firebase.

Tem como realizar esse procedimento? Pois estou a dois dias já quebrando a cabeça hehe

Obrigado

darlan_machado

Cara, você está usando java 8?
Se sim, você pode colocar os elementos obtidos na busca no Firebase em uma List e, então, usando Stream, ordenar os mesmos. Não é difícil.
Se não for, você pode fazer a ordenação manualmente mesmo.

MatheusDalZot

Olá eu estou usando o Java do Android Studio, não sei bem ao certo qual versão é,
a questão agora é que não estou conseguindo aplciar o orderBy, ele não está funcionando ou eu não estou sabendo lidar com isso.

public void lerDados(View view){

db.collection("users").whereEqualTo("registrado", true).get() // Verifica se o usuario ta cadastrado
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if(task.isSuccessful()){
                for(final QueryDocumentSnapshot document: task.getResult()) {
                    db.collection("zotinfo").document("contastapball").get() // Verifica a quantia de contas cadastradas
                    .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                        @Override
                        public void onSuccess(DocumentSnapshot documentSnapshot) {
                            if (documentSnapshot.exists()) {

                                int MAX_CONTAS, idultima;
                                Object idult;

                                Map<String, Object> idultimaconta = documentSnapshot.getData();
                                idult = idultimaconta.get("ID_ULTIMA_CONTA");
                                idultima = idult.hashCode();
                                MAX_CONTAS = idultima;


                                //Map<String, Object> dadosuser = document.getData();
                                Map<String, Object> dadosuser = document.getData();


                                //document.orderBy("record", Direction.DESCENDING).limit(10);
                                Log.d("ranking", document.getId() + " => " + document.getData() + " ANTES DO FOR"); // Mostra os dados dos usuarios no LOG

                                for (int i = 1; i < MAX_CONTAS; i++) {
                                    //document.orderBy("record", Direction.DESCENDING).limit(10).get();
                                    txtPoss[i - 1].setText(" " + (i) + " | " + document.getId() + " | Recorde: R$" + dadosuser.get("record"));
                                }
                            }
                        }
                    });
                }
            } else {
                Log.d("ranking", "Error: ", task.getException());
            }
        }
    });
}
Criado 20 de setembro de 2018
Ultima resposta 20 de set. de 2018
Respostas 4
Participantes 2