1

我得到了第一个 for 循环的正确输出:for(int i=0;i<=name.length();i++)但不知道为什么我没有得到这个循环的任何输出:for(int i=name.length();i>=0;i--)。在执行时,我收到一条错误消息,指出索引超出范围。

我在这里检查错误,但我不明白。

public class runner {
    public static void main(String[] args) {
        String name = "java";
        System.out.println(".length method()" + name.length());// executing
                                                                // .length()
                                                                // method
        System.out.println(".charAt method()" + name.charAt(5));
        for (int i = 0; i <= name.length(); i++) {
            System.out.println(name.charAt(i));
        }
        for (int j = name.length(); j >= 0; j--) {
            System.out.println(name.charAt(j));
        }
    }
}

输出

j
a
v
a
4

5 回答 5

6

问题是i<=name.length();

你想要i<name.length();,因为长度超出了 String 中包装的 char 数组的范围。

出于同样的原因,您需要将第二个 for 循环更改为

for(int j=name.length()-1 ;j>=0;j--){
于 2013-08-14T17:34:15.223 回答
2

数组索引为 0,更改<=<

你每次打电话都会收到这个错误

name.charAt(name.length())
于 2013-08-14T17:34:48.907 回答
2

您有超出范围的异常,因为 Java 数组索引从零开始。例如,如果您有长度 = 5 的数组,则第一个元素的索引将为 0,最后一个元素的索引将为 4(长度 - 1)。

改变你的线路

for(int i=0;i<=name.length();i++){

for(int i=0;i<name.length();i++){

和线

for(int j=name.length();j>=0;j--){

for(int j=name.length()-1;j>=0;j--){
于 2013-08-14T17:35:56.693 回答
1

其他答案已经指出,索引在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);
  }
}

输出

NORMAL ORDER

j
a
v
a

REVERSE ORDER

a
v
a
j
于 2013-08-14T18:10:10.323 回答
0

永远记得检查数组可以拥有的最高索引。在您的情况下,该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()

于 2014-02-25T16:28:09.710 回答