0

私は過去数時間、これを解決しようとしてきましたが、うまくいきませんでした。ここでは、多次元配列をメイン メソッドから別のメソッドに渡すことになっています。

    public static int[] CalcAllRowSums(int[][] a)
{
    int[] p = {a.length}; 
    int x = 0;
    int sum = 0;

    for ( int r = 0; r < a.length; r++ ) {

        for ( int c = 0; c <= a[x].length-1; c++ ) {
            sum += a[x][r];
        }
        p[x] = sum;
    }
    return p;
}

これが私が行った方法ですが、メインメソッドからメソッドを出力すると、実際の配列ではなくアドレスが取得されます。

感謝

4

2 に答える 2

1

多次元配列のようなものはなく、配列の配列のみがあります。メイン配列の各行には配列が含まれています(長さが異なる可能性があります)

まず、配列の長さを配列に格納しますint[] p = {a.length};か? a.length の配列を作成したい場合は、 と書くだけint[] p = new int[a.length];です。

次に、The New Idiot が言ったように、配列の文字列表現が必要な場合はArrays.toString(int[])を使用します。

以下の私の例で は、次System.out.print(rowSums)のような配列のアドレスを返します。次のよう[I@4ad6be89 System.out.print(Arrays.toString(rowSums))な文字列表現を返します。[1,3,42]

例を次に示します。

public static int[] sumEachRows(int[][] array) {
    int[] rowSums = new int[array.length];

    for (int x = 0; x < array.length; x++) {
        rowSums[x] = sumOfArray(array[x]);
    }
      System.out.println(rowSums);
      System.out.println(Array.toString(rowSums));
    return rowSums;
}

public static int sumOfArray(int[] array) {
    int sum = 0;
    for(int element: array)
        sum += element; 
    return sum;
}
于 2013-05-27T13:04:25.153 に答える