【问题标题】:in a for-loop, what does the (int i : tall) do, where tall is an array of int [duplicate]在 for 循环中, (int i : tall) 做了什么,其中 tall 是一个 int 数组 [重复]
【发布时间】:2013-10-21 21:13:49
【问题描述】:

正如标题所说,有人提示我,如果我想打印数字数组中所有内容的总和,我应该使用上述参数进行 for 循环(如果有进一步解释,代码将跟随需要)。但是,它的确切定义是什么?我的意思是:-部分。是吗;对于数组 tall 中的每个数字 i?

import java.util.*;

class Uke36{
    public static void main(String[]args){

    Scanner input=new Scanner(System.in);
    int[] tall=new int[5];

    for (int i=0; i<=4; i++){
        System.out.println("Vennligst oppgi det " + (i+1) + ". tallet: ");
        tall[i]=input.nextInt();
    }
    int sum = 0;
    for(int i : tall){
        sum+=;
    }
    }
}

【问题讨论】:

标签: java arrays for-loop


【解决方案1】:

这就是for-each 循环在 Java 中的表示方式。

for (int i : tall) {
  sum += i;
}

读作:对于名为tall的数组中的每个整数i ...

【讨论】:

  • 啊,好吧。谢谢!然后,另一个小问题:在它下面我已经编辑,现在写了 sum+=i;这是否意味着对于数组 tall 中的每个整数 i,它都应该将该值添加到已经存在的整数和中?
  • @Makri sum += i; 那就是 sum= sum+i;
【解决方案2】:

这是增强循环。它在 Java 5 中被引入以简化循环。你可以把它读成“For each intin tall”,就像写:

for(int i = 0; i < tall.length; i++)
   ...

虽然更简单,但不如for循环灵活。。当你不关心元素的索引时,它很好。

More reading.

【讨论】:

  • +1 用于指向索引。
【解决方案3】:

增强的for循环等于

for (int i=0; i < tall.length; i++) {
    System.out.println("Element: " + tall[i]);
}

下面的表格

 for(int i : tall){

是经典for循环的简写形式。

注意:

但是使用上面的表格有一个条件

表格Language specification

Expression 的类型必须是 Iterable 或数组类型(第 10.1 节),否则会发生编译时错误。

这里是docs from oracle

终于

 int sum = 0;
    for(int i : tall){
        sum+=;  // sum = sum+i
    }

这意味着添加数组中的所有元素。

如果它收集,看看该循环如何转换:What are for-each expressions in Java translated to?

【讨论】:

  • 不,这不会转换为这个循环。循环使用迭代器。
  • @RohitJain Java 数组是iterable,对吧?
  • 糟糕。很抱歉混淆:(
  • @RohitJain 对我来说发生了很多次,那种困惑:P
【解决方案4】:

for(int i : listOfInt)

这是高级(增强)for 循环,也称为for-each 循环,它遍历: 右侧提供的列表的每个元素,将每个值迭代地分配给变量在: 的左侧。

这基本上意味着,对于数组/数组列表中的每个元素(在您的情况下,它是一个名为 tail 的数组)。

查看docs here 了解更多详细信息。

【讨论】:

    【解决方案5】:

    “增强”for循环

    中级

    按顺序遍历数组所有元素的常用方法是使用“标准”for 循环,例如,

    for (int i = 0; i < myArray.length; i++) {
        System.out.println(myArray[i]);
    }
    

    所谓的增强 for 循环是做同样事情的一种更简单的方法。 (语法中的冒号可以读作“in”)

    for (int myValue : myArray) {
        System.out.println(myValue);
    }
    

    在 Java 5 中引入了增强的 for 循环,作为一种更简单的方式来遍历集合的所有元素(这些页面中不包含集合)。它也可以用于数组,如上例所示,但这不是最初的目的。

    增强的 for 循环简单但不灵活。当您希望按从头到尾的顺序遍历数组元素时,可以使用它们,并且您不需要知道当前元素的索引。在所有其他情况下,应该首选“标准”for 循环。

    另外两种语句类型,break 和 continue,也可以控制增强 for 循环的行为。

    复制自http://www.cis.upenn.edu/~matuszek/General/JavaSyntax/enhanced-for-loops.html

    对于所有第一次尝试在谷歌上找到答案的人来说,这是一个谦虚的要求

    【讨论】:

      【解决方案6】:

      阅读documentation:

      for 语句还有另一种形式,用于迭代 集合和数组 这种形式有时被称为 增强的 for 语句,可用于使您的循环更多 紧凑且易于阅读。

      以下程序 EnhancedForDemo 使用增强的 for 循环 通过数组:

      class EnhancedForDemo {
              public static void main(String[] args){
                   int[] numbers = 
                       {1,2,3,4,5,6,7,8,9,10};
                   for (int item : numbers) {
                       System.out.println("Count is: " + item);
                   }
              }
          }
      
      In this example, the variable item holds the current value from the numbers array. The output from this program is the same as before:
      
      Count is: 1
      Count is: 2
      Count is: 3
      Count is: 4
      Count is: 5
      Count is: 6
      Count is: 7
      Count is: 8
      Count is: 9
      Count is: 10
      

      【讨论】:

        【解决方案7】:

        这是一个for-each循环

           int[] arr=new int[] {1,3,5,7,8};
           for(int i:arr){
               System.out.println(i); 
           }
        

        输出将是

         1
         3
         5
         7
         8
        

        但这仅适用于 JDK 1.7 及更高版本。 JDK 早期版本支持 Object 类型的 for-each 循环。

        并遵循类似于这个for-each的for循环

            int[] arr=new int[] {1,3,5,7,8};
            for(int i=0;i<arr.length;i++){
                System.out.println(arr[i]);
            }
        

        【讨论】:

          猜你喜欢
          • 2017-08-30
          • 2015-06-17
          • 2015-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-21
          • 2019-06-25
          • 1970-01-01
          相关资源
          最近更新 更多