反向 for 循环 - 需要解释
Reverse for-loop - explanation wanted
我在 java 中编程已经有一段时间了,但我只是回到基础知识并尝试真正理解正在发生的事情。
使用递减而不是递增的 for 循环反转字符串的语法是
for (int i = string.length() - 1; i >= 0; i--)
但是我不太明白为什么我要在.length()后面加上“-1”?这是我的代码。
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));
}
}
“-1”背后的逻辑是什么?我无法理解它 - 除了它确实有效。
如果一个字符串有 4 个字符,您将通过 charAt(0)
获得第一个字符,通过 charAt(3)
获得最后一个字符,因为索引是从零开始的。所以你的循环将从 3 开始到 0 结束,而不是从 4 开始。
您必须从 length - 1
开始,因为与许多其他 Java 列表和数组一样,字符串是 0 索引。这意味着它们的索引从 0 到 capacity - 1
.
尝试读取 capacity
的位置将导致 IndexOutOfBoundsException
这里的关键是 String
个对象由 char[]
支持。因此遍历字符串遵循任何其他 Java 数组的规则,其中 .length()
是数组的大小(计数、容量)。对任何数组(包括字符串)的索引都是基于 0 的,因此 "first" 槽中的项目使用 0 等进行访问。
如果分配的大小为 n,则数组从索引 0 开始到 n-1。
为防止出现 IndexOutOfBoundException,正确(最高)的有效索引为 n-1。
然而 array.lenght 将 return n。所以你必须移动索引。
如果您有一个字符串 "Test",则总长度为 4,但字符计数从 0 开始到 3 结束,并且如果您的循环中的字符串长度为 string.length() ,它会是 4,但它以 3 结尾。
所以这里你的循环将从 3 开始,到 0 结束。
所以为了避免 IndexOutOfBoundsException
变成 string.length()-1
我在 java 中编程已经有一段时间了,但我只是回到基础知识并尝试真正理解正在发生的事情。
使用递减而不是递增的 for 循环反转字符串的语法是
for (int i = string.length() - 1; i >= 0; i--)
但是我不太明白为什么我要在.length()后面加上“-1”?这是我的代码。
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));
}
}
“-1”背后的逻辑是什么?我无法理解它 - 除了它确实有效。
如果一个字符串有 4 个字符,您将通过 charAt(0)
获得第一个字符,通过 charAt(3)
获得最后一个字符,因为索引是从零开始的。所以你的循环将从 3 开始到 0 结束,而不是从 4 开始。
您必须从 length - 1
开始,因为与许多其他 Java 列表和数组一样,字符串是 0 索引。这意味着它们的索引从 0 到 capacity - 1
.
尝试读取 capacity
的位置将导致 IndexOutOfBoundsException
这里的关键是 String
个对象由 char[]
支持。因此遍历字符串遵循任何其他 Java 数组的规则,其中 .length()
是数组的大小(计数、容量)。对任何数组(包括字符串)的索引都是基于 0 的,因此 "first" 槽中的项目使用 0 等进行访问。
如果分配的大小为 n,则数组从索引 0 开始到 n-1。 为防止出现 IndexOutOfBoundException,正确(最高)的有效索引为 n-1。 然而 array.lenght 将 return n。所以你必须移动索引。
如果您有一个字符串 "Test",则总长度为 4,但字符计数从 0 开始到 3 结束,并且如果您的循环中的字符串长度为 string.length() ,它会是 4,但它以 3 结尾。
所以这里你的循环将从 3 开始,到 0 结束。
所以为了避免 IndexOutOfBoundsException
变成 string.length()-1