2015-09-26 88 views
0

问题:我想将当前用户与从列表中随机选择的另一个用户进行匹配。然而,这是logcat中给出了错误:每次尝试获取随机用户时发生java.lang.IndexOutOfBoundsException错误

java.lang.IndexOutOfBoundsException: Invalid index 18, size is 5 

    at package.packagename.FindingOpponentActivity$1.done(FindingOpponentActivity.java:190) 
    at package.packagename.FindingOpponentActivity$1.done(FindingOpponentActivity.java:78) 

相关线路,190和78分别为:

while (rand > mUsers.size() && mUsers.get(rand).hasSameId(mCurrentUser)) { 

    query.findInBackground(new FindCallback<ParseUser>() { 

完整的代码

query.findInBackground(new FindCallback<ParseUser>() { 
     @Override 
     public void done(List<ParseUser> users, ParseException e) { 
      setProgressBarIndeterminateVisibility(false); 


      if (e == null) { 
       //success! 
       public List<ParseUser> mUsers = users; 


     // case if there is just one user 

    else if (mUsers.size() >= 2) { 

     int rand = (int)(Math.random()*20); 
        while (rand > mUsers.size() && mUsers.get(rand).hasSameId(mCurrentUser)) { 
         rand = (int)(Math.random()*20); 
        } 
        mOpponentRelation.add(mUsers.get(rand)); 

        mOpponent = mUsers.get(rand); 
        mCurrentUser.saveInBackground(new SaveCallback() { 
         @Override 
         public void done(ParseException e) { 
          if (e != null) { 
           Log.e(TAG, e.getMessage()); 
          } 
         } 
        }); 

我试着用搜索引擎“如何获得随机用户解析android“,但我无法找到有用的东西。

回答

1
else if (mUsers.size() >= 2) { 
    Random random = new Random(); 
    int rand = random.nextInt(mUsers.size()); 
    while (mUsers.get(rand).hasSameId(mCurrentUser)) { 
     rand = random.nextInt(mUsers.size()); 
    } 
    mOpponentRelation.add(mUsers.get(rand)); 

    mOpponent = mUsers.get(rand); 
    mCurrentUser.saveInBackground(new SaveCallback() { 
     @Override 
     public void done(ParseException e) { 
      if (e != null) { 
       Log.e(TAG, e.getMessage()); 
      } 
     } 
    }); 
+0

工程就像一个魅力!谢谢 – Frosty619

1

用%,将迫使随机列表大小

一个例子代码:

... 
else if (mUsers.size() >= 2) { 

int rand = Math.random()%(mUsers.size()-1) ; 

... 

如果用户兰特exceds大小,你获得java.lang.IndexOutOfBoundsException

问候

+0

这从来没有跨过我的脑海,谢谢。 – Frosty619

0

我认为在while循环中应该是rand < mUsers.size()。不是>

+0

你能解释一下你的推理吗?如果我使用while(rand Frosty619

+0

你将不得不改变你的条件。它给了Arrayoutofbounds异常,因为如果rand大于mUsers.size(),那么您正试图向mUsers传递一个大于其大小的索引。换句话说,你正尝试访问不在数组中的东西 –

相关问题