java 中创建Vector二维数组添加一维Vector的问题

1 篇文章 0 订阅
//创建对工作薄文件的引用
	HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
//创建对工作表的引用
	HSSFSheet sheet = workbook.getSheetAt(0);
	HSSFRow row;
	//获取表格的行数
	int  rows = sheet.getPhysicalNumberOfRows();
	Vector<String> tabletmp = new Vector<>();
        Vector<Vector<String>> tableAllData = new Vector<>(); 

         for (int r=0; r<rows; r++){
	//获取单元格中指定的行对象
	        row = sheet.getRow(r);
	        if(row != null){
		        int cells = row.getPhysicalNumberOfCells();
		        //读取r行的内容*****************
		        for(short c=0; c<cells; c++){
			        HSSFCell cell = row.getCell((short)c);
			        if(cell != null){
			        	 if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
			      			tabletmp.add(cell.getStringCellValue());
				         }else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
						 tabletmp.add(cell.getNumericCellValue() + "");
				       }
			         }
		         }
			tableAllData.add(tabletmp);	
			tabletmp.removeAllElements();
		}
						
	}
	tablePane.addExcel(tableAllData);	

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

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

//创建对工作薄文件的引用
	HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
//创建对工作表的引用
	HSSFSheet sheet = workbook.getSheetAt(0);
	HSSFRow row;
//获取表格的行数
	int  rows = sheet.getPhysicalNumberOfRows();
	for (int r=0; r<rows; r++){
	//获取单元格中指定的行对象
		row = sheet.getRow(r);
		Vector<String> tabletmp = new Vector<>();
		if(row != null){
	        	int cells = row.getPhysicalNumberOfCells();
			//读取r行的内容*****************
			for(short c=0; c<cells; c++){
				HSSFCell cell = row.getCell((short)c);
				if(cell != null){
						 if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
								 tabletmp.add(cell.getStringCellValue());
						 }else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
								 tabletmp.add(cell.getNumericCellValue() + "");
						 }
				 }
			}
			tableAllData.add(tabletmp);	
		}
						
	}
	tablePane.addExcel(tableAllData);	

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值