2013-04-10 104 views
0

我有一款Android游戏正在开发中。我已经完成了大部分工作,但是刚刚注意到了一个错误,我不能总是复制,而这正如你所知,这使得它成为调试的噩梦!我相信它是一个逻辑问题,但我一直盯着它看很久,我看不到它。这是一个排序的数组代码:阵列有时无法正常工作

// 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; 
     } 
    } 

我有18个允许字母的数组(在应用程序)。第一个循环(显然)只是挑选一些随机字母。第二个循环确保最终的18个字母中至少包含一个被猜测的单词。

问题是:大多数时候它的工作原理是完美无瑕的。在看似随机的时间间隔内,最终阵列将会丢失被猜测的单词中的一个字母。它并不总是在这个词的同一个地方。

任何人都可以看到我的逻辑问题吗?如果我错过了一个重要的难题,我很乐意提供更多的信息和代码!

TIA。

+0

我猜他们已经被打乱那'字母[]'是一个字母数组? – 2013-04-10 16:02:09

+0

不,字母[]是我的Letter类的数组。我会后的变数太多: \t'私人最终诠释MAX_LETTERS = 18;'\t \t'私信[] =字母新信函[26];' \t'私信[] lettersToUse =新函[MAX_LETTERS] ;' – LokiSinclair 2013-04-10 16:05:10

+2

添加变量的问题,而不是作为评论 – 2013-04-10 16:09:19

回答

2

这种方法似乎简单了很多:

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 

然后确保你有你的话加18的其余部分都充满了随机的,并且