Class 处理按钮类

Class 处理按钮类,class,nullpointerexception,processing,Class,Nullpointerexception,Processing,行动如下: 重写第6课的编程练习3 创建一个名为Button的类来替换数组。 a) 创建类并定义 保存有关位置、尺寸和尺寸的信息 颜色此外,还应创建一个类变量, 其中包含特定按钮的标题。 使用构造函数设置 类变量 所以基本上,我必须把以前做的一个练习转换成一个类。 这是我如何在您需要时进行上一个练习的: 所以我试着把它转换成类,但显然它给了我一个错误,我不知道如何修复它。 我的老师还说,我不必将它作为数组保存,而是可以生成许多变量,而不是数组中的数据 该语言正在处理,并给出错误代码NullPoi

行动如下:

重写第6课的编程练习3 创建一个名为Button的类来替换数组。 a) 创建类并定义 保存有关位置、尺寸和尺寸的信息 颜色此外,还应创建一个类变量, 其中包含特定按钮的标题。 使用构造函数设置 类变量

所以基本上,我必须把以前做的一个练习转换成一个类。 这是我如何在您需要时进行上一个练习的:

所以我试着把它转换成类,但显然它给了我一个错误,我不知道如何修复它。 我的老师还说,我不必将它作为数组保存,而是可以生成许多变量,而不是数组中的数据

该语言正在处理,并给出错误代码NullPointerException

class Button
{
 int[] nums;

 Button(int n1, int n2, int n3, int n4)
 {
  nums[0] = n1;
  nums[1] = n2;
  nums[2] = n3;
  nums[3] = n4;
 }

 void display()
 {
  fill(255, 0, 0);
  rect(nums[0], nums[1], nums[2], nums[3]);
 }
};

void setup()
{
 size(800, 800);
 Button butt = new Button(75, 250, 200, 200);
 butt.display();
}

您只声明了
nums
,但没有初始化它。 这会导致一个
NullPointerException
:在构造函数中,您正在访问nums[0],但nums还没有长度。试试这个:

class Button
{
  //remember to initialize/allocate the array
 int[] nums = new int[4];

 Button(int n1, int n2, int n3, int n4)
 {
  nums[0] = n1;
  nums[1] = n2;
  nums[2] = n3;
  nums[3] = n4;
 }

 void display()
 {
  fill(255, 0, 0);
  rect(nums[0], nums[1], nums[2], nums[3]);
 }
};

void setup()
{
 size(800, 800);
 Button butt = new Button(75, 250, 200, 200);
 butt.display();
}
在将来,始终确保您尝试访问(数组/对象)属性的变量首先被初始化/分配(否则您将再次得到
NullPointerException
,这一点都不好玩)

正如@v.k.so很好地指出的,最好是有可读的代码并删除一些冗余。 在将按钮的x、y、宽度和高度存储在数组中之前。这就是阵列所能做的:存储数据,就这样!但是,您的类不仅可以存储与单个易读属性相同的数据,还可以domore:functions!(例如display())

因此,更具可读性的版本:

class Button
{
  //remember to initialize/allocate the array
 int x,y,width,height;

 Button(int x,int y,int width,int height)
 {
  this.x = x;
  this.y = y;
  this.width = width;
  this.height = height;
 }

 void display()
 {
  fill(255, 0, 0);
  rect(x,y,width,height);//why don't we use this.here or everywhere ?
 }
};

void setup()
{
 size(800, 800);
 Button butt = new Button(75, 250, 200, 200);
 butt.display();
}
是的,读起来比较容易,但是你可能会问,这是怎么回事? 好的,它是一个关键字,允许您访问对象的实例(将来您选择实例化时可能会访问该实例),从而访问对象的属性(变量的类版本)和方法(函数的类版本)。关于Java中的OOP,有很多很好的东西需要学习,但是您可以通过一种漂亮的可视化处理方法一步一步地学习。 如果您还没有,请查看


祝您在处理过程中学习OOP好运

错误信息是什么?是的。。。但是类本身已经“保存”了所有数据。因此,您可以替换具有完整名称的变量数组,使代码更可读,例如
intx,y,w,h
rect(x,y,w,h)。它将以同样的方式工作,但更具可读性。