论坛首页 综合技术论坛

请教一个“产生表格行列座标”的算法思路

浏览 2128 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-27  
老大让我们写个算法,要求如下:

     假设存在一个二维表格,每个单元格可能占多行多列;
      单元格数据按单元格左上角行列顺序从小到大(先按行排序,后按列排序)
      保存在一个数组中;表格的列数已知,表格的行数未知,由单元格数组控制。
要求:设计一个算法计算出每个单元格的左上角X和Y座标,表格左上角座标从(1,1)开始。

我实现了一种简单的情况如下:
/**
*    计算单元格在表格中左上角的坐标 X Y (该方法仅仅适合于位于同一行上的所有单元格占行数相同的情况)
* 遍历单元格数组,判断单元格是否出现在同一行上,如是则变化X坐标,而Y坐标不变;
* 当要换行时,则Y坐标要变化,X坐标回到列开始坐标1,并记录坐标变化情况。
* @paran column    表格的列数
* @param cellList  表格中的所有单元数组
* @return relist   含有左上角坐标的新的单元数组
*/
public List generateIndex(int column ,List cellList ){
List relist = new ArrayList();
int cur_x = 1 ;         //起始X坐标值  且 1 =< cur_x <= column
int cur_y = 1 ;         //起始Y坐标值
for(int i = 0; i < cellList.size(); i++){
Cell vcell = (Cell)cellList.get(i);
if(cur_x != column + 1){
vcell.setIndexX(cur_x);
cur_x += vcell.getColspan();
vcell.setIndexY(cur_y);
relist.add(vcell);
}else{ 
//新换行
vcell.setIndexX(1); 
cur_x = 1 + vcell.getColspan();
cur_y += vcell.getRowspan();
vcell.setIndexY(cur_y);
relist.add(vcell);
}
}

return relist ;
}

但是更加复杂的情况(如下描述),我却没有思路,还请各位大侠给点思路,能给个代码更好,先谢谢了。
/**
*    计算单元格在表格中左上角的坐标 X Y (该方法仅仅适合于所有单元格占行数占列数动态变化的情况)
* 这种情况很复杂,类型很多,我们可以抽象出一种我们经常遇到的情形:就是多个单元格行合并不存在跨行交差情况,
* 就是所有‘行’以占行最大的那个单元格为准来计算
* @paran column    表格的列数
* @param cellList  表格中的所有单元数组
* @return relist   含有左上角坐标的新的单元数组
*/
public List generateIndex2(int column ,List cellList ){
List relist = new ArrayList();
......
                  ......
return relist ;
}
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics