当前位置: 首页 > 面试题库 >

为什么在for循环的迭代部分不更改pre到post的增量会有所不同?

燕正德
2023-03-14
问题内容

为什么这样

 int x = 2;
    for (int y =2; y>0;y--){
        System.out.println(x + " "+ y + " ");
        x++;
    }

打印与此相同?

 int x = 2;
        for (int y =2; y>0;--y){
            System.out.println(x + " "+ y + " ");
            x++;
        }

据我所知,后增量首先被“按原样”使用,然后被增量。是先添加预增量然后使用。为什么这不适用于for循环的主体?


问题答案:

循环等效于:

int x = 2;
{
   int y = 2;
   while (y > 0)
   {
      System.out.println(x + " "+ y + " ");
      x++;
      y--; // or --y;
   }
}

从阅读该代码可以看到,在for循环的第三部分中使用post还是pre decrement运算符并不重要。

更一般地,任何形式的for循环:

for (ForInit ; Expression ; ForUpdate)
    forLoopBody();

完全等同于while循环:

{
    ForInit;
    while (Expression) {
        forLoopBody();
        ForUpdate;
    }
}

for循环更紧凑,因此更易于解析这种常见用法。



 类似资料:
  • 问题内容: 我读到 增强的for循环 比普通的 for循环 更有效: http://developer.android.com/guide/practices/performance.html#foreach 当我搜索它们的效率之间的差异时,我发现的是:如果是普通的for循环,我们需要一个额外的步骤来找出数组的长度或大小等, 但这是唯一的原因,增强的for循环优于普通的for循环吗?在那种情况下,

  • 我正在迭代Java 7循环和Java 8 循环中的列表。Java 8 循环希望其中的变量不会更改。例如: 有人能解释一下为什么吗?是Java 8的弊端吗?

  • 问题内容: 我的代码产生了意外的结果。看来我的for循环跳过了第一次迭代,我不明白为什么。 返回…(假设输入的数字是姓名) 为什么第一个get.nextLine()被跳过? 问题答案: 当前,您对Scanner#nextInt的调用不占用换行符,因此将其传递给您的第一次调用,因此 不会 阻塞。 您将需要添加 通话后,您的第一个通话将阻止。

  • 我一直在读一本面向初学者的书,“第一头HTML5编程”,其中有这样一段代码: 目前,如果我调用,它将返回下一次显示是在下午5:00。我将循环条件更改为“I<=movie.showtimes.length;”但它仍然只运行一次,并且只显示下午5点。循环只迭代一次,即使我重写了这个函数: 不是应该跑两次吗?

  • 我正在学习Java认证,在一次模拟考试中,我看到了一个非常奇怪的for-loop实现。该练习显示了以下语法: 一开始,我认为这是一个语法错误,因为我一直知道“for循环”的语法需要大括号,或者,如果只有一条指令需要迭代,我们可以跳过大括号,并在循环之后将语句对齐。-因为我以前没见过以分号“;”结尾的For循环-- 然后我试图找到一些关于它的留档,但不幸的是,我找不到任何解释为什么是合法代码声明。仅

  • 问题内容: 根据Java语言规范§14.14.2,增强循环的变量必须在循环本地。换句话说,它将编译为: 但这不是: JLS没有为这种语言设计选择提供任何依据。我可以看到如果通过或通过注释修改了局部变量的原因,为什么必须出现类型名称,但是我不明白为什么不允许在其他地方声明的变量的裸名。是否有人对为什么施加此限制有任何见解? 编辑 到目前为止,有几个答案似乎表明,循环之外发生的事情是按这种方式设计语言