for循环条件中的终止变量是否可以在循环内更改?(Java)

时间:2013-09-08 20:30:28

标签: java for-loop

在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

5 个答案:

答案 0 :(得分:2)

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

恕我直言你是一个非常糟糕的做法,for循环旨在产生一定数量的循环,永远不应该停止,也不应该在循环中改变它们的停止条件,你应该使用{{ 1}}如果你不知道你想要做多少次迭代。但这是我的个人观点:)

答案 1 :(得分:1)

是的,您可以更改上限。不,它没有在循环开始时缓存。是的,任何你做错了可能会导致错误 - 但这并不是特别危险或不常见。相反,它很常见。

答案 2 :(得分:1)

您可以在for循环中放置多个结束条件,仅用于示例语法

for(int i = 0; i < 2 || i< 5; i++)
  System.out.println(i);

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

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

答案 4 :(得分: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循环的每次迭代而变化。每次迭代我都会增加。

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

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

i<=infix.length()-2. 

我初始化为1将导致循环终止

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