当前位置: 首页 > 知识库问答 >
问题:

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

钱钊
2023-03-14

我有一个现有的循环,在两条水平线上绘制标签和文本框(第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循环,但如果给定max元素的动态数量,它肯定没有效率:

  • 第1行-(对于i=2,i

共有1个答案

平山
2023-03-14

不确定这是否是您想要的,因为它使用了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;
    }
}
 类似资料:
  • 问题内容: 在以下python代码中: 我得到: 为什么? 问题答案: 因为break不能用于中断if-它只能中断循环。这就是指定Python(和大多数其他语言)运行的方式。 你想做什么?也许您应该使用还是代替?

  • 例如,我在golang中进行了以下测试: 如果我尝试构建它,我会收到以下内容: 有没有办法让编译器内联?如果是,是否有任何方法可以内联映射迭代?

  • 您认为这样的迭代器嵌套是好还是坏? 上下文:for循环版本中断,因为我在for循环中使用同义词的同时附加同义词。 或者,在for循环版本中,我可以复制HashMap 非常感谢。 下面是一个更好的例子。 目前正在考虑使用HashMap.size()用for循环替换第一个itr,这样当我稍后追加HashMap时就不会中断。 非常感谢。

  • 问题内容: 给定以下代码示例: 这是一个有效的Java程序,尽管doSomething()方法应返回一个int,但永远不会返回。如果运行它,它将以无限循环结束。如果将while循环的参数放在单独的变量中(例如boolean bool = true),则编译器将告诉您在此方法中返回int。 所以我的问题是:这在Java规范中是否存在,是否存在这种行为可能有用的情况? 问题答案: 我将引用Java语言

  • 问题内容: 如何在响应Swift中的语句的嵌套结构中打破外部循环? 例如: 将只会让我离开的,而在斯威夫特,它具有为空的情况下不得使用。如何完全从中退出循环? 问题答案: Swift允许带标签的语句。使用带标签的语句,无论嵌套循环的深度如何,您都可以指定要从哪个控制结构开始(尽管从可读性的角度来看,通常嵌套越少越好)。这也适用于。 例:

  • 我有这个代码: outlets是传递给方法的ArrayList;riverBasin是int(int[]riverBasin)的2D“矩阵”; 从ArrayList outlets中删除“项”会生成错误: 但我并不完全理解。然而,我怀疑我弄坏了迭代器。对的那么我如何删除ArrayList中不需要的元素呢。 提前感谢您的帮助, 里卡多