2013-04-10 3 views
0

J'ai un jeu en développement pour Android. Je l'ai en grande partie opérationnel, mais j'ai juste remarqué un bug, que je ne peux pas toujours répliquer, ce qui (comme vous le savez) en fait un cauchemar à déboguer! Je suis sûr que c'est un problème de logique, mais je l'ai regardé si longtemps que je ne peux pas le voir. C'est le code qui trie les tableaux:Array parfois ne fonctionne pas comme prévu

// RANDOMISE UP SOME LETTERS // 
    for(int i=0; i<MAX_LETTERS; i++) 
    { 
     int r = rand.nextInt(25);  

     // SAVE THIS LETTER // 
     lettersToUse[i] = letters[r];   
    }  

    // NOW MAKE SURE WE COPY IN OUR WORD // 
    for(int i=0; i<nameLen; i++) 
    { 
     int r = rand.nextInt(MAX_LETTERS); 

     Letter tmpLetter = new Letter(); 
     tmpLetter = letters[lettersInName[i]];      

     while(in_array(lastElementsUsed, r)) 
     { 
      r = rand.nextInt(MAX_LETTERS); 
     } 

     lastElementsUsed[i] = r;    

     if(!in_array(lettersToUse, tmpLetter.getLetter())) 
     {    
      lettersToUse[r] = tmpLetter; 
     } 
    } 

J'ai un tableau de 18 lettres autorisées (dans l'application). La première boucle (évidemment) prend juste une charge de lettres aléatoires. La deuxième boucle, assure alors qu'au moins une lettre du mot à deviner est incluse dans les 18 lettres finales.

Le problème est: La plupart du temps, cela fonctionne parfaitement. À des intervalles apparemment aléatoires, le tableau final manquera une lettre du mot à deviner. Ce n'est pas toujours au même endroit dans le mot non plus.

Quelqu'un peut-il voir un problème avec ma logique? Je suis heureux de donner plus d'informations et de code, si j'ai manqué une pièce vitale du puzzle!

TIA.

+0

Je devine que 'letters []' est un tableau alphabet? –

+0

Non, letters [] est un tableau de ma classe Letter. Je posterai les variables aussi: \t 'finale privée int MAX_LETTERS = 18;' \t \t 'Lettre privée [] lettres = new Letter [26];' Lettre privée \t '[] = new lettersToUse Lettre [MAX_LETTERS] ; ' – LokiSinclair

+2

Ajouter les variables à la question plutôt que comme un commentaire –

Répondre

2

Cette méthode semble beaucoup plus simple:

for (int i=0; i<(MAX_LETTERS-wordLength); i++) 
{ 
    int r = rand.nextInt(25);  

    // SAVE THIS RANDOM LETTER // 
    lettersToUse[i] = letters[r];   
} 
for (int i=MAX_LETTERS-wordLength; i<MAX_LETTERS; i++) 
{ 
    // SAVE THIS LETTER OF THE WORD // 
    lettersToUse[i] = lettersInName[r]; //I think that lettersInName is the right variable name to use, hopefully you understand what I'm trying to do here   
} 
lettersToUse.shuffle() //or similar method for whatever array type you're using 

qui assure alors vous avez votre mot plus le reste du 18 sont remplis avec les aléatoires, et ils ont été mélangées

Questions connexes