如何将一行或一列2D数组传递到java中的函数中

时间:2017-05-05 08:42:08

标签: java

我有一个像这样的功能

public int function1(int [][] arr) {
    for (int i=0; i < arr.length; i++) {
        for (int j=0; j < arr[].length; j++) {
            **uniqueH(arr[])**
        }
    }
}

UniqueH()中,我只想传递一行2D数组。

UniqueH (int arr1[]) {
}

2 个答案:

答案 0 :(得分:2)

你的代码并不遥远。当您想要将单个1D切片作为一行传递时,只需使用行号作为2D数组的第一个索引:

public int function1(int [][] arr) {
    for (int i=0; i < arr.length; i++) {
        uniqueH(arr[i]);
    }
}

答案 1 :(得分:0)

您需要将一行切成一列 - 您可以稍微调整一下并使用Integer代替int并使用Iterable。< / p>

class Sliced<T> {
    final T[][] data;

    public Sliced(T[][] data) {
        this.data = data;
    }

    public Iterable<T> row(int i) {
        // Just make a list.
        return Arrays.asList(data[i]);
    }

    public Iterable<T> col(int i) {
        return new Iterable<T>() {

            @Override
            public Iterator<T> iterator() {
                return new Iterator<T>() {
                    int row = 0;

                    @Override
                    public boolean hasNext() {
                        return row < data.length;
                    }

                    @Override
                    public T next() {
                        return data[row++][i];
                    }
                };
            }
        };
    }
}

public void test() {
    System.out.println("Hello");
    Integer[][] a = {
            {1, 2, 3, 4, 5},
            {1, 2, 3, 4, 5},
            {1, 2, 3, 4, 5},
            {1, 2, 3, 4, 5},
    };
    for ( Integer v : new Sliced<>(a).col(1)) {
        System.out.println(v);
    }
    for ( Integer v : new Sliced<>(a).row(1)) {
        System.out.println(v);
    }
}