【问题标题】:Adding extra code to the increment step of a for loop在 for 循环的增量步骤中添加额外的代码
【发布时间】:2016-10-09 03:41:50
【问题描述】:

喜欢在这里编程的学生。我已经用 java 编程 4 年了,我觉得我对这门语言的工作原理有相当好的理解。然而,最近,我偶然发现了一件让我颇为惊讶的事情。在考虑 for 循环时,我想“嘿,for 循环的增量部分只是一个操作,我可以在里面放其他东西吗?”最终在玩了一些之后,我决定试试这个:

for(int i = 0; i < 10; i++, System.out.print("foo"), System.out.print("bar")){}

这是一个完全空的 for 循环,在循环的增量步骤内有 print 调用。令我惊讶的是,这个循环运行正常,每次循环都会打印 foo 和 bar。据我所知,您可以在其中放置任意数量的方法。

那么这是什么?我搜索它并没有找到任何东西。我从来没有了解过这个。应该避免吗?应该使用吗?为什么它甚至可以工作?我找不到任何显示此使用示例的资源。真正的程序员的任何意见都会很高兴听到!

【问题讨论】:

  • 我的java书开始烧了。

标签: java for-loop syntactic-sugar


【解决方案1】:

好吧,您可以将 for 循环视为一个 while 循环,它为您提供一些“不错”的格式:例如循环

for(int i = 0; i < 10; i++){
    ...
}

等同于:

int i = 0;
while(i < 10){
    ...
    i++;
}

请注意,for 循环基本上只是将您在增量部分中编写的任何内容放在循环的末尾,就在它跳回开始之前。因此,您放在那里的所有内容基本上都将添加到循环内代码的末尾。您可以尝试一下,也许可以更好地了解正在发生的事情:

for(int i = 0; i < 5; System.out.println("i before" +  i),i++,   System.out.println("i after" + i)){ 
    System.out.println("Inside");
}

打印出来的:

Inside
i before0
i after1
Inside
...

顺便说一句:我绝对不会那样使用它,因为它只会使代码更难理解并且没有真正的好处。

【讨论】:

  • (几乎一样,除了i变量的作用域)
【解决方案2】:

Java Language Specification 涵盖了这一点。摘录:

如果存在 ForUpdate 部分,则表达式按从左到右的顺序计算;它们的值(如果有)将被丢弃。

应该使用它吗?在我看来,没有。它使代码更难阅读,而且完全不习惯。

【讨论】:

    【解决方案3】:

    for 循环的语法只是写出几行代码的一种缩短方式。第一部分是初始化,第二部分是条件,第三部分是你想要的! (在大多数情况下是迭代器)。大多数人不会在其中添加任何其他内容,因为它看起来很奇怪,或者他们只是喜欢以特定的方式组织他们的代码。

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多