【问题标题】:How can I create a getter method and a setter method for a multidimensionnal array?如何为多维数组创建 getter 方法和 setter 方法?
【发布时间】:2014-06-08 18:41:30
【问题描述】:

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

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

我有几个坐标看起来像这样:(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

这是我从 eclipse 得到的错误:

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

【问题讨论】:

  • 你介意我把 cmets 翻译成英文吗? Est-ce-que ça vous dérangerait si je traduirais vos commentaires du code en Anglais?
  • 请提供可编译的代码。
  • @Runemoro//Absolumt pas c'est avec grd plaisir! Traduit traduit et traduit encore :p
  • @Runemoro//Je voulais dire absolument tu peux!
  • @Pif Paf Pouf:Je sais 等。 :P

标签: java arrays methods get set


【解决方案1】:

代码行:

setPosObsc( posObsc [i][0]);

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

要编译代码,你可以这样写:

setPosObsc(posObsc);

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

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

我在猜测你的数组包含什么。

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

顺便说一句,当 StackOverflow 不是您的母语时,您有勇气用英语给 StackOverflow 写信,这真是太好了。甚至在 Runemoro 进行编辑之前,我就毫不费力地理解了您的问题。

【讨论】:

  • 太棒了!这是我需要的确切答案!Tu geres mon gars!
  • @Runemoro//Sympa je savais pas.Merci a toi.
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    看起来你想要做的是:

    posObsc[i][0] = ordObsc;
    

    如果你在同一个班级,则无需使用 setter。

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

    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);
    

    【讨论】:

    • thk 这正是我需要的答案! T'es le meuilleur merci a toi :)
    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2017-09-09
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多