2017-10-10 64 views
-1

我遇到以下代码有问题。在Android中从Java列表中删除项目

我正在获取项目的索引并使用它。现在我想从列表中删除它的位置,以便它不再获得相同的位置,但是当我调用应用程序崩溃下的方法时,以及当我删除行myList.remove(randomIndex);时,它运行良好。 这条线有什么问题吗?

public void showtime() { 

    Random rand = new Random(); 
    randomIndex = rand.nextInt(myList.size()); 

    randomName = myList.get(randomIndex); 
    txtView.setText(randomName); 

    if (randomIndex==1)) { 
     imgLabel.setImageResource(R.drawable.Label1); 
    } 
    if (randomIndex==2)) { 
     imgLabel.setImageResource(R.drawable.Label2); 
    } 
    if (randomIndex==3)) { 
     imgLabel.setImageResource(R.drawable.Label3); 
    } 

    myList.remove(randomIndex); 
    } 
+10

粘贴错误日志请... –

+0

这很难说,没有更多的信息,但我怀疑名单的规模正在在你的代码缓存的地方和应用程序试图访问的最后一个元素是不是该位置了(又名IndexOutOfBoundsException)。 – Thomas

+2

你的代码甚至不会像这样编译:(randomIndex == 3)) –

回答

0

当你去除列表中的项目,以便确保它不应该是列表它必须是ArrayList的 请试试这个....

+0

是什么让你觉得他没有使用'ArrayList'? –

+0

他没有提到它,我告诉过,因为一旦我也面临同样的问题... –

+1

这可能已被张贴为评论,它不是直接回答问题是什么,而是一个不准确的假设。 –

0

确保:

1- myList中是一个ArrayList;

2 - 当这个方法被调用时,myList中几乎元素

的每一个你的if语句有语法错误。他们有一个额外的)

if (randomIndex==1) { 
    imgLabel.setImageResource(R.drawable.Label1); 
} 
if (randomIndex==2) { 
    imgLabel.setImageResource(R.drawable.Label2); 
} 
if (randomIndex==3) { 
    imgLabel.setImageResource(R.drawable.Label3); 
} 
-1

它应该

randomIndex = rand.nextInt(myList.size()); 
+0

从[Java随机API](https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt-int - ):'返回一个伪随机数,均匀分布的int值在0(包含)和指定值(不包括)之间,从这个随机数生成器的序列中抽取。'这个'-1'是错误的! – Charliemops

-1

您可以检查所生成的索引列表范围内,避免这样

崩溃
randomIndex = rand.nextInt(myList.size()-1); 

if(randomIndex <= myList.size()-1){ 
myList.remove(randomIndex) 
}; 
+0

从[Java随机API](https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt-int-):'返回一个伪随机数,均匀分布的int值0(包含)和指定的值(不包括),从这个随机数发生器的序列中抽取。'这个'-1'是错误的! – Charliemops