Java 字符串索引超出范围异常和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(长度-

我得到了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(长度-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