试图覆盖方法中的变量

时间:2017-11-21 09:33:46

标签: java

我遇到了一个问题,目前我被困住了。基本上我想要做的是我想要一个变量数组,将其覆盖,将其写入另一个变量,然后再次覆盖初始变量,再将其保存为另一个变量并比较两个保存的变量

请记住以下代码:

int[] Item1 = {1,1}
int[] SavedItem1;
int[] SavedItem2;

Program1();
SavedItem1 = Item1; 
Program2();
SavedItem2 = Item1;

player.sm("The value is: " + SavedItem1[0] + " and " + SavedItem2[0] + ".");

public static void Program1() { Item1 = {2,2,2,2,2};}
public static void Program2() { Item1 = {3,4,4,5,5};}

但是返回游戏名称的是:值为1和1,显然它不会覆盖程序中的值,我不明白为什么不能和我不知道如何解决这个问题,会是什么做我想做的事的正确方法是什么? (正确的输出是:值为2和3.)

谢谢大家

-Antoine

2 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:来自 - Javadoc

  

设置公共E集(int index,E element)

     

用此替换此列表中指定位置的元素   指定的元素。

     

指定者:在接口列表中设置

     

覆盖:在类AbstractList

中设置      

参数:index - 要替换​​元素的元素的索引 - 元素   存储在指定位置

     

返回:先前在指定位置的元素抛出:   IndexOutOfBoundsException - 如果索引超出范围(索引< 0 ||   index> = size())

所以你可以简单地覆盖特定位置的值......

答案 1 :(得分:0)

将数组分配给另一个数组时,它们都指向相同的array。因此在你的代码中,SavedItem1和SavedItem2基本相同,它指向数组Item1的第一个元素。

public static void Program1() { Item1 = {2,2,2,2,2};},这里的Item1在a中 不同的范围。因此,对它的更改不会影响main方法中的Item1。

要实现您要执行的操作,请返回新数组并将其分配给Item1。

public static int[] Program1() { return new int [] {2,2,2,2,2};   

同样适用于Program2。或者重写Item1变量使其适当地限定范围(即,在Main和方法Program1和Program2上方)