Java 在这种情况下,如何从for更改为foreach?

Java 在这种情况下,如何从for更改为foreach?,java,android,for-loop,foreach,Java,Android,For Loop,Foreach,在我的Android应用程序中,我有类似C的简单“for循环”,如下所示: for (int i = 0; i < max_count; i++) { // I must use the value of 'i' in the for loop body } int[] items = new int[3]; items[0] = 3; items[1] = 6; items[2] = 7; int sum = 0; for( int value : items ) {

在我的Android应用程序中,我有类似C的简单“for循环”,如下所示:

for (int i = 0; i < max_count; i++) {
  // I must use the value of 'i' in the for loop body

}
int[] items = new int[3];
items[0] = 3;
items[1] = 6;
items[2] = 7;

int sum = 0;

for( int value : items ) {
    sum += value;
}

// at this point sum = 16
for(int i=0;i
但是Android studio给了我一个Lint警告,建议将for循环更改为foreach循环


您能告诉我如何切换到foreach循环并在循环体中使用'I'变量吗?

foreach
构造不适用于int

foreach
仅适用于数组和集合

对于备选方案,您可以使用:

int max = 5;
int[] arr = new int[max];

for (int i : arr) {

}
:

增强的for循环是5.0版Java SE平台中引入的一个流行特性。它的简单结构使我们能够通过为访问数组/集合的每个元素的循环演示而简化代码,而无需显式地表示从一个元素到另一个元素的方式


如果必须在循环中使用计数器变量,那么切换到对每个
使用
是没有意义的——本质上,这里的linter可能是错误的

如果确实要更改,则需要为每个
定义
之外的计数器,如下所示:

int i = 0; // your counter, now defined outside of the loop -- but still usable inside
for ( SomeItem e : SomeIterableObj ) { // the for-each loop
    // do something with the element, 'e'
    // do something with the counter, 'i'
    i++; // or manipulate the counter in whichever way you need to.
}

这样,您对每个
循环使用了一个
,但仍然可以使用一个计数器。

如果您在一个数组上迭代,foreach构造意味着您不需要数组索引

例如:

int[] myArrayValues = new int[4];

// code to fill up array ...

for (int specificValue : myArrayValues) {
    // specific value is a value from the array, do something useful with it
}
在这种情况下,specificValue在循环的第一次迭代中等于MyArrayValue[0],然后是MyArrayValue[1],MyArrayValue[2],最后是MyArrayValue[3]

注意,在上面的答案中,虽然有一个变量i,但它根本不是索引,并且将包含数组中的值(在这种情况下,在数组中填充值之前,它们都是0)

例如,要对数组中的值求和,我们可以这样做:

for (int i = 0; i < max_count; i++) {
  // I must use the value of 'i' in the for loop body

}
int[] items = new int[3];
items[0] = 3;
items[1] = 6;
items[2] = 7;

int sum = 0;

for( int value : items ) {
    sum += value;
}

// at this point sum = 16

可以将其视为“对于项中的每个值”

您不能,您必须维护一个单独的计数器。这只是一个警告,您可以,您必须在循环外保持一个单独的计数器,并在循环内递增。我不必担心
警告
…好的,谢谢您的评论,我会抑制它。好的,然后林特盲目地警告我。看来我必须压制这个警告。我赞成你的答案。谢谢。@Ehsan不客气。ssh的回答也很好。但这一条似乎更清楚,所以我会接受正确答案。@Ehsan没问题。但是我需要补充一点:在这种情况下,您需要检查
SomeIterableObj
大小与您的实际值是否相等。@Ehsan好的,请确保
i
的值在
SomeIterableObj.size()
的上下文中是有意义的(例如,如果您是通过这种方式访问iterable对象的大小)
i
可能不应超过此值。感谢您的简要解释。