【问题标题】:How to return two multidimetional arrays from same java method?如何从同一个java方法返回两个多维数组?
【发布时间】:2014-11-10 11:34:54
【问题描述】:

我想知道如何从同一个方法返回两个多维数组:

public static arraysReturn() {
    int [][] A={{1,2},{2,3},{4,5}};
    int [][] B={{1,2},{2,3},{4,5}};
    return A,B;
}

【问题讨论】:

  • 一个3D数组,第一维大小为2?

标签: java matrix return


【解决方案1】:

Java 不支持一次返回多个内容。

但是,您可以创建一个小类来执行此操作:

public class TwoArrays {
    public final int[][] A;
    public final int[][] B;
    public TwoArrays(int[][] A, int[][] B) {
        this.A = A;
        this.B = B;
    }
}

然后让你的方法是这样的:

public static TwoArrays arraysreturn() {
    int [][] A={{1,2},{2,3},{4,5}};
    int [][] B={{1,2},{2,3},{4,5}};
    return new TwoArrays(A,B);
}

要访问值:

TwoArrays arrays = arraysreturn();
System.out.println(Arrays.toString(arrays.A)); //Due to the way java prints arrays, this is needed, but it isn't a requirement for doing other stuff with the array.
System.out.println(Arrays.toString(arrays.B)); 

【讨论】:

  • 如果字段是公开的,我建议将它们设置为“final”
  • 这取决于需要做什么。如果你想改变这个值,你可以这样做。但我会将它们标记为最终以安抚你。
  • 这是一个很好的开始,我使用这样的类和公共最终变量来分组返回相当多。问题是,如果您甚至远程遵循 SRP,那么这两个数据是相关的,并且应该是一个类的一部分。在此之后,请注意仅对该数据进行操作的方法,它们应该是“TwoArrays”类的方法。一段时间后,您将变量设为私有,重命名该类,并且您已经完成了出色的正确 OO 重构。这是真正理解和致力于面向对象设计的第一步。
  • 我很想知道如何在 main 方法中捕获返回值? @Pokechu22
【解决方案2】:

制作一个包含两个数组的数组。你的情况

int[2][][] = {
    {{1,2},{2,3},{4,5}}, 
    {{1,2},{2,3},{4,5}}
};

或者更好的是,创建一个包含两个数组的对象。

【讨论】:

  • 投反对票只是因为添加一个类是一个更好的主意,使您(从调用类)不了解的结构复杂化不是一个好的解决方案。这行得通,但没有人应该这样做。
【解决方案3】:

你不能从一个方法返回多个值。

您可以返回一个包含两个数组作为成员的对象。

您也可以返回一个包含两个数组的多维数组,但这不是一个非常 OOP 的解决方案。

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2010-11-30
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多