Java,填充Object [] []数组与数据

问题描述:

我想用我的对象类中的数据填充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; 
} 

你做得不对。

在你的代码中,你声明了一个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

你必须分配两次阵列。一次为行,之后为一行。

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() 
     }; 
    } 

如果你真的想用一个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() } }; 
    } 
} 

希望这有帮助。