4

我正在尝试Object[][]用我的对象类中的数据填充一个数组。但是我在填充数组时遇到问题。下面是我试图做的来填补Object[][] data. 目前该方法无法看到返回的数据变量。我已经尝试删除该方法并填充rows声明的数组,但不能因为有一个 for 循环。

我目前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

3 回答 3

4

你没有正确地做到这一点。

在您的代码中,您声明了一个数组 INSIDEfor循环,这意味着在循环之后,该数组不再存在。这就是你无法返回的原因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();
}
于 2013-02-24T10:59:22.070 回答
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()
      };
   }
于 2013-02-24T10:57:30.730 回答
1

如果您真的想使用二维数组,则必须先定义数组的大小(如果它是一维数组!)

请参阅此内容以获得一些说明:

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

在我看来,您的数组只有一个大小参数,所以我会使用普通数组而不是二维数组。

我会做这样的事情:

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

如果必须使用二维对象数组,则必须定义第二个尺寸维度并像这样填充数组:

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

希望这会有所帮助。

于 2013-02-24T11:08:11.970 回答