5

文字列の配列が4つあり、3列と動的行の2次元配列を作成したいと思います。

配列は次のようなものです。

String[] first_name;
String[] last_name;
String[] unit;
String[] phone_number;


Object[][] obj = new Object[first_name.length()][3]

私の問題は、どうすれば次のようなことを達成できるかです。

obj = {first_name[index] + " " + last_name[index], unit[index], phone_number[index]}

手伝ってください!!!

4

6 に答える 6

4

動的行first_nameとは、配列内の要素の数に依存することを意味すると 想定しています。

したがって、単純に繰り返すことができます:

String[][]obj = new String[first_name.length][3];

for (int i = 0; i < first_name.length; i++)
{
  obj[i][0] = first_name[i] + " " + last_name[i];
  obj[i][1] = unit[i];
  obj[i][2] = phone_number[i];
}

ただし、このアプローチはあまり良くありません。Employeeたとえば、3 つのフィールドとして whichという名前のオブジェクトを作成することを検討する必要があります。Employee

例えば:

public class Employee
{
  String name;
  String unit;
  String phoneNumber;

  public Employee(String name, String unit, String phoneNumber)
  {
     //... rest of constructor to copy the fields
  }

  //... setters and getters
}

そして、あなたはただ持っています:

Employee[] employees = new Employee[first_name.length];

for (int i = 0; i < first_name.length; i++)
{
   employees[i] = new Employee(first_name[i] + " " + last_name[i], unit[i], phone_number[i]);
}
于 2012-12-19T14:43:46.203 に答える
1

これはあなたが探しているものかもしれません:(4つの配列が同じ長さであると仮定してください)

String[][] result = new String[first_name.length][3]; 
        for(int i =0; i<first_name.length;i++){
            result[i][0]=first_name[i]+" "+last_name[i];
            result[i][1]=unit[i];
            result[i][2]=phone_number[i];
        }
于 2012-12-19T14:47:06.073 に答える
1
String[] first_name = new String[length];
        String[] last_name = new String[length];//length means your length of string
        String[] unit = new String[length];
        String[] phone_number = new String[length];


        Object[][] obj = new Object[first_name.length][3];

        for(int index =0;index<first_name.length;index++){


            obj[index][0] = first_name[index] + " " + last_name[index];
            obj[index][1] = unit[index];
            obj[index][2] = phone_number[index];

        }
于 2012-12-19T14:44:46.950 に答える
1

3 次元配列を作成するには、いくつかの方法があります。

私は Object[][] を避けますが、処理やパフォーマンスは決して好きではありません。

3 次元配列は単なる配列の配列であるため、List データ構造を使用するのが簡単な方法です。List[] または List> でうまくいくはずです。このようにして、Collection オブジェクトのすべてのビルトインに加えて、その上に Apache commons、lambdaJ、または Guava を追加することもできます。

プリミティブ配列の使用に固執している場合は、3 次元配列 [][] のように機能する通常の 2 次元配列 [] を作成することもできます。

これは、3 次元配列と同じように機能する基本的な配列に対して作成した単純なラッパー メソッドです。

public class MyThreeDArray{
    int MAX_ROW;
    int MAX_COL;
    int[] arr;

    public MyThreeDArray(final int MAX_ROW, final int MAX_COL){
        this.MAX_ROW = MAX_ROW;
        this.MAX_COL = MAX_COL;
        arr = new int[MAX_ROW * MAX_COL];
    }

    private int findIndex(int row, int col) throws IllegalArgumentException{
        if(row < 0 && row >= MAX_ROW ){
            throw new IllegalArgumentException("Invaild row value");
        }

        if(col < 0 && col >= MAX_COL ){
            throw new IllegalArgumentException("Invaild col value");
        }
        return ( row * MAX_COL + col );
    }

    public int get(int row, int col){
        return arr[findIndex(row, col)];
    }

    public void set(int row, int col, int value){
        arr[findIndex(row, col)] = value;
    }
}

また、私はこれをテストしたことがないことに注意してください。

したがって、文字列でこれを行った場合、行 0 には名の値が含まれ、... 行 4 には単位の値が含まれる可能性があります。

このラッパーで人物 A のデータを取得するには、次のような呼び出しを行うことができます。

    String firstName = myWrapper.get(0,0);
    String lastName = myWrapper.get(0,1);
    String phone = myWrapper.get(0,2);
    String unit = myWrapper.get(0,3);

B さんのデータは 2 行目に格納されます。

しかし、配列を結合しようとするのはなぜでしょうか? POJOという名前の人を簡単に作ることができます

public class Person{
    String firstName;
    String lastName;
    String phone;
    String unit;

public Person(){}
//ToDo: Getters and Setters
}   

この方法では、簡単に検証を追加して、問題なく特定の人を明確に呼び出すことができます。

    Person[] customers = new Person[5];

またはさらに良い

    List<Person> customers = new ArrayList<Person>();
于 2012-12-19T16:38:36.240 に答える
1

これは役に立ちますか?

int len = first_name.lenghth();
String[][] arr2d = new String[len][3];
for (int i=0; i < len; i++) {
    arr2d[i][0] = first_name[i] + " " + last_name[i];
    arr2d[i][1] = unit[i];
    arr2d[i][2] = phone_number[i];
}
于 2012-12-19T14:43:36.673 に答える
0

1D 配列のリストを作成できList<String []> arrayList = new ... ます。arrayList.add(first_name);

于 2012-12-19T14:37:34.690 に答える