Как напечатать значения в таблице, используя две разные длины массива - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу создать таблицу с двумя разными массивами с разным измерением, но после ее выполнения я не получу правильный вывод.

У меня есть код ниже:

String rowHeadingkeys[] = new String[] {"heading1","heading2","heading3","heading4","heading5","heading6","heading7","heading8"};
String rowValuekeys[] = new String[] {"Text1","Text2","Text3","Text4","Text5",
                                    "Text6","Text7","Text8","Text9","Text10",
                                    "Text11","Text12","Text13","Text14","Text15",
                                    "Text16","Text17","Text18","Text19","Text20",
                                    "Text21","Text22","Text23","Text24"};

    for(int i = 0;i<rowHeadingkeys.length;i++) {

        if(rowHeadingkeys!=null) {

            patientMonitoringTable.addCell(createCell(rowHeadingkeys[i],
                    PDFUtil.BOLD_FONT,1,Element.ALIGN_LEFT));

            for(int j = 0;j<rowValuekeys.length/rowHeadingkeys.length;j++) {

                patientMonitoringTable.addCell(createCell(svo.getFields().get(rowValuekeys[j]).getValue(),
                        PDFUtil.FONT,1,Element.ALIGN_LEFT));
            }

        }
}

и я хочу сделать это как показано ниже:

| heading1 | Text1  | Text2  | Text3  |    
| heading2 | Text4  | Text5  | Text6  |    
| heading3 | Text7  | Text8  | Text9  |    
| heading4 | Text10 | Text12 | Text13 |    
| heading5 | Text14 | Text15 | Text16 |    
| heading6 | Text17 | Text18 | Text19 |    
| heading7 | Text20 | Text21 | Text22 |    
| heading8 | Text23 | Text24 | Text24 |

Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Если вы хотите 3 элемента из 2-го списка для каждого элемента 1-го:

for(int i = 0; i < rowHeadingkeys.length;i++) {

    if(rowHeadingkeys!=null) {

        patientMonitoringTable.addCell(createCell(rowHeadingkeys[i],
                PDFUtil.BOLD_FONT,1,Element.ALIGN_LEFT));

        for(int j = 0; j < 3; j++) {

            patientMonitoringTable.addCell(createCell(svo.getFields().get(rowValuekeys[3 * i + j]).getValue(),
                    PDFUtil.FONT,1,Element.ALIGN_LEFT));
        }
    }
}
0 голосов
/ 01 ноября 2018

Полагаю, вы получаете Text1 | Text2 | Text3 | за каждый заголовок.

Вы не должны назначать j = 0 в каждом цикле. инициализировать int index = 0 снаружи как для циклов for, так и для внутреннего цикла for должно выглядеть следующим образом.

for(int j = index; j<index + (rowValuekeys.length/rowHeadingkeys.length);j++){

}
index+=rowValuekeys.length/rowHeadingkeys.length;

Edit:

лучшее решение будет:

int innerIndex = 0;
for(int i = 0;i<rowHeadingkeys.length;i++) {

    if(rowHeadingkeys!=null) {

        patientMonitoringTable.addCell(createCell(rowHeadingkeys[i],
                PDFUtil.BOLD_FONT,1,Element.ALIGN_LEFT));

        for(int j = 0;j<rowValuekeys.length/rowHeadingkeys.length;j++) {
      if(innerIndex < rowValuekeys.length)
            patientMonitoringTable.addCell(createCell(svo.getFields().get(rowValuekeys[innerIndex]).getValue(),
                    PDFUtil.FONT,1,Element.ALIGN_LEFT));
           innerIndex++;
        }

    }

}

...