如何为多维数组创建getter方法和setter方法?

时间:2014-06-08 18:41:30

标签: java arrays methods get set

首先,对不起我的英语,我是法国人。

这是我试图通过用数学符号写出这个问题来解决的问题:

我有几对坐标如下:(x, y)

An = {(Xn;Yn)}

array[An][(Xn;Yn)] = {{X1;Y1}{X2;Y2}...{Xz;Yz}};

在我的程序中,我需要为多维数组创建一个getter和setter。

这是我的代码:

    //Infos for animations of objects

    //Sorting
    Random random1 = new Random();
    int obscMin=0, obscMax=4; //I sort them to know how many obstacles will have to be created. obsc is the obstacle
    int nbreObsc = obscMin + random1.nextInt(obscMax - obscMin); //nbreObsc is the number of obstacles
    //End of sorting

    /*Here's the model of a table:
     A couple: An={(Xn;Yn)}
     Tableau1[An][(Xn;Yn)]={{X1;Y1}{X2;Y2}...{Xz;Yz}};*/

    float posObsc [] []=new float [nbreObsc] [2]; //New table, which will contain the positions of the obstacles

    //Obstacle position getter and setter
    public float[][] getPosObsc(){//getters
        return posObsc;
    }
    public void setPosObsc(float[][] posObsc){//setters
        this.posObsc=posObsc;
    }
    //End of obstacle position getter and setter

    protected boolean detruireObsc=false; //"detruireObsc" means "destroyObstacle"

    //Algorithm that defines the movement of obstacles
    protected void obscDeplacemt(){
        for(int i=1;i<=nbreObsc;i++){
        //Sorting to determine the Xs
        float ordMin=0,ordMax=width;
        float ordObsc = ordMin + (float)Math.random() * (ordMax - ordMin); //ordObsc means obstacleXPosition
        setPosObsc( posObsc [i][0]);
        //End of sorting
        }
    }
  //End of obstacle movement algorithm

这是我从日食中得到的错误:

The method setPosObsc(float[][]) in the type Activity01Jeux.RenderViewJoueur is not applicable for the arguments (float)

3 个答案:

答案 0 :(得分:0)

代码行:

setPosObsc( posObsc [i][0]);

使用数组数组中的单个setPosObsc()元素调用float方法。但是该方法需要一组数组。

要编译代码,可以写:

setPosObsc(posObsc);

虽然这可能不是你想要的!如果您正在尝试编写一个将float放入特定点的数组的方法,则需要这样的内容:

void setObstacleAt(int obstacleIndex, int boundaryIndex, float shiftDistance) {
    posObsc[obstacleIndex][boundaryIndex] = shiftDistance;
}

我猜测你的数组包含的内容。

作为旁注,您可以考虑使用更长或更精确的方法名称而不使用缩写,而不是编写注释来解释方法名称。在Java中,变量和方法名称的长度没有实际限制。

顺便说一下,如果没有你的第一语言,就有勇气用英语写StackOverflow。在Runemoro的编辑之前,我毫不费力地理解你的问题。

答案 1 :(得分:0)

你的getter和setter方法很好。错误是因为在obscDeplacemt()的最后一行代码中,您正在调用setPosObsc(posObscp [i] [0])。 posObscp [i] [0]会给你一个浮点数,当你的setter方法在参数中需要一个float数组时它才能工作。祝你好运!

答案 2 :(得分:0)

看起来你要做的是:

posObsc[i][0] = ordObsc;

如果您在同一个班级,则无需使用二传手。

如果您希望能够通过索引从外部设置元素值(而不是覆盖整个数组),有两种方法可以解决它:

1)(不推荐)

由于您在getter中暴露整个数组,理论上可以调用

getPostObsc()[i][0] = ordObsc;

2)(推荐)

将您的getter和setter更改为

public float getPosObsc(int x, int y){
    return posObsc[x][y];
}
public void setPosObsc(int x, int y, float val){
    this.posObsc[x][y] = val;
}

现在,您可以使用带有索引的setter更新元素:

setPostObsc(i, 0, ordObsc);