首先,对不起我的英语,我是法国人。
这是我试图通过用数学符号写出这个问题来解决的问题:
我有几对坐标如下:(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)
答案 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);