[英]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.