【问题标题】:Java, filling Object[][] array with dataJava,用数据填充 Object[][] 数组
【发布时间】:2013-02-24 10:49:18
【问题描述】:

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

【问题讨论】:

    标签: java oop multidimensional-array


    【解决方案1】:

    你做得不对。

    在您的代码中,您在 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();
    }
    

    【讨论】:

    • 只要在外部声明变量,在 for 循环内部创建的数组就会存在于外部。所以这不是这里的问题。但我同意这不是你大部分时间想要的。
    • 当然我的意思是在for循环中声明一个变量,他在他的代码中做了什么。很抱歉造成误解。
    • 感谢您的回复,我看到了我遇到的问题。现在一切正常。
    • 没问题,我很高兴它有帮助。
    【解决方案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()
          };
       }
    

    【讨论】:

      【解决方案3】:

      如果你真的想使用二维数组,那么你必须先定义数组的大小(如果它是一个 n 维数组!)

      查看此内容以获得一些澄清:

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

      希望这有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-18
        • 2013-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-05
        • 2011-11-29
        相关资源
        最近更新 更多