0

在 Java 中,当使用 for 循环时,当然需要编写终止条件。这是我的 for 循环:

for(int i=1; i<=infix.length()-2; i++){
            if(infix.charAt(i)==' '){
                infix=infix.substring(0,i)+infix.substring(i+1);
            }

(中缀是我作为参数得到的字符串)。如您所见,我在循环中使用了子字符串,这缩短了中缀的长度,这意味着循环的终止条件在每次迭代后都会改变。
我的问题是:值“infix.length-2”是否保存在 for 的开头并且以后不会更改?或者它每次都会改变,如果是这样,我会发生什么?什么时候停止?是否有可能索引超出范围或类似情况?
非常感谢您!:D

4

5 回答 5

2

每个循环都会计算字符串长度,如果您的字符串变得太短,您for可能会抛出一个。IndexOutOfBoundsException

恕我直言,你的做法是一个非常糟糕的做法,for循环旨在进行确定数量的循环并且不应该停止,而且它们的停止条件也不应该在循环内改变,while如果你不知道你应该使用多少次迭代你想要做。但这是个人的看法:)

于 2013-09-08T20:32:58.923 回答
1

you can put multiple end criteria in a for loop, just for a sample syntax

for(int i = 0; i < 2 || i< 5; i++)
  System.out.println(i);
于 2013-09-08T20:38:21.297 回答
1

是的,您可以更改上限。不,它不会在循环开始时被缓存。是的,你做错的任何事情都可能导致错误——但这既不是特别危险也不是不常见的。相反,这很常见。

于 2013-09-08T20:33:05.753 回答
0
My question is this: Is the value "infix.length-2" saved at the beginning of the for and doesn't change later on? Or it changes every time, and if so, what happens with i? 

它随着 for 循环的每次迭代而变化。i 每次迭代都会增加。

When will the for stop? Is there a chance for an index out of bounds or something like that?

当终止条件为真时,for 循环将停止。

i<=infix.length()-2. 

i 初始化为 1 将导致循环终止,如果长度

如果您使用不正确的逻辑修改终止条件变量,那么您有可能陷入无限循环。

于 2013-09-10T02:16:46.957 回答
0

作为一个简短的提示:您的 for 循环等效于以下 while 循环

{
    int i=1;
    while(i<=infix.length()-2) {
        if(infix.charAt(i)==' '){
            infix=infix.substring(0,i)+infix.substring(i+1);
        }
        i++
    }
}   

这意味着 for 循环的条件以与 while 循环的条件相同的方式进行评估。它没有什么特别之处。

于 2013-09-08T21:56:15.430 回答