Java 字符串索引超出范围异常和for循环不工作
我得到了first for循环的正确输出:Java 字符串索引超出范围异常和for循环不工作,java,Java,我得到了first for循环的正确输出:for(int i=0;i问题是i问题是i数组是0索引的,change数组是0索引的,change您有越界异常,因为Java数组索引从零开始。例如,如果您有长度为5的数组,那么第一个元素的索引将是0,最后一个元素的索引将是4(长度-1) 换线 for(int i=0;i<=name.length();i++){ 到 您有越界异常,因为Java数组索引从零开始。例如,如果您有长度为5的数组,则第一个元素的索引将为0,最后一个元素的索引将为4(长度-
for(int i=0;i问题是i问题是i数组是0索引的,change数组是0索引的,change您有越界异常,因为Java数组索引从零开始。例如,如果您有长度为5的数组,那么第一个元素的索引将是0,最后一个元素的索引将是4(长度-1)
换线
for(int i=0;i<=name.length();i++){
到
您有越界异常,因为Java数组索引从零开始。例如,如果您有长度为5的数组,则第一个元素的索引将为0,最后一个元素的索引将为4(长度-1)
换线
for(int i=0;i<=name.length();i++){
到
其他答案已经指出,在java(和大多数其他编程语言)中,索引从零开始
由于您似乎是java新手,因此这里提供了一个没有显式使用索引的示例
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test
{
public static void main(String[] args)
{
String name = "java";
System.out.println("NORMAL ORDER\n");
for (char c : name.toCharArray()) // for each loop
System.out.println(c);
System.out.println("\nREVERSE ORDER\n");
List<Character> chars = new ArrayList<Character>(); // it's not possible to use primitive types as generic parameter
for (char c : name.toCharArray()) // we fill the chars list
chars.add(c); // autoboxing from char to Character
Collections.reverse(chars);
for (char c : chars)
System.out.println(c);
}
}
其他答案已经指出,在java(和大多数其他编程语言)中,索引从零开始
由于您似乎是java新手,因此这里提供了一个没有显式使用索引的示例
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test
{
public static void main(String[] args)
{
String name = "java";
System.out.println("NORMAL ORDER\n");
for (char c : name.toCharArray()) // for each loop
System.out.println(c);
System.out.println("\nREVERSE ORDER\n");
List<Character> chars = new ArrayList<Character>(); // it's not possible to use primitive types as generic parameter
for (char c : name.toCharArray()) // we fill the chars list
chars.add(c); // autoboxing from char to Character
Collections.reverse(chars);
for (char c : chars)
System.out.println(c);
}
}
始终记得检查数组可以具有的最高索引。在您的情况下,name.length()
函数返回字符串名称的大小
假设您的字符串是“JAVA”,它包含4个字符。因此name.length()
将返回4
但请注意,每个字符的索引为:
'J' - 0
'A' - 1
'V' - 2
'A' - 3
当您将索引计数器设置为4时,它会尝试访问数组边界中不存在的内容。因此会引发ArrayIndexOutOfBoundsException
为了解决您的问题,请将所有name.length()
调用到name.length()-1
。或者修改For循环,使其不包括计数器等于name.length()
时的大小写。请始终记住检查数组可以具有的最高索引。在您的情况下,请使用name.length()
函数返回字符串名称的大小
假设您的字符串是“JAVA”,它包含4个字符。因此name.length()
将返回4
但请注意,每个字符的索引为:
'J' - 0
'A' - 1
'V' - 2
'A' - 3
当您将索引计数器设置为4时,它会尝试访问数组边界中不存在的内容。因此会引发ArrayIndexOutOfBoundsException
为了解决您的问题,请将所有name.length()
调用放入name.length()-1
。或者修改For循环,使其不包含计数器等于name.length()
时的大小写。在Java中,类名应大写(Runner
,而不是Runner
),请在粘贴代码之前运行格式化程序。为了简化下面的所有答案,索引从0开始,这意味着最大可访问索引的长度为1。因此,索引必须在0范围内,这可能也很有趣。更改在Java中,类名应大写(Runner
而不是Runner
),请在粘贴代码之前运行格式化程序。为了简化下面的所有答案,索引从0开始,这意味着最大可访问索引长度为1。因此,索引必须在0范围内,这也可能是有趣的。
for(int j=name.length();j>=0;j--){
for(int j=name.length()-1;j>=0;j--){
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test
{
public static void main(String[] args)
{
String name = "java";
System.out.println("NORMAL ORDER\n");
for (char c : name.toCharArray()) // for each loop
System.out.println(c);
System.out.println("\nREVERSE ORDER\n");
List<Character> chars = new ArrayList<Character>(); // it's not possible to use primitive types as generic parameter
for (char c : name.toCharArray()) // we fill the chars list
chars.add(c); // autoboxing from char to Character
Collections.reverse(chars);
for (char c : chars)
System.out.println(c);
}
}
NORMAL ORDER
j
a
v
a
REVERSE ORDER
a
v
a
j
'J' - 0
'A' - 1
'V' - 2
'A' - 3