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;
}
}