Java字符串单词反转代码中for循环end变量取值疑问
关于Java字符串单词反转代码中for循环变量的疑问
代码实现
import java.util.*; public class stringProblems { static void reverse(char str[], int start, int end){ char temp; while(start <= end){ temp = str[start]; str[start] = str[end]; str[end] = temp; start++; end--; } } static char[] reverseWords(char[] s){ int start = 0; for(int end = 0; end < s.length; end++){ if(s[end] == ' '){ reverse(s, start, end); start = end + 1; } } reverse(s, start, s.length -1); reverse(s, 0, s.length-1); return s; } public static void main(String[] args) { System.out.println("enter the string to be reversed"); Scanner ss = new Scanner(System.in); String s = ss.nextLine(); char[] p = reverseWords(s.toCharArray()); System.out.println(p); } }
问题解答
回到for循环时,end的取值是2,原因如下:
Java的for循环遵循固定执行流程:
- 初始化变量:
int end = 0 - 判断循环条件:
end < s.length,成立则进入循环体 - 执行循环体内部代码(包括触发if条件时的reverse调用和start赋值)
- 执行循环变量的递增操作:
end++ - 回到步骤2,重新判断条件
针对输入"I like ice cream!"的场景:
- 当
end=1时,触发if条件,执行完reverse方法和start = end +1后,循环体执行完毕 - 紧接着执行
end++,此时end的值从1变为2 - 之后回到循环条件判断,继续后续的遍历流程
内容的提问来源于stack exchange,提问作者sriram
相关产品推荐
相关产品推荐

