【问题标题】:Why does this array give me trouble? [duplicate]为什么这个数组给我带来麻烦? [复制]
【发布时间】:2014-06-27 12:02:15
【问题描述】:

如果我这样写:

int array[] = {2, 2, 4, 6, 8, 5};
for (int i : array) {

}

..没关系,但如果我写这个:

int array[] = {2, 2, 4, 6, 8, 5};
int i = 0;
for (i : array) {

}

它给我带来了问题。我的老师说他希望我们总是在顶部进行初始化,不喜欢我们把int 放在for 里面...

还有其他写法吗?

【问题讨论】:

  • int i 和 int i = 0 不一样。
  • 添加语言标签,如 C、C++ 或 JAVA 之类的。
  • 请描述您所谈论的问题。
  • 你是什么意思,“它给我带来了问题”
  • 另找老师,两种语法都很好,如果以后不想重用变量,第一种更好。

标签: java arrays for-loop


【解决方案1】:

您使用的语法是 for 循环的一种特殊情况,有时称为“for-in”循环。你的老师可能想要一个更传统的 C 风格的循环,像这样:

for (int i = 0; i < array.length; i++) {
    // you need to say array[i] to access elements here
}

不同之处在于 for-in 循环不使用计数器(循环感应变量),它使用未初始化的值 i 并在您迭代时将该名称绑定到数组的每个元素。

【讨论】:

    【解决方案2】:

    Java 中的for each loop 需要一个类型,而您还没有提供。你只给了它变量i

    for (type var : arr) {
        // body-of-loop
    }
    

    省略类型是语法错误。如果你的导师坚持你在循环之前声明i,你就必须使用普通的for loop

    int i = 0;
    for (i = 0; i < array.length; i++) {
        // body-of-loop
    }
    

    (虽然我不同意这是好的风格。)

    【讨论】:

      【解决方案3】:

      如果要遍历数组的所有元素,有两种方法:

      当你只需要元素时:

      for (int element : array) {
          ...
      }
      

      当你还需要索引时(i):

      for (int i = 0; i < array.length; i++) {
          int element = array[i];
          ...
      }
      

      对于第二个循环,如果您的老师希望您在顶部声明所有内容,您可以这样做:

      int element;
      for (int i = 0; i < array.length; i++) {
          element = array[i];
          ...
      }
      

      【讨论】:

        【解决方案4】:

        当你使用 for each java 构造时,将int 声明为 for 循环的一部分被认为是完全可以接受的(也是必要的),就像在你的第一个代码块中一样。

        您的老师可能会担心您的变量没有定义值,但在这种情况下这是可以接受的,因为整数 i 将始终绑定到冒号后给定的数组或集合的值.

        【讨论】:

          【解决方案5】:

          如果您使用 foreach 语句(在 Java 中称为“enhanced for loop”),您必须在语句中声明变量的类型,否则将无法编译。如果你想在顶部初始化,你不能使用foreach,而是像这样一个简单的for循环:

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

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

          【讨论】:

            【解决方案6】:

            你正在有效地改变它:

            int array[] = {2, 2, 4, 6, 8, 5};
            for (int i : array) {
            
            }
            

            int array[] = {2, 2, 4, 6, 8, 5};
            for (int i = 0: array) {
            
            }
            

            如果您尝试阅读它,这实际上没有意义。问:“它想做什么?” - 在第一种情况下,您告诉它获取数组中的所有整数。然而在第二个中,你试图以某种方式指定从哪里开始,但是对于代码来说它没有意义:你怎么能从 0 转到一个数组?

            另一种写法是:

            int array[] = {2, 2, 4, 6, 8, 5};
            for (int i = 0; i < array.length; i++) {
               int j = array[i]; // takes the value of the array at index i
            }
            

            这从索引 0 开始,遍历索引 #5,每次将索引增加 1。 java中的数组索引以0开头,以小于长度的1结束,所以i将从0变为5。

            【讨论】:

              猜你喜欢
              • 2015-09-08
              • 2017-07-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-02-13
              • 2011-12-11
              • 2017-10-27
              相关资源
              最近更新 更多