Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解三维阵列_Java_Multidimensional Array - Fatal编程技术网

Java 理解三维阵列

Java 理解三维阵列,java,multidimensional-array,Java,Multidimensional Array,我试着把我的头绕在三维阵列上。我知道它们是二维数组的数组,但我正在读的那本书说了一些让我困惑的事情 在我正在阅读的书的一个练习中,它要求我制作一个全彩色图像的三维阵列。它给出了一个小例子: 如果我们决定选择一个三维数组,下面是如何声明该数组: 然而,这样不是更有效吗 int[][][] colorImage = new int[3][numRows][numColumns]; 其中3为rgb值,0为红色,1为绿色,2为蓝色。对于后者,每个二维数组将存储行和列的颜色值,对吗?我只是想确保我了解如

我试着把我的头绕在三维阵列上。我知道它们是二维数组的数组,但我正在读的那本书说了一些让我困惑的事情

在我正在阅读的书的一个练习中,它要求我制作一个全彩色图像的三维阵列。它给出了一个小例子:

如果我们决定选择一个三维数组,下面是如何声明该数组:

然而,这样不是更有效吗

int[][][] colorImage = new int[3][numRows][numColumns];
其中3为rgb值,0为红色,1为绿色,2为蓝色。对于后者,每个二维数组将存储行和列的颜色值,对吗?我只是想确保我了解如何有效地使用三维阵列


任何帮助都将不胜感激,谢谢。

订单不重要,因此一个不会比另一个更有效。唯一重要的是,任何访问colorImage的对象都知道哪个维度用于什么。多维数组上的上下文更多一些。

顺序并不重要,事实上,前一种形式更具可读性:

final const int RED = 0;
final const int GREEN = 1;
final const int BLUE = 2;

int[][][] colorImage = new int[numRows][numColumns][3];
//...

int x = getSomeX();
int y = getSomeY();

int redComponent = colorImage[x][y][RED];
int greenComponent = colorImage[x][y][GREEN];
int blueComponent = colorImage[x][y][BLUE];

我不确定把所有东西都放在int的三维数组中是否是个好主意

您的第一个错误是DatayType: RGB是一个整数。 但是R是一个字节,G是一个字节,B也是一个字节。。(
Color.getXXX()
传递一个int,我不知道为什么,因为它是一个字节0-255)

您需要一个int,因为您要处理256个以上的列和行。(没关系)。 但是我认为将颜色信息封装在一个额外的对象中要好得多。可能是一个私有的数据结构,比如

class MyColor {

        public byte r, g, b;    //public for efficient access;
        public int  color;      //public for efficient access;

        public MyColor(final int rgb) {
            this(new Color(rgb));
        }

        public MyColor(final Color c) {
            this((byte) c.getRed(), (byte) c.getGreen(), (byte) c.getBlue(), c.getRGB());
        }

        public MyColor(final byte red, final byte green, final byte blue, final int c) {
            this.r = red;
            this.g = green;
            this.b = blue;
            this.color = c;
        }
    }
并将其放入MyColor[numRows][numColumns]


但是,如果你将MyColor类公开给你的整个应用程序,我会改变该类的设计,使其更安全。

这是一样的。只要尺寸一致,您可以随意使用尺寸。没有表现或记忆上的差异。为什么你认为顺序会产生差异?@Luxspes我不相信。我知道。@Bohemian抱歉,但我是在和Jake Wilson说话,不是在和他说话you@Bohemian也。。什么意思?从我所读到的,你,和我一样,相信秩序没有什么不同。。。所以你想说什么?
class MyColor {

        public byte r, g, b;    //public for efficient access;
        public int  color;      //public for efficient access;

        public MyColor(final int rgb) {
            this(new Color(rgb));
        }

        public MyColor(final Color c) {
            this((byte) c.getRed(), (byte) c.getGreen(), (byte) c.getBlue(), c.getRGB());
        }

        public MyColor(final byte red, final byte green, final byte blue, final int c) {
            this.r = red;
            this.g = green;
            this.b = blue;
            this.color = c;
        }
    }