反向循环 - 需要解释

时间:2015-06-17 14:13:43

标签: java string reverse

我已经在java中编程了一段时间,但我只是回到基础并尝试真正了解正在发生的事情。

使用递减而不是递增的for循环来反转字符串的语法是

for (int i = string.length() - 1; i >= 0; i--)

但我真的不明白为什么我要把" - 1"在.length()之后?这是我的代码。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    reverseVertical("laptop");
}

private static void reverseVertical(String string) {
    // TODO Auto-generated method stub

    for (int i = string.length() - 1; i >= 0; i--) {
        System.out.println(string.charAt(i));
    }

}

&#34>背后的逻辑是什么? - 1"?我无法理解它 - 除了它实际上有效。

5 个答案:

答案 0 :(得分:9)

如果一个字符串有4个字符,你将通过charAt(0)获得第一个字符,并通过charAt(3)获得最后一个字符,因为索引是基于零的。所以你的循环将从3开始,结束于0,而不是从4开始。

答案 1 :(得分:3)

你必须从length - 1开始,因为与许多其他Java列表和数组一样,字符串 0-indexed 。这意味着它们的索引从0到capacity - 1

尝试阅读capacity的位置会产生IndexOutOfBoundsException

答案 2 :(得分:1)

这里的关键是String个对象由char[]支持。因此,遍历字符串遵循任何其他Java数组的规则,其中.length()是数组的大小(计数,容量)。索引到任何数组(包括字符串)都是基于0的,因此使用0访问“第一个”插槽中的项目,依此类推。

答案 3 :(得分:1)

如果分配的大小为n,则数组从索引0开始,最多为n-1。 为防止IndexOutOfBoundException,正确(最高)的有效索引为n-1。 但是array.lenght将返回n。所以你必须转移索引。

答案 4 :(得分:0)

如果您有一个字符串“Test”,则总长度为4,但是charatcter计数从0开始并结束于3,如果您的循环中的字符串长度为string.length(),则它将为4但是它结束于3。

所以这里你的循环将从3开始并将结束于0。 所以要避免IndexOutOfBoundsException将其作为string.length() - 1