Erro de lógica

7 respostas
tpiardi

O objetivo dessa classe, é encontrar quando dois ou quatro (tres e cinco não precisa) das posições do vetor tem o mesmo valor.

Apesar de algumas vezes indicar corretamente quando são encontrado 4 com valores iguais, algumas vezes dá o resultado errado.
Ainda não terminei de codar para encontrar dois valores iguais, mas sem saber onde está o erro, fico com receio de continuar e depois ter de refazer tudo.

public String[] Combine(int[] dGem){
        
        String[] dGemComb = new String[2];
        int GemAB = 0, GemAC = 0, GemAD = 0 , GemAE = 0;
        int GemBC = 0, GemBD = 0 , GemBE = 0;
        int GemCD = 0 , GemCE = 0;
        int GemDE = 0;
        int GemABCD = 0, GemABCE = 0, GemACDE = 0, GemABDE = 0;
        int GemBCDE = 0;
        
         // Compares to Gem A
                if ( dGem[0] == dGem[1])
                    GemAB = 1;
                if ( dGem[0] == dGem[2]) 
                    GemAC = 1;
                if ( dGem[0] == dGem[3])
                    GemAD = 1;
                if ( dGem[0] == dGem[4]) 
                    GemAE = 1;
                // Compares to Gem B
                if ( dGem[1] == dGem[2]) 
                    GemBC = 1;
                if ( dGem[1] == dGem[3])
                    GemBD = 1;
                if ( dGem[1] == dGem[4]) 
                    GemBE = 1;
                // Compares to Gem C
                if ( dGem[2] == dGem[3])
                    GemCD = 1;
                if ( dGem[2] == dGem[4]) 
                    GemCE = 1;
                // Compares to Gem D
                if ( dGem[3] == dGem[4]) 
                    GemDE = 1;
                
                if ( (GemAB == GemBC) && (GemAB == GemCD)) //A, B, C e D são iguais
                    GemABCD = 1;
                if ( (GemAB == GemBC) && (GemAB == GemCE)) 
                    GemABCE = 1;
                if ( (GemAC == GemCD) && (GemAC == GemDE)) 
                    GemACDE = 1;
                if ( (GemBC == GemCD) && (GemBC == GemDE)) 
                    GemBCDE = 1;
                if ( (GemAB == GemBD) && (GemAD == GemDE)) 
                    GemABDE = 1;

        if (GemABCD == 1 ^ GemABCE == 1 ^ GemACDE == 1 ^ GemABDE == 1 )
        {
            dGemComb[1]  = "";
         switch (dGem[0]) {  
                case 0 : dGemComb[0]  = "Amethyst";                             break;   
                case 1 : dGemComb[0]  = "Aquamarine";                           break;   
                case 2 : dGemComb[0]  = "Diamond";                              break; 
                case 3 : dGemComb[0]  = "Emerald";                              break;   
                case 4 : dGemComb[0]  = "Opal";                                 break;   
                case 5 : dGemComb[0]  = "Ruby";                                 break;
                case 6 : dGemComb[0]  = "Topaz";                                break;
                case 10 : dGemComb[0]  = "Flawless Amethyst";                   break;   
                case 11 : dGemComb[0]  = "Flawless Aquamarine";                 break;   
                case 12 : dGemComb[0]  = "Flawless Diamond";                    break; 
                case 13 : dGemComb[0]  = "Flawless Emerald";                    break;   
                case 14 : dGemComb[0]  = "Flawless Opal";                       break;   
                case 15 : dGemComb[0]  = "Flawless Ruby";                       break;
                case 16 : dGemComb[0]  = "Flawless Topaz";                      break;   
                case 20 : dGemComb[0]  = "Perfect Amethyst";                    break;
                case 21 : dGemComb[0]  = "Perfect Aquamarine";                  break;
                case 22 : dGemComb[0]  = "Perfect Diamond";                     break; 
                case 23 : dGemComb[0]  = "Perfect Emerald";                     break;   
                case 24 : dGemComb[0]  = "Perfect Opal";                        break;   
                case 25 : dGemComb[0]  = "Perfect Ruby";                        break;
                case 26 : dGemComb[0]  = "Perfect Topaz";                       break;
                case 30 : dGemComb[0]  = "Great Amethyst";                      break;   
                case 31 : dGemComb[0]  = "Great Aquamarine";                    break;   
                case 32 : dGemComb[0]  = "Great Diamond";                       break; 
                case 33 : dGemComb[0]  = "Great Emerald";                       break;   
                case 34 : dGemComb[0]  = "Great Opal";                          break;   
                case 35 : dGemComb[0]  = "Great Ruby";                          break;
                case 36 : dGemComb[0]  = "Great Topaz";                         break;                
                default: dGemComb[0]  = "";  
            }   
        }
        else if (GemBCDE == 1) {
            dGemComb[1]  = "";
            switch (dGem[1]) {  
                case 0 : dGemComb[0]  = "Amethyst";                             break;   
                case 1 : dGemComb[0]  = "Aquamarine";                           break;   
                case 2 : dGemComb[0]  = "Diamond";                              break; 
                case 3 : dGemComb[0]  = "Emerald";                              break;   
                case 4 : dGemComb[0]  = "Opal";                                 break;   
                case 5 : dGemComb[0]  = "Ruby";                                 break;
                case 6 : dGemComb[0]  = "Topaz";                                break;
                case 10 : dGemComb[0]  = "Flawless Amethyst";                   break;   
                case 11 : dGemComb[0]  = "Flawless Aquamarine";                 break;   
                case 12 : dGemComb[0]  = "Flawless Diamond";                    break; 
                case 13 : dGemComb[0]  = "Flawless Emerald";                    break;   
                case 14 : dGemComb[0]  = "Flawless Opal";                       break;   
                case 15 : dGemComb[0]  = "Flawless Ruby";                       break;
                case 16 : dGemComb[0]  = "Flawless Topaz";                      break;   
                case 20 : dGemComb[0]  = "Perfect Amethyst";                    break;
                case 21 : dGemComb[0]  = "Perfect Aquamarine";                  break;
                case 22 : dGemComb[0]  = "Perfect Diamond";                     break; 
                case 23 : dGemComb[0]  = "Perfect Emerald";                     break;   
                case 24 : dGemComb[0]  = "Perfect Opal";                        break;   
                case 25 : dGemComb[0]  = "Perfect Ruby";                        break;
                case 26 : dGemComb[0]  = "Perfect Topaz";                       break;
                case 30 : dGemComb[0]  = "Great Amethyst";                      break;   
                case 31 : dGemComb[0]  = "Great Aquamarine";                    break;   
                case 32 : dGemComb[0]  = "Great Diamond";                       break; 
                case 33 : dGemComb[0]  = "Great Emerald";                       break;   
                case 34 : dGemComb[0]  = "Great Opal";                          break;   
                case 35 : dGemComb[0]  = "Great Ruby";                          break;
                case 36 : dGemComb[0]  = "Great Topaz";                         break;                
                default: dGemComb[0]  = "";
                         
            } 
        }
        
            return dGemComb;
    }

