JAvaでVector 2 D配列を作成して1 D Vectorを追加する問題

1787 ワード

//           
	HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
//         
	HSSFSheet sheet = workbook.getSheetAt(0);
	HSSFRow row;
	//       
	int  rows = sheet.getPhysicalNumberOfRows();
	Vector tabletmp = new Vector<>();
        Vector> tableAllData = new Vector<>(); 

         for (int r=0; r

このコードの機能は、excelテーブルを読み取り、2 D配列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 tabletmp = new Vector<>();
		if(row != null){
	        	int cells = row.getPhysicalNumberOfCells();
			//  r    *****************
			for(short c=0; c

考えてみると、私はやっとなぜか分かった.tableAllData.add(tablettmp)このコードはtabletmp変数の参照、つまりCで言うポインタを追加しただけです.tableAllDataに格納されているデータとtablettmpに格納されているデータは同じアドレスユニット内にある.次のコードtabletmp.removeAllElements()tablettmp内のデータを空にすると、tableAllData変数が指す配列も空になります.