好吧我正在使用getSharedPreferences来存储我的高分,但是在我填写之前我想通过和数组将分数按升序排序,但是如果它在第一个pos中找到的分数小于它,那么它不会检查其余的最小的?
//function to add score to array and sort it public voID addscoretoarray(int mscore){ for(int pos = 0; pos< score.length; pos++){ if(score[pos] > mscore){ //do nothing }else { //Add the score into that position score[pos] = mscore; break; } } sortArray(score);}
我应该在循环之前和之后调用sortArray()来解决这个问题,还是有更好的方法来实现相同的结果?
我还要提一下,sortArray(score)函数只是调用Arrays.sort(得分)
得分是mscore的数组
编辑:
根据@vincent RamdhanIE发布的内容,我修改了帖子:
public voID addscoretoarray(int mscore){ int pos = score.length; //sort the array (in ascending order) sortArray(score); //go though the array( in descending order) and check for a place that suits the conditions while(pos>=0 && score[pos] > mscore){ pos--; //do nothing as score[pos] is larger than mscore } //so once a pos is found (e.g. broke out of the while loop) //check that it is still in the List if(pos >= 0){ //if it is then move everything down 1 position for(int i = 0; i < pos; i++){ score[i] = score[i+1]; } //replace the initial pos with the new score score[pos] = mscore; }}
我仍然相信它会在for(int i = 0; i< pos; i){loop}时从列表中删除.
解决方法:
为什么不保持分数数组排序.因此,您对数组的添加分数将假定数组始终按降序排序.要插入的新分数将简单地在插入时从阵列中取出最低分.然后,您可以使用这样的插入算法:
insertscore(int[] scores, int mscore){ //find insert point int i = 0; while(i < scores.length && scores[i] > mscore){ i++; } if(i < scores.length){ //you found a place to insert the score for(int j = scores.length-1; j > i; j--){ scores[j] = scores[j - 1]; } scores[i] = mscore; } }
在这种情况下,不需要求助于阵列.
总结以上是内存溢出为你收集整理的java – 将元素插入到排序列表中全部内容,希望文章能够帮你解决java – 将元素插入到排序列表中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)