在java中循环列表

时间:2011-12-25 22:39:24

标签: java

我有一个简单的java语句:

    String[] ykl = yklList.get(0).split(" ");  

其中,yklList是包含被分成单词的句子的ArrayList。以上工作正常。

当我现在尝试循环时:

Loop:1
for (int i=0;i<=4;i++)
{
  String[] ykl = yklList.get(i).split(" ");
}

它似乎不起作用,并抛出一个编译错误。以上循环是错误的吗?

在上面之后我有另一个for循环:

Loop:2
for (String ykl : yklList)
{
//do something
}

这引发了一个编译错误:

cannot find symbol
symbol  : variable ykl
location: class test
for (String ykl : yklList) 

据推测,Loop 1在某处出错了?

修改

“完整”代码如下所示:

for (int i=0;i<=yklList.size()-1;i++)
{
String[] ykl = yklList.get(i).split(" ");  

}       
for (String y : ykl)  
{  
t.add(y);  
}   

,错误是:

cannot find symbol
symbol  : variable ykl
location: class test
for (String y : ykl) 

4 个答案:

答案 0 :(得分:4)

关于您的更新:

您在第一个循环中定义ykl。所以变量不在第二个循环的范围内。您的代码必须如下所示:

for (String yklSentence : yklList) {
   String[] ykl = yklSentence.split(" ");  
   for (String y : ykl) {  
     t.add(y);  
   } 
}

顺便说一句:如果您使用像Eclipse这样的IDE,您会在编辑器中看到这些错误!

答案 1 :(得分:1)

在你的附录中,第二个循环不知道变量ykl,如前一个循环中所定义的,在离开之后 - 它被销毁。

如果没有删除变量 - 一段时间后所有可用的计算机内存都将被填满,这将导致程序错误。如果只给你机会dal不必要的变量 - 这允许你忘记删除不需要的变量和内存的情况,再次,将是满的。在这种情况下,Java简化了开发过程,无法考虑你的内容然后不会被删除。

纠正错误:

ArrayList <String> yklList = new ArrayList <String> ();
ArrayList <String> t = new ArrayList <String> ();

for (int i = 0; i <yklList.size (); i + +)
         {
             String [] ykl = yklList.get (i). Split ("");
             for (String y: ykl)
                 t.add (y);
         }

或: 如果你绝对填写yklList的所有字符t:

ArrayList<String> yklList = new ArrayList<String>();
ArrayList<String> t = new ArrayList<String>();

        String[] ykl = new String[0];

        for (int i=0;i<yklList.size();i++) {
            String[] tempYkl = yklList.get(i).split(" ");
            String[] tempYklDub = new String[tempYkl.length];
            String[] tempYklDubDub = new String[ykl.length];
            for (int z=0; z< tempYkl.length; z++)
                tempYklDub[z] = tempYkl[z];
            for (int z=0; z<ykl.length; z++)
                tempYklDubDub[z]=ykl[z];
            ykl = new String[tempYklDubDub.length+tempYklDub.length];
            for (int z=0; z<tempYklDubDub.length; z++)
                ykl[z]=tempYklDubDub[z];
            for (int z=tempYklDubDub.length, k=0; k<tempYklDub.length; z++, k++)
                ykl[z]=tempYklDub[k];
        }
        for (String y : ykl)
            t.add(y);

答案 2 :(得分:0)

你应该确保循环正确的元素数。
尝试使用size()作为ArrayList:

for (int i=0;i<ykl.size();i++)
{
  String[] ykl = yklList.get(i).split(" ");
}

请记住,每个周期都会覆盖您的ykl数组。在循环之外定义它可以解决这个问题。

修改 尝试

String[] ykl = new String[ykl.size()];
for (int i=0;i<ykl.size();i++)
{
  ykl[i] = yklList.get(i).split(" ");
}

for (String y : ykl)  
{  
t.add(y);  
} 

答案 3 :(得分:0)

如果我理解正确,你的yklList元素少于4个。 并且,在下一次迭代中,它尝试从yklList

之外获取一个元素

问题的解决方案:

for (int i = 0; i <yklList.size(); i + +) {
    String[] ykl = yklList.get(i).split(" ");
}

for (String yklListDub: yklList) {
    String[] ykl = yklListDub.split(" ");
}

P.S。我很抱歉我的英语)