繁体   English   中英

在Java方法中更改数组值而不将其传递给方法

[英]Changing an array value in Java method without passing it to method

我想创建一个函数来更改数组中的值,但是我不想将数组传递给函数。 这是代码的一部分,在另一个函数中创建的data[] array

private int[] data;

public static void main(String[] args) {
    setPixel(3,2); //I'm not sure at this part?
}

public void setPixel(int i,int x){ 
    data[i] = x; //Is there any possible way to change data[]  
}

您应该围绕main方法创建一个类,并在main实例化该类。 然后,使data成为类的变量,就可以从setPixel()方法中访问它。 这是完成要求的正确的面向对象(OO)方法。

public class Data {
    private int[] data;

    public Data(int size) {
        data = new int[size];
    }

    public void setPixel(int i, int x) {
        data[i] = x;
    }

    public static void main(String[] args) {
        Data instance = new Data(5);
        instance.setPixel(3, 2);
    }
}

这是我的答案,非常类似于@zposten提供的内容,但也解决data[] array created at another function要求下data[] array created at another function的OP的data[] array created at another function

public class EncapsulatedArray
{
    private final int[] data;

    public EncapsulatedArray(final int[] data)
    {
        this.data = data;
    }

    public int getPixel(final int i)
    {
        return data[i];
    }

    public void setPixel(final int i, final int x)
    {
        data[i] = x;
    }

    @Override
    public String toString()
    {
        return Arrays.toString(data);
    }
}

为了验证和演示,我使用了:

public class EncapsulatedArrayDemo
{
    public static void main(final String[] args)
    {
        final int[] dataFromElsewhere = { 0, 1, 2, 3 };

        final EncapsulatedArray ex = new EncapsulatedArray(dataFromElsewhere);

        System.out.println(ex);

        ex.setPixel(2, 7 + ex.getPixel(2));

        System.out.println(ex);
    }
}

并获得以下内容进行控制台:

{ 0, 1, 2, 3 }
{ 0, 1, 9, 3 }

诸如此类(玩具)示例的包装程序类有用的原因有多种,但是如果您希望“保护”数据数组不受外部更改的影响(即仅允许setPixel(int, int)修改data值),则您将需要更多类似@zposten的答案的东西,它永远不会让data数组对象从包装器中逸出。 如果确实需要使用created at another function的数据数组created at another function则需要类似我的解决方案的东西-但您必须采取其他步骤来确保该数组不会在包装程序的后面摆弄。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM