zoukankan      html  css  js  c++  java
  • java 中创建Vector二维数组添加一维Vector的问题

     1 //创建对工作薄文件的引用
     2     HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
     3 //创建对工作表的引用
     4     HSSFSheet sheet = workbook.getSheetAt(0);
     5     HSSFRow row;
     6     //获取表格的行数
     7     int  rows = sheet.getPhysicalNumberOfRows();
     8     Vector<String> tabletmp = new Vector<>();
     9         Vector<Vector<String>> tableAllData = new Vector<>(); 
    10 
    11          for (int r=0; r<rows; r++){
    12     //获取单元格中指定的行对象
    13             row = sheet.getRow(r);
    14             if(row != null){
    15                 int cells = row.getPhysicalNumberOfCells();
    16                 //读取r行的内容*****************
    17                 for(short c=0; c<cells; c++){
    18                     HSSFCell cell = row.getCell((short)c);
    19                     if(cell != null){
    20                          if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
    21                               tabletmp.add(cell.getStringCellValue());
    22                          }else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
    23                          tabletmp.add(cell.getNumericCellValue() + "");
    24                        }
    25                      }
    26                  }
    27             tableAllData.add(tabletmp);    
    28             tabletmp.removeAllElements();
    29         }
    30                         
    31     }
    32     tablePane.addExcel(tableAllData);    

    这段代码的功能是:读取一个excel表格,并且将表格里的内容添加到二维数组tableAllData变量里面。

    看起来没有什么错误,但是实际上运行之后我才发现tableAllData里面的数据全为空。让我百思不得其解。后来我按照书上的方式将tabletmp变量的声明放到循环里才将问题搞定。代码如下:

     1 //创建对工作薄文件的引用
     2     HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
     3 //创建对工作表的引用
     4     HSSFSheet sheet = workbook.getSheetAt(0);
     5     HSSFRow row;
     6 //获取表格的行数
     7     int  rows = sheet.getPhysicalNumberOfRows();
     8     for (int r=0; r<rows; r++){
     9     //获取单元格中指定的行对象
    10         row = sheet.getRow(r);
    11         Vector<String> tabletmp = new Vector<>();
    12         if(row != null){
    13                 int cells = row.getPhysicalNumberOfCells();
    14             //读取r行的内容*****************
    15             for(short c=0; c<cells; c++){
    16                 HSSFCell cell = row.getCell((short)c);
    17                 if(cell != null){
    18                          if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
    19                                  tabletmp.add(cell.getStringCellValue());
    20                          }else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
    21                                  tabletmp.add(cell.getNumericCellValue() + "");
    22                          }
    23                  }
    24             }
    25             tableAllData.add(tabletmp);    
    26         }
    27                         
    28     }
    29     tablePane.addExcel(tableAllData);


    想一想,我终于明白为什么了。tableAllData.add(tabletmp) 这段代码只是添加了tabletmp变量的引用,也就是C里面说的指针。tableAllData内所存的数据与tabletmp所存的数据都在同一地址单元内。接下来的这段代码tabletmp.removeAllElements(); 将tabletmp内的数据清空,那么同时tableAllData变量所指向的数组也为空。

  • 相关阅读:
    ping命令
    第一次手写Loadrunner测试脚本
    select into from和insert into select
    网络安全领域常说的payload
    如何查看LoadRunner日志
    验证码测试
    HTTP的请求和响应
    LoadRunner能录制微信登录过程么?
    切面编程AOP之KingAOP
    编程规范
  • 原文地址:https://www.cnblogs.com/freeabyss/p/3187064.html
Copyright © 2011-2022 走看看