我知道数组用于存储值,但是当它们与for循环一起使用时,我会忽略正在发生的事情。我知道输出是100,因为我在终端中运行它,但我需要理解的是它是如何从使用for循环和数组得到100因为我不确定它是否使用所有三个值或只是第一。提前致谢
问题在于:
public class arrays {
public static void main (String[] args) {
int[] a1 = {1, 1, 3};
mystery(a1);
}
public static void mystery(int[] a) {
for (int i = 1; i < a.length - 1; i++) {
a[i] = (a[i - 1] + a[i + 1]) /2;
}
}
}
答案 0 :(得分:0)
不完全确定你要问的问题是 - 尝试和帮助 - 每次调用[i]时它是否有帮助,它需要i的值(也是迭代次数)在每个实例上并使用它来查找相关的数组索引 - 然后将其用于其余的计算。
答案 1 :(得分:0)
尝试添加此方法进行跟踪。
public class arrays{
public static void main(String[] args) {
int[] a1 = {1, 1, 3};
mystery(a1);
}
public static void mystery(int[] a) {
for (int i = 1; i < a.length - 1; i++) {
a[i] = (a[i - 1] + a[i + 1]) /2;
printArray(a);
}
public void printArray(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println("array[" + i + "] is now " + arr[i]);
}
}
编辑:那么后期会发生什么?
我认为您缺少的是 i 不代表数组中数字1的索引,它是在上下文中使用时的索引本身[ i ]的意思是“转到a,索引我 ...”
答案 2 :(得分:0)
调用方法错误(a1)时会发生什么:
1。 int i
初始化为1
2。条件if i*a.length-1, which is (3-1)
已被检查;这种情况属实;
3。因为 2。的条件为true
,所以执行for循环中的代码:
a[i] = (a[i - 1] + a[i + 1]) /2 => a[1] = (a[1-1]+a[1+1])/2 => a[1]=(a[0]+a[2])/2 =>
=> a[1]=(1+3)/2 => a[1]=2
执行for循环中的代码后, 4。,i
增加1,因此执行此for循环的最后一个阶段:i++
, i
现在等于2。
5. 再次,for循环检查条件i<a.length-1, (3-1)
是否为true
;这一次,条件是假的:i=2
,2不小于2.
6。 for循环终止其#34;存在&#34;,在这种情况下,方法之谜(a1)已完全执行。
答案 3 :(得分:0)
你的问题不明确。如果你能清楚地提出问题,你会得到很好的答案!无论如何:
试着想一想自己。 数组位置从&#34; 0&#34;开始。它也被称为数组的索引。 这里的循环是从值开始的 i = 1到 i&lt; (array&#39; s length)-1 的值,即i&lt; 2作为数组的长度= 3
所以,
for(int i=1 ; i < a.length - 1; i++){
a[i] = (a[i - 1] + a[i + 1]) /2;
}
现在初始值为i = 1 ,然后自己在脑海中运行代码:
1.. for i = 1,
**a[i] = (a[i - 1] + a[i + 1]) /2;**
gives a[1] = (a[0] + a[2])/2 ==> a[1] = (1+3)/2 ==> a[1] = 2
Important : you have given **i < a.length-1**
Now, a.length = 3 ok?
a.length -1 = 2 ok?
so i< a.length-1 will stop at i equals 1
So, your program will give {1,2,3} as for loop will iterate from i =1 to i=1 got it?
So only 1 value i.e. a[1] will gets changed.. a[0] and a[2] will remain same.