-1

所以我很难理解增强的for循环..

编写一个名为 contains() 的方法,该方法接受一个整数数组和一个整数值。如果数组包含指定的值,则该方法应返回 true,否则返回 false。

boolean contains (int [] x, int y) {
    for (y : x) {

    }

}

我真的不明白他们是如何工作的,我显然需要退货?

4

4 回答 4

6

如果要检查y数组中的数字是否包含x,则应执行以下操作:

boolean contains (int [] x, int y) {
    for (int i : x) {
       if (i == y) return true;
    }

    return false;
}

这种类型的for循环通常称为for-each. int i : x基本上是指Go through the loop 'x' and name the current variable 'i'。然后,如果当前变量i等于您正在寻找的变量(在您的情况下 - y),那么return true.

于 2013-05-20T09:42:47.300 回答
0

如果没有在冒号 (:) 符号左侧定义的数据类型,增强的 for 循环将无法工作。

for (int i : x)   // int(in this case) is necessary at left side and array type is necessary at right side
{

}

还要使用用户定义的集合,那么您应该实现Iterable接口以使用 foreach 循环,就像您在上面使用的一样。您将在 Collection 框架中看到这些概念。

于 2013-05-20T09:46:59.520 回答
0

第一步:算法是什么?

您需要遍历数组中的项目,并检查其中一个是否是y,您正在寻找的 int 。

第二步:如果感觉更容易,请使用普通的 for 循环

我从您的问题中假设您对正常的 for 循环更满意:

boolean contains (int [] x, int y) {
    for (int i = 0; i < x.length; i++) { //loop over each item in the array
        if (x[i] == y) return true; //if the i-th item in x is y,
                                    //you are done because y was in x
    }
    return false; //you have not found y, so you return false here
}

第三步:转化为for-each循环

boolean contains (int [] x, int y) {
    for (int item : x) { //in this loop, item is x[i] of the previous code
        if (item == y) return true;
    }
    return false;
}

笔记:

  • 在您的代码中,您在循环中重用 y,这不是您想要的:y 是您要查找的内容,您需要将其与 x 的内容进行比较。
  • 数组上的 for-each 循环的语法是:for (Type item : array). 例如,您不能通过Type在循环之前声明变量来省略。
于 2013-05-20T09:48:06.747 回答
0

使用普通的 for 循环,您将编写如下内容:

boolean contains (int [] x, int y) {
    for (int i=0; i<x.length; i++) {
         if(y == x[i] return true;
    }    
    return false;
}

然而,使用增强的循环,它可以简化如下。

boolean contains (int [] x, int y) {
    for (int k: x) {
       if(y == k) return true;
    }
    return false;
}

这只是一个小小的便利。

您可能会发现以下内容很有用:https ://blogs.oracle.com/CoreJavaTechTips/entry/using_enhanced_for_loops_with

于 2013-05-20T09:49:41.553 回答