我想创建一个函数来更改数组中的值,但我不想将数组传递给函数。以下是代码的一部分,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[]
}
在另一个函数中创建。
# Save the model checkpoint periodically.
if step % 10 == 0 or (step + 1) == FLAGS.max_steps:
checkpoint_path = os.path.join(FLAGS.train_dir, 'model.ckpt')
saver.save(sess, checkpoint_path, global_step=step)
export_dir = FLAGS.export_dir
print 'Exporting trained model to ' + FLAGS.export_dir
export_saver = tf.train.Saver(sharded=True)
model_exporter = exporter.Exporter(export_saver)
#
# TODO: where to find x and y?
#
signature = exporter.classification_signature(input_tensor=x, scores_tensor=y)
model_exporter.init(sess.graph.as_graph_def(),
default_graph_signature=signature)
model_exporter.export(export_dir, tf.constant(FLAGS.export_version), sess)
答案 0 :(得分:2)
您应该围绕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);
}
}
答案 1 :(得分:0)
这是我的回答,这与@zposten提供的内容非常相似,但也解决了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的回答,它永远不会让{{1}数组对象从包装器中转义。如果您确实需要使用数据阵列data
,则需要使用类似我的解决方案 - 但是您必须采取其他措施来确保阵列不会在包装器后面摆弄#39回来了。