为什么我无法打破我的外循环?

时间:2018-02-27 05:12:38

标签: java android loops for-loop label

请查看以下Android代码

public void setTitles(final List<AppDataBean> appDataBeanList){
        dataBeanArrayList = new ArrayList<DataBean>();
        outer:for(a=0;a<appDataBeanList.size();a++)
        {
            appDataBeanListIndex=a;
            //Get data from the Bean list
            final AppDataBean appDataBean = appDataBeanList.get(a);
            if (InternetConnectivity.isConnectedToInternet(context)==true){
                try {
                    LinkReader linkReader = new LinkReader();
                    linkReader.onFinish(new LinkReader.OnTaskCompleted() {
                        @Override
                        public void onTaskCompleted(ArrayList<DataBean> list) {
                            inner:for (int i = 0; i < list.size(); i++) {
                                if (InternetConnectivity.isConnectedToInternet(context)== true){
                                    //Gather all information into DataBean
                                    DataBean dataBean = new DataBean();
                                    dataBean.setTitle(list.get(i).getTitle());

                                    //Add the DataBean to the bean list
                                    dataBeanArrayList.add(dataBean);


                                }

                                if(i==4)
                                {
                                    break outer;;
                                }
                            }
                        }
                        @Override
                        public void onError() {
                        }
                    });
                }
                catch(NullPointerException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }

在此处,请注意我将for循环标记为outerinner的方式。在第二个循环中,我试图在满足某个条件时打破outer循环,但它不起作用,因为它给出了编译错误&#34; undefined label: outer&#34;。

这是为什么?我尝试将outer内容用花括号括起来,然后覆盖inner部分,我尝试没有花括号,同样的错误。

1 个答案:

答案 0 :(得分:1)

来自Oracle docs

  

break语句终止带标签的语句;它不是   将控制流转移到标签上。控制流程被转移   紧接着标签后的声明(终止)   言。

表示您不能将其视为goto

This帖子给出了以下示例:

first:
for( int i = 0; i < 10; i++) {
  second:
  for(int j = 0; j < 5; j ++ )
  {
    break xxx;
  }
}

third:
for( int a = 0; a < 10; a++) {

}

您可以将xxx替换为firstsecond,因为两个循环都在执行,但将xxx替换为第三个将无法编译。

现在你的情况,在这里创建了anonymous inner class

linkReader.onFinish(new LinkReader.OnTaskCompleted() {
                        @Override
                        public void onTaskCompleted(ArrayList<DataBean> list) {

并且你试图在这个内部类的范围内打破:

if(i==4)
{
   break outer;
}

如果你将你的病情移到这个内部类的范围之外,那就可以了。