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

配列を 2 回割り当てる必要があります。行ごとに 1 回、その後は行ごとに 1 回。

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

本当に2次元配列を使用したい場合は、最初に配列のサイズを定義する必要があります(次元配列の場合も同様です)。

いくつかの説明を得るためにこのコンテンツを参照してください:

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

配列のサイズパラメータは1つしかないように思われるので、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次元のオブジェクト配列を使用する必要がある場合は、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() } }; 
    }
}

これがお役に立てば幸いです。

于 2013-02-24T11:08:11.970 に答える