Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么赢了';名单不是空的吗?_Java_Android_Eclipse - Fatal编程技术网

Java 为什么赢了';名单不是空的吗?

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

我试图清空列表,这意味着删除所有项目。根据我的教授,我应该手动跟踪for循环。我知道,随着每个项目被删除,大小会发生变化,但我不明白这与问题有什么关系。顺便说一句,正如您在下面看到的代码一样,它们都位于一个独立于main活动的活动中。以下是我正在编写的代码:

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