java中的缓冲图像

时间:2009-11-06 18:08:52

标签: java syntax compiler-errors

static BufferedImage img1[];
for(int i=0;i<60;i++)
   {
     img1[i] = new BufferedImage((int) (width), (int) (height), BufferedImage.TYPE_INT_RGB);

    }

它在此代码上方的行上显示错误: 令牌“;”上的语法错误,{此标记后的预期

以下代码如下:  此行有多个标记   - 方法断点:视频[entry] - main(String [])   - 令牌上的语法错误“)”,;预期   - 令牌上的语法错误“(”,;预期

4 个答案:

答案 0 :(得分:1)

这里的一个问题是你不能声明一个方法范围内的变量是静态的。 (或者,您也不能编写既不在方法中也不在静态块中的for循环。)修复其中一个。

这是C / C ++和Java之间的显着差异:在C / C ++中,您可以在函数内声明静态变量,这些变量将在函数调用中保留其值。 Java没有那个。如果您希望变量以这种方式保留其值,则需要使其成为类的(可能是静态的)成员。

答案 1 :(得分:1)

我假设你的其他一些代码中有错误。您在此代码中也遇到错误 - 您需要在使用之前声明img1数组的长度...

BufferedImage img1[] = new BufferedImage[60];

答案 2 :(得分:1)

撇开样式和封装的问题,我怀疑问题与你在课堂上做有关。

要在方法中实例化数组,您可以执行以下操作:

class MyClass1 {
  public void initImages(int width, int height) {
    BufferedImage img1[] = new BufferedImage[60];
    for (int i = 0; i < img1.length; i++) {
      img1[i] = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    }
  }
}

数组不会转义该方法,因此它会死在那里。

要将数组实例化为静态成员,您可以这样:

class MyClass2 {
  static int width = 100;
  static int height = 100;
  static BufferedImage img1[] = new BufferedImage[60];
  static {
    for (int i = 0; i < img1.length; i++) {
      img1[i] = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    }
  }
}

这使用静态初始化块。

......或者这个:

class MyClass3 {
  static BufferedImage img1[] = initImages(100, 100);

  public static BufferedImage[] initImages(int width, int height) {
    BufferedImage img1[] = new BufferedImage[60];
    for (int i = 0; i < img1.length; i++) {
      img1[i] = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    }
    return img1;
  }
}

这使用静态方法初始化静态成员。

答案 3 :(得分:0)

您的语法不正确。你必须在类型之后声明一个数组。

static BufferedImage[] img1 = new BufferedImage[2];

是正确的语法。

这是eclipse编辑过的代码。这确实可以编译。

import java.awt.image.BufferedImage;


public class Test {
    static BufferedImage[] img1 = new BufferedImage[60];
    static{
        for(int i=0;i<60;i++)
        {
        int width = 20;
        int height = 20;
        img1[i] = new BufferedImage((int) (width), (int) (height), BufferedImage.TYPE_INT_RGB);

        }
    }
}

我们还发现了以下问题:

  1. 宽度和高度未声明。我将它们初始化为无意义的数字
  2. 将for循环放在静态块中。代码不能存在于类中,除非它位于类的方法或静态块中。
  3. 这也需要创建一个类Test。
  4. 我确信大部分原因是因为您只提交了代码段。我把它包括在内是为了完整性。此代码将创建60个大小为20x20的缓冲图像