练习如下:
从第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();
}
答案 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!