我的增强型for循环有问题吗?

时间:2013-05-20 09:41:23

标签: java foreach

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

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

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

    }

}

我真的不知道他们的工作方式我显然需要退货吗?

4 个答案:

答案 0 :(得分:6)

如果您想检查数组y中包含的数字x,您应该执行以下操作:

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

    return false;
}

此类for循环通常称为for-eachint i : x基本上意味着Go through the loop 'x' and name the current variable 'i'。然后,如果当前变量i等于您要查找的变量(在您的情况下为y),则return true

答案 1 :(得分: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框架中看到这些概念。

答案 2 :(得分:0)

第一步:算法是什么?

你需要迭代数组中的项目,并检查其中一个是y,你正在寻找的int。

第二步:如果感觉更容易,请使用正常的循环

我从你的问题中假设你对正常的循环感觉更舒服:

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

答案 3 :(得分: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