内外循环能否相继中断和恢复



我有一个现有的循环,它在两条水平线上绘制标签和文本框(第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,那么它应该被绘制为:

  • 第1行:标签1-12
  • 第2行:文本框1-12
  • 第3行:标签13-24
  • 第4行:文本框13-24
  • 第5行:标签25-31
  • 第6行:文本框25-31

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

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

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

  • 第1行-(对于i=2,i<14,i++(-在13处中断
  • 第2行-(对于j=1,j<13,j++(-在12处中断
  • 第3行-(对于i=14,i<26,i++(-在26处中断
  • 第4行-(对于j=13,i<25,i++(-在25处中断
  • 第5行-(对于i=26,i<hdrLabel.length,i++(-在31处中断
  • 第6行-(对于j=25,i<hdrLabel.length-1,i++(-在31处中断

不确定这是否是您想要的,因为它使用了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;
}
}

最新更新