在这里,我有一个与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。

最佳答案

您必须交换colrow,因为它们放错了位置

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

09-27 19:55