【问题标题】:Setting an array variable being passed to a function设置传递给函数的数组变量
【发布时间】:2012-10-19 09:33:33
【问题描述】:

好吧,这是一个非常简单的问题,我对此感到很困惑....但是这让我很头疼。 以下是出处:

import java.util.Arrays;
public class InputValues {  
    public int[] myarrayvar;
    public InputValues(int[] myarraypass) {     
    ---- help here
    }
    public void init() {        
    ---help here
    }
    public int[] getmyarrayvar() {
        return myarrayvar;
    }
    public void setmyarrayvar(int[] myarraypass) {
        this.myarrayvar= mayarraypass;
    }
}

我用

来称呼它
InputValues inputValues = new InputValues(myarraypass);
inputValues.init();

myarraypass 是 int[] 类型。

就像我说的那样,这应该很容易......但由于某种原因我无法让它工作......

【问题讨论】:

  • 在什么意义上你不能让它工作?你遇到了什么问题?

标签: java arrays function setter


【解决方案1】:
  1. 如果您的 myarrayvar 是公开的,那么您为什么需要 setter 和 getter。仅当您的成员无法访问外部世界时,您才需要它们,即它被标记为私有。
  2. Nest,您可以在构造函数中使用以下内容来设置数组,
public InputValues(int[] myarraypass) { 

    this.myarrayvar = new int[myarraypass.length];    

    System.arraycopy(myarraypass, 0, this.myarrayvar, 0, myarraypass.length );

}

【讨论】:

    【解决方案2】:

    您可以尝试以下方法:

    1. 将实例变量访问权限从public更改为private

    2. 在构造函数中,您可以使用以下行:

      this.myarrayvar = myarraypass;

    但是请记住,如果myarraypass 在类InputValues 之外被修改,myarrayvar 也会受到影响。

    如果您不希望这种行为发生,您应该逐个索引地复制。

    this.myarrayvar = new int[myarraypass.length];
    for(int i=0; i<myarraypass.length;i++)
        this.myarrayvar[i] = myarraypass[i];
    

    this.myarrayvar = (int[]) myarraypass.clone();
    

    this.myarrayvar = new int[myarraypass.length];
    System.arraycopy(myarraypass, 0, this.myarrayvar, 0, myarraypass.length);
    

    【讨论】:

    • 我做了 1. 并在 setter 中插入了一个 print cmd ......但这从不打印..所以我猜它永远不会被调用,我稍后使用数组进行计算并返回空指针异常。由于某种原因,未设置 var。
    • 让它工作..我把源代码从刹车中放出来了......现在我做对了.. :-) 谢谢
    猜你喜欢
    • 2011-07-29
    • 2020-07-28
    • 2015-04-06
    • 1970-01-01
    • 2017-09-12
    • 2018-01-20
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多