我不知道,但由于某种原因阵列拒绝改变,我不明白为什么。见下面的进一步评论
public static void contour (int[ ][ ][]image, int rows, int cols, int maxIntensity, int[ ][ ][]newImage) throws Exception
{
PrintWriter contour = new PrintWriter("contour.ppm");
int r = 0;
int c = 0;
int a = 0;
int sumk = 0;
while (r < rows && c < cols)
{
while (a < 3)
{
image[0][r][a] = newImage[0][r][a];
image[cols-1][r][a] = newImage[cols-1][r][a];
image[c][0][a] = newImage[c][0][a];
image[c][rows-1][a] = newImage[c][rows-1][a];
a++;
}
r++;
c++;
}
System.out.println (image[32][0][2]);
System.out.println (newImage[32][0][2]);
}
此代码有点脱离上下文,但您应该能够看到我想在两个数组中使用哪些值相同。打印语句用于测试目的,由于某种原因,我得到两个不同的值。这些数组都有赋值给它们,但图像数组不会改变(即使我在这个方法中创建一个新数组,同样的问题仍然存在)。
你可以看到我在main方法中定义了这些数组,它们如下:
int image [][][] = readimage (fname, descriptor);
int newImage [][][] = new int [rows][cols][3];
因此,图像数组是来自不同方法的返回数组。
我是否忽视了一些非常明显或者什么?我一直在努力解决这个问题,所以所有的提示,技巧和解释都非常感谢!!
答案 0 :(得分:2)
假设您正按照您打算的方式遍历列和行...
您永远不会将a
变量重置为0
,因此您的代码只能运行一次。
int r = 0;
int c = 0;
int a = 0;
int sumk = 0;
while (r < rows && c < cols)
{
while (a < 3)
{
image[0][r][a] = newImage[0][r][a];
image[cols-1][r][a] = newImage[cols-1][r][a];
image[c][0][a] = newImage[c][0][a];
image[c][rows-1][a] = newImage[c][rows-1][a];
a++;
}
r++;
c++;
a=0; //<----ADD THIS
}
答案 1 :(得分:0)
如果rows参数或cols参数小于33,则测试中打印的位置将不会从newimage复制到图像。 while (r < rows && c < cols)
测试导致循环在r或c中的第一个达到其最大值时终止。