处理按钮类

时间:2014-10-17 08:24:38

标签: class nullpointerexception processing

练习如下:

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

所以基本上,我必须将我以前的练习转换为课程。 这就是我上次练习的方式,以备不时之需:http://pastebin.com/RqM6hj6K

所以我试着将它转换为类,但显然它给了我一个错误,我看不出如何解决它。 我的教学也说我不必将它保留为数组,而是可以代替数组中的数据而创建许多变量。

语言正在处理并提供错误代码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();
}

1 个答案:

答案 0 :(得分:1)

您只是声明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。很好地指出,最好有可读代码并删除一些冗余。 在按钮的x,y,宽度和高度存储在数组中之前。这就是阵列所能做到的:存储数据就是这样!但是,您的课程不仅可以存储与单个易于阅读的属性相同的数据,还可以执行更多:功能! (例如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();
}

是的,它更容易阅读,但您可能会问this的交易是什么? 好吧,它是一个关键字,允许您访问对象的实例(当您选择实例化时可能会在将来),因此它的属性(变量的类版本)和方法(类函数的版本)。在Java中使用OOP方面需要学习很多很好的东西,但是你可以在Processing中采用一种漂亮而直观的方法一步一步。 如果您还没有,请查看Daniel Shiffman's Objects tutorial

祝你在处理中学习OOP!