【问题标题】:For Loop Tracing Issue: Can't Justify OutputFor循环跟踪问题:无法证明输出
【发布时间】:2017-02-18 23:02:21
【问题描述】:

编辑:我在获得软件工程学位后的第一门课程中问了这个问题。我现在意识到这很愚蠢,但我真的很感谢任何花时间回答的人。

我无法跟踪一些代码以获取输出:

int[] a = new int[5];
for (int i = 0; i < a.length; i++)
{
    a[i] = i*3-1;
}
    
    
for (int i = a.length-1; i >= 0; i--)
{
    System.out.print(a[i] + " " );
}
    

这个输出:

11 8 5 2 -1

我不明白为什么第二个变量 'i' 从第一个 For 循环中被放回公式中。有人可以帮我连接这两个循环吗?数组是在第一个循环中定义的,那么为什么会影响第二个呢?我不明白这种关系,也许我只是想念它。

【问题讨论】:

  • "为什么第二个变量 'i' 从第一个 For 循环中被放回公式中" 你是什么意思?您期望得到哪种输出?
  • 第一个循环填充数组以包含[-1, 2, 5, 8, 11]。第二个循环只是向后打印。
  • 第一个循环显然填满了数组。第二个循环显示创建的数组,但它是从最高索引 (4) 到最低索引 (0) 执行的。变量 i 仅保存要处理的数组元素的当前索引号。

标签: java loops for-loop


【解决方案1】:
for (int i = 0; i < a.length; i++) {
  a[i] = i*3-1;
}

在第一个循环(上图)中,i 是循环的增量器,我假设您理解。知道了这一点,我们知道整个循环中i 的值将是0, 1, 2, 3, and 4

对于声明a[i] = i * 3 - 1,它有两个目的。

  1. 一个索引值,用于修改a 数组中的值。
  2. 使用i 的递增值来计算新整数。

例如,在第一次迭代中,i 将是 0。因此,循环内部的代码会将数组的0 位置的值设置为0 * 3 - 1-1。这将在循环的其余部分继续,解释第二个循环在反向打印时打印的值。

【讨论】:

    【解决方案2】:

    我不明白为什么第二个变量 'i' 从第一个 For 循环中被放回公式中。

    i 只是变量的名称。变量i 在计算值时并不重要,它仅用作循环计数器。您可以在任何for 循环中使用j 或任何其他名称,并且仍将获得相同的输出。

    有人可以帮我连接这两个循环吗?数组定义在 第一个循环,为什么会影响第二个?

    数组在第一个循环中填充了值。但请注意,数组最初是在程序开始时声明的。

    int[] a = new int[5];
    

    这意味着数组的范围不仅限于第一个for 循环。它可以在其范围内的任何地方访问。

    所以,在第一个for 循环中,我们正在用值填充数组。在第二个for 循环中,我们正在显示它。

    【讨论】:

    • 数组可能会在第一个循环中填充,但它没有在那里定义。
    • “定义”是指填充值,而不是“声明”。请查看this SO 问题。
    • 我已经读过了。它没有将您所说的内容描述为“定义”。如果有的话int new[5] 可以说是一个“定义”,尽管这不是 JLS 使用的术语。无论哪种方式,“定义”都不是一个好词,用于“在循环中将事物填充到数组中”
    • 我明白了。我只是在随意的意义上使用它。由于“定义”在 Java 中不是一个正式术语,因此我将把它从我的答案中删除。谢谢!
    【解决方案3】:

    “i”的范围在循环内,因此一旦循环结束,变量“i”就不再存在,可以重新实例化。要理解看这段代码:

    public class Example{
        public static void main(String args[]){
            while(isTrue){
               int x += 3; // Int x exists here
            }
            //x does not exist here it is outside of scope so we can make another
            int x = 10;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2013-02-08
      相关资源
      最近更新 更多