将While循环更改为for循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将While循环更改为for循环相关的知识,希望对你有一定的参考价值。
你好这里的人在这个extractTable方法中使用while(true)。根据方法,如果条件失败,它将是一个无限循环,这是一个糟糕的编程实践,你可以帮助我改变for for或for each
private List<Map<String, Map<String, Integer>>> extractTable(XSSFSheet sheet, Cell tablePosition) {
List<Map<String, Map<String, Integer>>> table = new ArrayList<>();
int headerRow = tablePosition.getRowIndex();
int valuesHeaderColumn = tablePosition.getColumnIndex();
// read all columns and rows until finding an empty one
int row = headerRow + 1;
int col = valuesHeaderColumn + 1;
// read all columns starting at col
while (true) {
Map<String, Map<String, Integer>> tableColumn = new HashMap<>();
Cell headerCell = sheet.getRow(headerRow).getCell(col);
if (headerCell == null)
break;
String columnName = headerCell.getStringCellValue().toUpperCase();
if ("".equals(columnName))
break;
// read all rows starting at row
Map<String, Integer> values = new HashMap<>();
while (true) {
Row valueHeaderRow = sheet.getRow(row);
if (valueHeaderRow == null)
break;
Cell valueHeaderCell = valueHeaderRow.getCell(valuesHeaderColumn);
String valueHeader = valueHeaderCell.getStringCellValue();
if ("".equals(valueHeader))
break;
Cell valueCell = sheet.getRow(row).getCell(col);
Integer value = (int) valueCell.getNumericCellValue();
values.put(valueHeader, value);
row++;
}
tableColumn.put(columnName, values);
// Add the columns map to the list
table.add(tableColumn);
col++;
row = headerRow + 1;
}
return table;
}
答案
我不相信虽然(真实)...休息是一个糟糕的编程习惯,看看here。但是要使用POI迭代电子表格的行和列,recommended就是这样做的:
for (Row row: sheet) {
for (Cell cell: row) {
// do something here
}
}
以上是关于将While循环更改为for循环的主要内容,如果未能解决你的问题,请参考以下文章
为啥 sudo 在 while 循环中使用时将阻塞命令更改为非阻塞命令?
Powershell & Lotus Notes - 将 While 循环的输出从文本更改为 XML 输出