我希望能够将for
循环拆分为方法,然后将for
方法放在for
循环中,以便于阅读。下面说明了这一点:
for(int member = firstMember; member < arrayOfMembers.length; member++) {
[...] other code
}
应该重构为:
private boolean eachMemberInList() {
return int member = firstMember; member < arrayOfMembers.length; member++);
}
public static void main(String[] args) {
for(eachMemberInList());
}
这可能吗?
答案 0 :(得分:11)
不,您不能返回或以其他方式操纵for
循环,就像它是Java中的对象一样。
但是,您尝试做的事情是不必要的。您可以直接在"enhanced" for
loop, since Java 1.5中使用数组。
for (int member : arrayOfMembers) { ... }
它比尝试创建一个操作for
循环的方法更简洁,它比您尝试替换的标准for
循环更简洁。
答案 1 :(得分:3)
你正在谈论的是将for循环转变为while循环。
for (; true; )
相当于
while (true)
因此,您的解决方案可以被视为
while (someFunctionIsTrue()) {}
不想在这里进行宗教辩论,但一般来说,如果你在一系列对象上进行迭代,那么你真的想要使用for lop。不一定是因为它与使用您的解决方案的while循环有任何不同,但因为它是惯用的。当开发人员(经验丰富的开发人员)看到for循环时,您选择for循环的事实告诉他们一些东西。它说,嘿,我在迭代容器的对象。什么时候循环说,是有一些条件,虽然这种情况是真的做某事。
while循环和for循环的功能相同。通过惯用法使用它们,您可以更简洁,更清晰地传达您的代码。例如:
int index = 0;
while (index < array.size) {
doSomethingWithArrayElement(array[index]);
index++;
}
这不简洁。挂起变量声明创建了一行额外的代码,最后的索引++也是如此。当你这样做时:
for(int i = 0; i < array.size; i++) {
doSomething(array[i]);
}
这非常简洁,你使用for循环...如果像这样使用,会立即告诉开发人员这个容器的所有项目都将完成它们!
现在让我们使用替代示例,其中我们有一个返回布尔值的函数。这个布尔值告诉循环是否继续。我们可以这样做:
int index = 0;
for (; doSomethingWithArrayItem(array, index); index++){
}
boolean doSomethingWithArrayItem(array, index) {
//blah blah blah
if (index + 1 == array.size) return false;
return true;
}
这可以实现你想要的,但是很难遵循逻辑。让我们说你将doSomething函数命名为有用的东西,比如
incrementValueByTwo(item);
您认为这个功能有什么作用?它非常清楚正确。现在,让我们将此函数放在上面的for循环中:
int index = 0;
for (; incrementValueByTwo(array, index); index++){
}
我们递增了多少个值?我们将数组的所有值递增2吗?他们中有一些?第一个?或者在某些情况下也许没有一个?这是非常混乱!!!!不要这样做!
答案 2 :(得分:0)
我宁愿做类似
的事情String[] array = new String[10];
for(String variable : array){
doSomething(variable);
}
或者,如果您使用的是Java 8,那么
Arrays.stream(array).forEach(memberOfArray -> doSomething(memberOfArray));
这更具可读性。