7 Respostas

diego.sas

Bom dia tpiardi.
Está errado devido estar comparando String com ==, utilize equals para comparar valores de String…
Flw

tpiardi

Mas eu não estou comparando strings, todas as variaveis comparadas são do tipo int, se a int comparada for “selecionada” a função retorna uma string, mas a comparação em si é com int.

Ali onde citou eu não estou comparando estou atribuindo o valor a dGemComb.

Mas valeu de qualquer forma :slight_smile:

R

interessante, não parece dificil. eu faria diferente talvez. mas se a classe funcionasse toda ou funcionasse independente seria melhor de testar.

vejo vc usar comandos simples, vc é iniciante?

existem métodos talvez mais fáceis de usar, como vector
ou arrays, que tem métodos parecidos com ‘está contido’
Arraylist, coisa assim…

tenho um jogo da forca que faz esta análise, no caso das letras, acho que postei no guj… em todo caso, vale buscar por códigos de jogo da forca, é um pouco similar…

aqui tem um link do jogo da forca…

o meu programa acho que nao postei no guj, e o pior não sei onde está. vou procurar outra hora.

tpiardi

Raghy,

Sim, sou iniciante, estou começando a trabalhar com orientação a objetos só agora.
Esse joguinho. é o primeiro programa mais complexo que faço, estou codando ele mais para pegar experiência do que qualquer outra coisa.

Eu sequer sabia que já existiam metodos que fariam isso por mim, irei pesquisar esses que você citou e vou olhar o codigo do jogo de forca também.

Muito obrigado!

R

achei meu forca, mas para funcionar, falta uma biblioteca swing.

segue o código…

R

isto aqui tb é bacana de ver
:

R

ok dá uma olhada e posta seus resultados e progressos…

Criado 2 de dezembro de 2011
Ultima resposta 2 de dez. de 2011
Respostas 7
Participantes 3