2016-03-25 47 views
0

我想要使用硒獲取webtable的內容,然後將內容存儲在2d矩陣中。在2d矩陣中存儲webtable的內容

下面是我的代碼:

//Locate the webtable 
WebElement reportTable = driver.findElement(By.xpath("//*[@id='pageContainer']/div/div[2]/table[2]")); 

int rowCount = driver.findElements(By.xpath("//*[@id='pageContainer']/div/div[2]/table[2]/tbody/tr")).size(); //Get number of rows 
System.out.println("Number of rows : " +rowCount); 

String[][] reportMatrix = new String[rowCount-1][]; //Declare new 2d String array 
           //rowCount-1 because the first row is header which i don't need to store 

int mainColCount = 0; 


for(int i=2;i<=rowCount;i++) //Start count from second row, and loop till last row 
{ 
    int columnCount = driver.findElements(By.xpath("//*[@id='pageContainer']/div/div[2]/table[2]/tbody/tr["+i+"]/td")).size(); //Get number of columns 
    System.out.println("Number of columns : " +columnCount); 

    mainColCount = columnCount; 

    for(int j=1;j<=columnCount;j++) //Start count from first column and loop till last column 
    { 
     String text = driver.findElement(By.xpath("//*[@id='pageContainer']/div/div[2]/table[2]/tbody/tr["+i+"]/td["+j+"]/div")).getText(); //Get cell contents 

     System.out.println(i + " " + j + " " + text); 

     reportMatrix[i-2][j-1] = text; //Store cell contents in 2d array, adjust index values accordingly 
    } 
} 


//Print contents of 2d matrix 
for(int i=0;i<rowCount-1;i++) 
{ 
    for(int j=0;j<mainColCount;j++) 
    { 
     System.out.print(reportMatrix[i][j] + " "); 
    } 
    System.out.println(); 
} 

這給我一個空指針異常在 「reportMatrix [I-2] [J-1] =文本」。

我不明白我在做什麼錯。當我聲明二維數組時,是否必須提供第二個索引?

在此先感謝。

回答

0

除非你是一個正在學習多維數組的學生,否則你需要使用一個API來約束它,只需避免使用數組。你會保持更長的時間:)

如果你必須使用二維數組,那麼明智地記住你並沒有真正創建一個矩陣。您正在創建一維數組,並且此數組中的每個元素都是另一個一維數組。當你這樣想時,很顯然你必須初始化「列」數組以及「行」數組。

這條線:

String[][] reportMatrix = new String[rowCount-1][]; 

將初始化報告矩陣有rowCount時 - 1行和空對每個組列。

內,您的第一個循環,你已經確定的列數之後,你想要做的事,像這樣:

reportMatrix[i] = new String[columnCount]; 

for(int j=1;j<=columnCount;j++) ... 

這將讓你有每一行中的列數不同,如果需要的話。

然後,在您的打印循環中,您應該使用數組長度打印出行和列。請記住從長度屬性中減去1,因爲這表示數組中元素的數量,並且我們幾乎總是使用零索引for循環。

//Print contents of 2d matrix 
for(int i=0; i < reportMatrix.length - 1; i++) 
{ 
    for(int j=0; j < reportMatrix[i].length - 1; j++) 
    { 
     System.out.print(reportMatrix[i][j] + " "); 
    } 
    System.out.println(); 
} 
+0

它解決了我的問題。謝謝! – sanaku