Program: 70155
Project: 70155
Buggy source:
private void caleColumnWidth(){
  int size=data.columnWidths.length;
  int containerWidth=getLayoutWidth();
  containerWidth=Math.max(0,containerWidth);
  int totalColumn=0;
  int forceCount=size;
  for (int i=0; i < size; i++) {
    ColumnData cData=data.columnWidths[i];
    if (cData.isPercentage) {
      cData.trueMinColumnWidth=(int)(containerWidth * cData.percentageWidth / 100);
      totalColumn=totalColumn + cData.trueMinColumnWidth;
      cData.width=cData.trueMinColumnWidth;
      forceCount--;
    }
 else     if (cData.isForce) {
      totalColumn=totalColumn + cData.trueMinColumnWidth;
      cData.width=cData.trueMinColumnWidth;
      forceCount--;
    }
  }
  if ((!getOwner().isForceWidth()) && forceCount == 0) {
    return;
  }
  if (totalColumn >= containerWidth) {
    for (int i=0; i < size; i++) {
      ColumnData cData=data.columnWidths[i];
      if (!cData.isForce) {
        cData.width=ALLOW_COLOUMN_WIDTH;
        cData.trueMinColumnWidth=ALLOW_COLOUMN_WIDTH;
      }
    }
  }
 else {
    int moreWith=containerWidth - totalColumn;
    int argaWith;
    int others;
    if (forceCount == 0) {
      argaWith=moreWith / size;
      others=moreWith % size;
      for (int i=0; i < size; i++) {
        ColumnData cData=data.columnWidths[i];
        if (i <= others - 1) {
          cData.width=cData.width + argaWith + 1;
        }
 else {
          cData.width=cData.width + argaWith;
        }
      }
    }
 else {
      if (moreWith < forceCount * ALLOW_COLOUMN_WIDTH) {
        for (int i=0; i < size; i++) {
          ColumnData cData=data.columnWidths[i];
          if (!cData.isForce) {
            cData.width=ALLOW_COLOUMN_WIDTH;
          }
        }
      }
 else {
        argaWith=moreWith / forceCount;
        others=moreWith % forceCount;
        List<ColumnData> adjustList=new ArrayList<ColumnData>();
        for (int i=0; i < size; i++) {
          ColumnData cData=data.columnWidths[i];
          if (!cData.isForce) {
            adjustList.add(cData);
          }
        }
        for (int i=0; i < adjustList.size(); i++) {
          ColumnData adjust=adjustList.get(i);
          if (i <= others - 1) {
            adjust.width=argaWith + 1;
          }
 else {
            adjust.width=argaWith;
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
private void caleColumnWidth(){
  int size=data.columnWidths.length;
  int containerWidth=getLayoutWidth();
  containerWidth=Math.max(0,containerWidth);
  int totalColumn=0;
  int forceCount=size;
  int percentageTotal=0;
  int forceTotal=0;
  double percentageValueTotal=0.0;
  for (int i=0; i < size; i++) {
    ColumnData cData=data.columnWidths[i];
    if (cData.isPercentage) {
      cData.trueMinColumnWidth=(int)(containerWidth * cData.percentageWidth / 100);
      totalColumn=totalColumn + cData.trueMinColumnWidth;
      percentageTotal=percentageTotal + cData.trueMinColumnWidth;
      percentageValueTotal=percentageValueTotal + cData.percentageWidth;
      cData.width=cData.trueMinColumnWidth;
      forceCount--;
    }
 else     if (cData.isForce) {
      totalColumn=totalColumn + cData.trueMinColumnWidth;
      forceTotal=forceTotal + cData.trueMinColumnWidth;
      cData.width=cData.trueMinColumnWidth;
      forceCount--;
    }
  }
  if (percentageTotal > 0 && containerWidth - forceTotal < percentageTotal) {
    percentageTotal=0;
    int widthMore=containerWidth - forceTotal;
    for (int i=0; i < size; i++) {
      ColumnData cData=data.columnWidths[i];
      if (cData.isPercentage) {
        if (widthMore < 0) {
          cData.trueMinColumnWidth=ALLOW_COLOUMN_WIDTH;
        }
 else {
          cData.trueMinColumnWidth=(int)(widthMore * cData.percentageWidth / percentageValueTotal);
        }
        percentageTotal=percentageTotal + cData.trueMinColumnWidth;
        cData.width=cData.trueMinColumnWidth;
      }
    }
    totalColumn=percentageTotal + forceTotal;
  }
  if ((!getOwner().isForceWidth()) && forceCount == 0) {
    return;
  }
  if (totalColumn >= containerWidth) {
    for (int i=0; i < size; i++) {
      ColumnData cData=data.columnWidths[i];
      if (!cData.isForce) {
        cData.width=ALLOW_COLOUMN_WIDTH;
        cData.trueMinColumnWidth=ALLOW_COLOUMN_WIDTH;
      }
    }
  }
 else {
    int moreWith=containerWidth - totalColumn;
    int argaWith;
    int others;
    if (forceCount == 0) {
      argaWith=moreWith / size;
      others=moreWith % size;
      for (int i=0; i < size; i++) {
        ColumnData cData=data.columnWidths[i];
        if (i <= others - 1) {
          cData.width=cData.width + argaWith + 1;
        }
 else {
          cData.width=cData.width + argaWith;
        }
      }
    }
 else {
      if (moreWith < forceCount * ALLOW_COLOUMN_WIDTH) {
        for (int i=0; i < size; i++) {
          ColumnData cData=data.columnWidths[i];
          if (!cData.isForce) {
            cData.width=ALLOW_COLOUMN_WIDTH;
          }
        }
      }
 else {
        argaWith=moreWith / forceCount;
        others=moreWith % forceCount;
        List<ColumnData> adjustList=new ArrayList<ColumnData>();
        for (int i=0; i < size; i++) {
          ColumnData cData=data.columnWidths[i];
          if (!cData.isForce) {
            adjustList.add(cData);
          }
        }
        for (int i=0; i < adjustList.size(); i++) {
          ColumnData adjust=adjustList.get(i);
          if (i <= others - 1) {
            adjust.width=argaWith + 1;
          }
 else {
            adjust.width=argaWith;
          }
        }
      }
    }
  }
}