我已经在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"?我无法理解它 - 除了它实际上有效。
答案 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