【问题标题】:Changing the While loop to for loop将 While 循环更改为 for 循环
【发布时间】:2018-08-13 02:22:59
【问题描述】:

大家好,这里的 extractTable 方法使用了 while(true)。根据方法,如果条件失败,这将是一个无限循环,这是一种不好的编程习惯,你们可以帮我改一下 while 到 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;
}

【问题讨论】:

  • “根据方法,如果条件失败,它将是一个无限循环”。这还不清楚。什么方法?什么条件会失败?

标签: java for-loop foreach while-loop apache-poi


【解决方案1】:

我不相信 while(true) ... break 是一种糟糕的编程习惯,请看here。但是要使用 POI 迭代电子表格的行和列,您可以这样做 recommended

for (Row row: sheet) {
  for (Cell cell: row) {
    // do something here
  }
}

【讨论】:

  • 你能帮我解决上面的程序吗@jmarkmurphy
  • 你有什么问题?
  • 感谢您的宝贵时间。我想出了一个解决方案
猜你喜欢
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 2020-09-17
  • 1970-01-01
  • 2022-01-19
  • 2014-04-05
  • 2021-11-23
相关资源
最近更新 更多