【问题标题】:How exactly do arrays and for loops work together?数组和 for 循环究竟是如何协同工作的?
【发布时间】:2014-10-05 17:41:39
【问题描述】:

我知道数组是用来存储值的,但是当它们与 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;
        }
    }
}

【问题讨论】:

  • 尝试将 System.out.println("a[" + i + "] = " + a[i]); 添加到您的 for 循环中,以帮助您了解发生了什么。

标签: java arrays loops for-loop


【解决方案1】:

不完全确定您要问的问题是什么,但是 - 尝试帮助 - 每次调用 a[i] 时,它都会在每个位置获取 i 的值(也是迭代次数)是否有帮助?实例并使用它来查找相关的数组索引 - 然后将其用于其余的计算。

【讨论】:

  • ok if i = 1 and a.length = 3 then a.length - 1 将是 2,所以从 1 开始它将使用 1 的索引值,即 1 并将其应用于循环然后之后它将再次添加 1 这将是 2 但由于它的
【解决方案2】:

尝试添加此方法进行跟踪。

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]);
 }
}

编辑:那么后台发生了什么?

  1. for 循环将 i 初始化为 1。
  2. a[1](以前是'1')改为(a[0] + a[2])/2 = (1 + 3)/2 = 2)
  3. i 加 1
  4. i 不满足条件 (i
  5. 循环终止,程序也终止。

我认为您缺少的是 i 不代表数组中数字 1 的索引,它是在上下文中使用时的索引本身of a[i] 的意思是“转到 a,在索引 i...中”

【讨论】:

  • 我知道索引从 0 开始,但我很困惑当 for 循环运行时将使用哪些值,它是否只是 1,因为我从 1 开始并且 1 的索引是 1 ?
  • 在您的特定情况下 - 仅使用 2 个值并更改了一个。我会尽快编辑我的答案
【解决方案3】:

你的问题不清楚。如果你能清楚地提出问题,你会得到很好的答案!无论如何:

试着自己思考。 数组位置从“0”开始,也称为数组的索引。 这里循环从值开始 i =1 to i 的值是 i

所以,

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.

【讨论】:

    【解决方案4】:

    当方法 misery(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
    

    4. for 循环中的代码执行后,i 加 1,因此,这个 for 循环的最后阶段执行:i++i 是现在等于 2。

    5. 同样,for 循环检查条件i&lt;a.length-1, (3-1) 是否为true;这次条件为假:i=2,2不小于2。

    6. for 循环终止其“存在”,在这种情况下,方法神秘(a1)已完全执行。

    【讨论】:

    • @JavaBeginner 如果这是正确答案,accept it
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2019-11-10
    • 2023-03-16
    • 2011-06-26
    • 2021-08-15
    • 2012-06-08
    相关资源
    最近更新 更多