内循环和外循环是否可以相继中断和恢复?

Can inner and outer loops interrupt and resume one after another?

我有一个现有循环,可以在两条水平线上绘制标签和文本框(第 1 行作为标签,第 2 行作为文本框)。当时的循环是基于明确要求每种类型的元素不会超过12个。这是使用两个循环编写的(一个循环代表标签,另一个代表文本框):

绘制标签

for (int i = 2, i<hdrlabel.length; i++){
coldef.add(new ColDefType("",hdrLabel[i],"varchar",false,15,"HDR"+String.valueOf(i),1,i==2?"%-25s":"",6,"LABEL",true,""));
}

绘制文本框

LinkedHashmap<String,String> row = dbVal.get(i)    
for (int j = 1, i<hdrlabel.length-1; i++){
        coldef.add(new ColDefType(j==1?row.get(hdrLabel[j]:"",row.get(hdrLabel[j+1],"decimal5",false,15,row.get(hdrLabel[0])+String.valueOf(j),i+2),j==1?"%-25s":"",6,"TXTFLD",true,""));
    }

现在,考虑到天数,每个组件类型的元素数量(在 hdrLabel.length-2 中)现在增加到最多 31 个。由于移动设备和平板电脑查看的间距问题,我们确定每行最多绘制 12 个元素是最好的。我要找的是,如果每种类型的元素个数超过12个,应该画成这样:

如果元素个数在15到24之间,则第5行和第6行的框和标签不需要绘制

有没有办法只使用两个循环,其中一个循环到达 12 / 24 元素时暂停一个循环,运行 另一个循环然后恢复前一个循环?

我找不到更精简的方法来做到这一点,因为我能得到的最接近的方法是将它分解为几个 for 循环,但如果给定最大元素的动态数量,它肯定效率不高:

不确定这是否是您想要的,因为它使用了 3 个循环,但至少它有效(假设您希望循环 1 始终先发生)

int i_start = 2;
int j_start = 1;
int i_terminate = 32;
int j_terminate = 32;
int next_i, next_j;
while (true) {
    next_i = Math.min(i_start + 12, i_terminate);
    next_j = Math.min(j_start + 12, j_terminate);
    for (int i = i_start; i < next_i; ++i) {
        // do something
    }
    
    for (int j = j_start; j < next_j; ++j) {
        // do something
    }

    i_start = next_i;
    j_start = next_j;

    if (i_start == i_terminate && j_start == j_terminate) {
        break;
    }
}