单个数组,用于在每个元素中存储多个变量

时间:2015-05-05 11:53:37

标签: java arrays graphics

编辑:澄清一下,我的一个要求是使用单个数组。

我在将多个变量存储到数组中的单个元素时遇到问题。我们正在创建一个非常简单的程序来模仿Microsoft Paint。其中一个要求是将我绘制的每个元素存储到一个数组中,以便每次窗口最小化然后重新显示时,“paint”方法都会重新绘制图形。以下是要求

我们假设数组的最大大小为20。 每个元素应包含5个变量:

  • char形状(l代表直线,r代表矩形,c代表圆圈)
  • 开始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;
    }
}

我已经阅读了一些我可以输入数组的地方(使用mouseReleased(MouseEvent e)方法:

storeDraws[] input = new storeDraws{value, value, value, value, value};

但是我不认为这会影响我试图用'paint'方法重绘形状。我以为我可以用S [n] =(char,double,double,double,double)的标准格式以某种方式传递它,但我得到警告,这是非法的。

编辑上午8:30 我得到了这部分工作。在我的课堂上,这里是我的代码。

class storeDraws {
    static char shape;
    static int px, py, w, h;

    storeDraws () {
        shape = 'l';
        px = 0;
        py = 0;
        w = 0;
        h = 0;
    }
}

然后我在DrawPanel类中声明了这个:

private storeDraws[] store = new storeDraws[20];
private int n = 0;

和DrawRenel的MouseReleased方法:

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行,它只会重新绘制最后一行。

5 个答案:

答案 0 :(得分:1)

我认为您需要分离一些您想要的功能。您可以为每个元素创建一个类,然后将该类的实例存储在DrawingElement对象的数组中。

所以你要这样做:

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
}

答案 1 :(得分:0)

我认为你应该为此目的使用集合。创建数组,存储值 然后在集合(列表)中添加每个数组对象。

答案 2 :(得分:0)

首先,我们不能将不同类型的变量值存储到数组中。

数组是一个容器对象,它包含固定数量的单个类型的值。 在这里,您尝试将多种类型的变量存储到整数数组中。

请看这个链接:

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

为了克服这个缺点,我们在JDK1.5中引入了Collection API

请参阅此链接:

http://docs.oracle.com/javase/tutorial/collections/index.html

答案 3 :(得分:0)

你可以使用arraylist而不是array。这将帮助您存储不同的变量。 如果只需要使用数组,则可以使用对象数组 示例代码 对象a [] = {'a',10,10.2,10.3,10.4,10.5}

答案 4 :(得分:0)

请参阅ArrayList

在您的情况下,最好使用Java Collection(ArrayList)而不是Array。