Java 为什么赢了';名单不是空的吗?
我试图清空列表,这意味着删除所有项目。根据我的教授,我应该手动跟踪for循环。我知道,随着每个项目被删除,大小会发生变化,但我不明白这与问题有什么关系。顺便说一句,正如您在下面看到的代码一样,它们都位于一个独立于main活动的活动中。以下是我正在编写的代码:Java 为什么赢了';名单不是空的吗?,java,android,eclipse,Java,Android,Eclipse,我试图清空列表,这意味着删除所有项目。根据我的教授,我应该手动跟踪for循环。我知道,随着每个项目被删除,大小会发生变化,但我不明白这与问题有什么关系。顺便说一句,正如您在下面看到的代码一样,它们都位于一个独立于main活动的活动中。以下是我正在编写的代码: public void removeAll(View view) { //Declare the reference StringList the_list; int i; //Access the s
public void removeAll(View view)
{
//Declare the reference
StringList the_list;
int i;
//Access the singleton list class
the_list = StringList.getInstance();
//Try to remove all items in the list
try
{
//Look through the list to remove each item
for(i = 0; i <= the_list.size(); i++)
{
the_list.remove(i);
}
Toast.makeText(RemoveAllActivity.this, "All items are removed successfully!",
Toast.LENGTH_SHORT).show();
}
catch(IndexOutOfBoundsException e)
{
Toast.makeText(RemoveAllActivity.this, "Error: Removing all items have failed!",
Toast.LENGTH_SHORT).show();
}
}
如果您想知道singleton list类的外观:
public final class StringList extends LinkedList<String>
{
private static StringList instance = null;
private StringList()
{
// Exists only to defeat additional instantiations.
}
public static StringList getInstance()
{
if(instance == null)
instance = new StringList();
return instance;
}
} // end StringList
公共最终类StringList扩展了LinkedList
{
私有静态StringList实例=null;
私有字符串列表()
{
//存在只是为了阻止其他实例化。
}
公共静态StringList getInstance()
{
if(实例==null)
实例=新的StringList();
返回实例;
}
}//结束字符串列表
手动循环列表可能是错误的方法。此方法存在的原因如下:。停止尝试重新发明轮子,只需调用\u list.clear()
旁注:Java风格的约定强烈反对在变量名中使用下划线。它应该是
列表
而不是列表
您应该为此使用迭代器(如果您不想使用clear()):
比如(非常粗糙):
有关示例,请参见:您在列表中按索引删除,并在每个步骤中重新计算
大小,最后不删除列表的后半部分
由于您的列表是一个链接列表
,您可以继续删除列表的标题,直到没有更多元素:
while (the_list.isEmpty()) {
the_list.remove();
}
或者更简单,使用clear()
方法:
the_list.clear();
但是,如果您确实想循环所有元素并使用大小,可以从最后一个元素开始,但这可能不是很有效,因为您将在每个循环中遍历列表-通过索引访问最后一个元素:
for(int i = the_list.size() -1; i >= 0; i--) {
the_list.remove(i);
}
不要费心用编程的方式去做
只需使用列表中的“清除”方法即可
例如:the_list.clear()代码>为什么不使用列表。清除();另外,试着养成遵循Java
命名惯例的习惯。i@philogenesis是正确的。假设列表中有4个元素0,1,2,3
。你删除0
然后大小是3,i
是1,然后你删除2
并且大小是2,但是i
也是2,1
和3
保留在列表中什么?教授告诉他他正在清除错误,但试图让他理解为什么他的方法是错误的。ConcurrentModificationException
s是由不支持修改的迭代器抛出的。他没有使用迭代器,所以也不例外。如果他在为(字符串s:the_list)
做,他可能会得到例外。@Phylogenesis,根据问题:根据我的教授,我应该手动跟踪for循环。这不是告诉他他做错了,而是告诉他做错事。它告诉他去看看循环中发生了什么(在调试器中或只是在纸上),看看他为什么做错了什么。手动跟踪就是这个意思,我不同意。但是无论哪种方法,清除方法都是正确的。
the_list.clear();
for(int i = the_list.size() -1; i >= 0; i--) {
the_list.remove(i);
}