编辑:要澄清,我的要求之一是使用一个数组。
我在数组中的一个元素中存储多个变量很难。我们正在创建一个非常简单的程序来模仿Microsoft Paint。一个要求之一是将我绘制的每个元素存储到一个数组中,以便每次将窗口最小化然后重新播放时,"油漆"方法重新粉刷了图纸。这是要求
我们假设阵列的最大大小为20。每个元素应包括5个变量:
- char Shape(l for Line,R f for Rectangle,C for Circle) )
- 开始x值
- 开始y值
- 宽度(矩形)或结束x(线)或半径(圆圈)
- 高度(矩形)或结束y(线)或半径(圆圈)
这是我的数组类的代码:
class storeDraws {
final int MAXSIZE = 20;
static int S[];
static int n; //number of draws user makes
static char shape;
static double px, py, w, h;
storeDraws () {
S = new int [MAXSIZE];
n = 0;
shape = 'l';
px = 0;
py = 0;
w = 0;
h = 0;
}
}
我已经阅读了一些可以输入数组的地方(使用MousEreared(Mouseevent E)方法:
storeDraws[] input = new storeDraws{value, value, value, value, value};
,但我认为这对我试图用"油漆"方法重新绘制形状的方法不起作用。我以为我可以以s [n] =(char,double,double,double,double)的标准格式以某种方式通过它,但我会警告说这是非法的。
编辑8:30 AM我让这部分工作。在我的班上,这是我的代码。
class storeDraws {
static char shape;
static int px, py, w, h;
storeDraws () {
shape = 'l';
px = 0;
py = 0;
w = 0;
h = 0;
}
}
i然后在drawpanel类中声明了这一点:
private storeDraws[] store = new storeDraws[20];
private int n = 0;
和drawpanel的MousereREADEAD方法:
public void mouseReleased(MouseEvent e) {
if (drawShape == "line") {
store[n].shape = 'l';
store[n].px = p1.x;
store[n].py = p1.y;
store[n].w = p3.x;
store[n].h = p3.y;
n++;
}
和油漆:
public void paint(Graphics g) {
for (int i = 0; i < n; i++) {
if (store[i].shape == 'l')
g.drawLine(store[n].px, store[n].py, store[n].w, store[n].h);
但是,如果我绘制6行,它只会重新粉刷最后一行。
我认为您需要分开一些想要的功能。您可以为每个元素提供一个类,然后将类的实例存储在绘制元素对象中。
所以你会做这样的事情:
DrawingElement[] drawing = new DrawingElement[20];
DrawingElement circle = new DrawingElement('c', 10, 10, 10, 10);
DrawingElement rect = new DrawingElement('r', 20, 10, 10, 10);
drawing[0] = circle;
drawing[1] = rect;
注意:如果您需要能够在数组中获取对象数(代码中的可变n
),则可能需要使用某些实现链接列表(具有size()
方法),并在添加元素时进行一些检查,以确保您不会超过20个。
linkedlist的示例:
LinkedList<DrawingElement> drawing = new LinkedList<DrawingElement>();
DrawingElement circle = new DrawingElement('c', 10, 10, 10, 10);
DrawingElement rect = new DrawingElement('r', 20, 10, 10, 10);
drawing.add(circle);
drawing.add(rect);
int n = drawing.size(); //will be 2
绘图元素类:
public class DrawingElement
{
char shape;
double px, py, w, h;
public DrawingElement(char shape, double px, double py, double w, double h)
{
this.shape = shape;
this.px = px;
this.py = py;
this.w = w;
this.h = h;
}
//Add getters and setters (accessors and mutators) for class variables
}
我认为您应该为此目的使用集合。创建数组,存储值然后在集合中添加每个数组对象。
您可以使用arraylist而不是数组。这将帮助您存储不同的变量。如果只需要使用数组,则可以使用对象阵列示例代码对象a [] = {'a',10,10.2,10.3,10.4,10.5}
请参阅arraylist
在您的情况下,最好使用Java Collection(arrayList)而不是数组。
第一个点,我们不能将不同类型的变量值存储到数组中。
一个数组是一个容器对象,该对象容纳单个类型的固定值。在这里,您正在尝试将多种类型的变量存储到整数数组中。
请参阅此链接:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
要克服这个缺点,我们使用JDK1.5
引入了Collection API请参阅此链接:
http://docs.oracle.com/javase/tutorial/collections/index.html