在这里,我有一个与Picture.java中许多其他正常运行的类一起编写的类。我的APCS课程资料包要求此类课程“必须在水平方向上分割图片,并且将底部镜像成与顶部相似”。
我已导入以下内容:
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.text.*;
import java.util.*;
import java.util.List;
这是代码:
public void mirrorHorizontal()
{
Pixel[][] pixels = this.getPixels2D();
Pixel bottomPixel = null;
Pixel topPixel = null;
int height = pixels[0].length;
for (int col = 0; col < pixels.length; col++)
{
for (int row = 0; row < height / 2; row++)
{
bottomPixel = pixels[(height - 1 - row)][col];
topPixel = pixels[row][col];
bottomPixel.setColor(topPixel.getColor());
}
}
}
在PictureTester.java中,我有:
/** Method to test mirrorHorizontal */
public static void testMirrorHorizontal()
{
Picture caterpillar = new Picture("caterpillar.jpg");
caterpillar.explore();
caterpillar.mirrorHorizontal();
caterpillar.explore();
}
testMirrorHorizontal();
为了显示caterpillar.jpg而编写,然后将其显示在具有水平镜的单独窗口中。图片为150x329像素。
两者编译正常,并且似乎是按顺序进行的,但是当我在PictureTester.java上单击“运行”时,仅显示原始的caterpillar.jpg,并返回此错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 328
at Picture.mirrorHorizontal(Picture.java:155)
at PictureTester.testMirrorHorizontal(PictureTester.java:16)
at PictureTester.main(PictureTester.java:113)
我需要使用的GUI是jGrasp。
最佳答案
您必须交换col
和row
,因为它们放错了位置
for (int col = 0; col < pixels.length; col++) {
for (int row = 0; row < height / 2; row++) {
bottomPixel = pixels[col][(height - 1 - row)];
topPixel = pixels[col][row];
bottomPixel.setColor(topPixel.getColor());
}
}