For循环不会增加Java

时间:2014-02-05 17:55:12

标签: java

所以我对Java很新,我正在尝试编写一个for循环来遍历图像中的所有像素,但由于某些未知原因,for循环从不递增。当我尝试运行代码时,它打印出图像的高度和宽度,分别分配给变量“height”和“width”,然后输入for循环,但只输出0和0之前完成运行。

public class ImageProcessor {
    public static Pic image;
    public static Pic modImage;
    public static int width;
    public static int height;
    public static int average;
    public static Pixel modPixel;

    public static void main(String[] args) {
            Pic image = new Pic(args[0]);
            int width = image.getWidth();
            int height = image.getHeight();
            System.out.println(width);

            System.out.println(height);

            greyscale();
    }

    public static Pic greyscale() {
        for (int w = 0; w <= width; w++) {
            for (int h = 0 ; h <= height; h++) {
                System.out.println(w);
                System.out.println(h);
            } 
        }
        return image;
    } 
}

4 个答案:

答案 0 :(得分:6)

您的主要方法将widthheight声明为local变量,遮蔽具有相同名称的静态变量,并将它们设置为默认值0。将main方法中的代码更改为:

        width = image.getWidth();
        height = image.getHeight();

答案 1 :(得分:1)

问题是你没有将getWidth和getHeight结果分配给顶部的静态变量。

因为你写过:

int width = ...

它实际上创建了一个名为“width”的 new 局部变量。当调用greyscale方法时,它不知道这个变量。

如果您将这些行更改为:

width = ...

它会将它分配给静态变量。

作为一般原则,甚至更好的目的是避免使用全局(即静态)变量传递状态。而是在调用时为灰度方法提供所需的一切。

public static Pic greyscale(int width, int height)

这意味着当你使用方法时,你永远不必依赖世界的外部状态是正确的,使你的程序的推理变得更容易,并且你不太可能通过改变宽度/高度来引入错误。其他代码。

答案 2 :(得分:0)

您的main方法定义了同名的局部变量;它们会影响您的静态widthheight字段;

public static int width;  // <-- default to 0.
public static int height; // <-- default to 0.

public static void main(String[] args) {
  Pic image = new Pic(args[0]);
  width = image.getWidth();   // <-- use the static width
  height = image.getHeight(); // <-- use the static height

  System.out.println(width);
  System.out.println(height);
  greyscale();
}

答案 3 :(得分:0)

在主方法中删除intwidth之前的height