我正在尝试理解以下Java练习。即使运行调试器,我也不了解第二次和第三次打印输出的细节:
1,2,3,4
1,2,4,4
1,2,4,8
据我所知,第一个打印是数组,第二行是打印[2]元素的数组和第三行[3]元素。这是代码:
public class TR1
{
public static void main(String[] args)
{
int[] v = {1, 2, 3, 4 };
print(v);
x(v, v[2] - 1);
print(v);
x(v, v[3] - 1);
print(v);
}
public static void x(int array[], int y)
{
array[y] = array[y - 1] * 2;
}
public static void print(int array[])
{
System.out.print(array[0]);
for (int i = 1; i < array.length; i++)
System.out.print(", " + array[i]);
System.out.println();
}
}
答案 0 :(得分:5)
让我们简要介绍一下发生的第一件事。你从这个数组开始:
1 2 3 4
打印时毫不奇怪。
然后你跑:
x(v, v[2] -1 ) ... evaluates to
x(v, 3 - 1) ... evaluates to
x(v, 2)
基于以下内容更改数组:
array[y] = array[y - 1] * 2;
让我们将y插入2(见上文):
array[2] = array[1] * 2;
array[2] = 2 * 2;
导致:
1, 2, 4, 4
所以,真正的答案是:你甚至不需要调试器。一张纸,一支笔和一点点思考更有效地揭示了这些秘密&#34;这里。
答案 1 :(得分:2)
让我们看看这个方法的作用:
public static void x(int array[], int y)
{
array[y] = array[y - 1] * 2;
}
它采用索引y-1
处的值,将其乘以2
,然后将此结果分配给索引y
。
启动数组:{1,2,3,4}
使用v[2] - 1
的来电获取索引2
(3
)的值,并选择1
,我们拥有y = 2
。
根据我们之前所说的,该方法获取索引1
(y-1
)的值2
,将其乘以2
,以便我们获得{{1} },并将其分配给索引4
(2
)。
当前数组:y
使用{1,2,4,4}
的来电获取索引v[3] - 1
(3
)的值,并选择4
,我们拥有1
。
根据我们之前所说的,该方法获取索引y = 3
(2
)的值y-1
,将其乘以4
,以便我们获得{{1} },并将其分配给索引2
(8
)。
当前数组:3
答案 2 :(得分:1)
print
始终打印整个数组。 x
和y
正在对数组进行更改。
请记住,v[x]
只是一个整数。例如,v[2]
最初只是3
,因此v[2] - 1 = 2
。因此,它会在v[2]
的第一次和第二次调用之间修改print
。