2013-02-24 78 views
4

我想用我的對象類中的數據填充Object[][]數組。但即時填充陣列有問題。以下是我想要填寫的Object[][] data。此時返回的數據變量不能被該方法看到。我試圖刪除方法和填充數組在rows聲明但不能因爲有一個for循環。我正在填寫object[][]數組嗎?Java,填充Object [] []數組與數據

public class CustomersDialog extends javax.swing.JDialog { 
    private CustomerList customers = new CustomerList(); 
    Object rows[][] = getData(); 

    public Object[][] getData() { 
     customers = dataManager.getUserData(); 
     int size = customers.size(); 
     Customer customer = new Customer(); 

     for(int i = 0; i < size; i++) { 
      customer = customers.getCustomerAt(i); 
      Object [][] data = { 
      { Integer.toString(customer.getCustomerID()), customer.getfName(), customer.getlName() } }; 
     } 

     return data; 
    } 
} 

此外做創建外循環陣列的此方法將導致由編譯器「空聲明消息」,它說這是需要.get語句之後行結束;':

public Object[][] getData() { 
    customers = dataManager.getUserData(); 
    int size = customers.size(); 
    Customer customer; 

    Object [][] data; 

    for(int i = 0; i < size; i++) { 
     customer = customers.getCustomerAt(i); 
     data = { 
     { Integer.toString(customer.getCustomerID()), customer.getfName(), customer.getlName() } }; 
    } 

    return data; 
} 

回答

4

你做得不對。

在你的代碼中,你聲明瞭一個INSIDE for循環的數組,這意味着在循環之後,數組不再存在。這就是爲什麼你不能返回data - 它根本不存在。

更多,你可以從中讀到變量的作用域和生存期:http://www.c4learn.com/javaprogramming/the-scope-and-lifetime-of-variables-in-java-programming-language/

你想要做什麼是聲明外循環數組:

Object [][] data; 
for(int i; i < size; i++) { 
    // Filling data array 
} 
return data; 

接下來的事情是,如果你想使用一個數組,你應該首先將其初始化:

Object [][] data = new Object [size][3]; 

然後你可以填充它在for循環,像這樣:

for(int i; i < size; i++) { 
    customer = customers.getCustomerAt(i); 
    data[i][0] = Integer.toString(customer.getCustomerID()); 
    data[i][1] = customer.getfName(); 
    data[i][2] = customer.getlName(); 
} 
+0

只要變量在外部聲明,在for循環內部創建的數組將存在外部。所以這不是問題。但我同意這不是你大部分時間想要的。 – 2013-02-24 11:05:51

+0

當然,我的意思是在for循環中聲明一個變量,他在代碼中做了什麼。我爲我的誤會道歉。 – 2013-02-24 11:07:21

+0

謝謝你的回覆,我看到了我遇到的問題。所有現在都按預期工作。 – user1851487 2013-02-24 11:08:43

2

你必須分配兩次陣列。一次爲行,之後爲一行。

Object[][] data = new Object[size]; 
for(int i = 0; i < size; i++) { 
    customer = customers.getCustomerAt(i); 
    data[i] = 
     new Object[]{ 
     Integer.toString(customer.getCustomerID()), 
     customer.getfName(), 
     customer.getlName() 
     }; 
    } 
1

如果你真的想用一個2維數組比你必須首先定義數組的大小(也如果它是一個二維數組!)

看到這個內容得到一些澄清:

http://www.leepoint.net/notes-java/data/arrays/arrays-2D.html

在我看來,像你只有一個尺寸參數爲陣,所以我會用一個正常的陣列,而不是一個2維之一。

我會做這樣的事情:

public Object[] getData() { 
    customers = dataManager.getUserData(); 
    int size = customers.size(); 
    Object[] result = new Object[size]; 
    Customer customer; 

    for(int i = 0; i < size; i++) { 
     customer = customers.getCustomerAt(i); 
     result[i] = { 
     { Integer.toString(customer.getCustomerID()), customer.getfName(), customer.getlName() } }; 
    } 

    return data; 
} 

如果你必須使用一個2維對象數組,比你要定義第二尺寸大小和填充數組是這樣的:

for(int i = 0; i < sizeDimOne; i++) { 
    for(int k = 0; k < sizeDimTwo; k++) { 
      result[i][k] = { { Integer.toString(customer.getCustomerID()), customer.getfName(), customer.getlName() } }; 
    } 
} 

希望這有幫助。