0

如何修复以下代码的 arrayOutOfBoundException 错误消息。这对我来说似乎在逻辑上是正确的。但我不确定为什么会收到此错误。在这方面需要帮助

public class list  {

    public String reverseStr(String input){
        String reverString = input;
        int j=0;

        Character rev[] = new Character[reverString.length()-1];

        for(int i= reverString.length()-1;i> 0; --i){

            for(j = 0;j<= reverString.length()-1; ++j){
             rev[j] = reverString.charAt(i);
            }

        }
        String output = String.valueOf(rev[j]);
        return output;
    }

    public static void main(String args[]){
        String reverse = "Ambika";
        list li = new list();
        System.out.println("The reverse of " + reverse + " is " + li.reverseStr(reverse));
    }
}
4

6 回答 6

1

当内部 for 循环中断时, j 将超出数组边界。j--在行前添加String output = String.valueOf(rev[j]);

在旁注中,您应该使rev数组足够大以打孔整个字符串

  Character rev[] = new Character[reverString.length()];
于 2013-10-01T02:10:13.083 回答
0

我在你的程序中注意到了几件事。1. 反转字符串不需要两个循环,可以用一个循环遍历并增加j的值来移动。

int j=0;     
for(int i= reverString.length()-1;i>= 0; --i){           
             rev[j++] = reverString.charAt(i);
        }
  1. 其次,如果您注意到上面的循环,您会发现它实际上被调用了 6 次,因为 i 的值是 (5,4,3,2,1,0),所以您需要一个大小为 6 的数组,这意味着大小rev 应该是 6,即 reverString.length() 请参考下面的代码。

    public class List  {
    public String reverseStr(String input){
        String reverString = input;
        int j=0;
        char rev[] = new char[reverString.length()-1];
        for(int i= reverString.length()-1;i>= 0; --i){           
             rev[j++] = reverString.charAt(i);
        }
        String output =String.valueOf(rev);
        return output;
    }
    public static void main(String args[]){
        String reverse = "Ambika";
        List li = new List();
        System.out.println("The reverse of " + reverse + " is " + li.reverseStr(reverse));
    }
    

    }

于 2013-10-01T02:57:35.743 回答
0
for(j = 0;j<= reverString.length()-1; ++j){

改成

 for(j = 0;j< reverString.length()-1; ++j){
于 2013-10-01T02:10:41.783 回答
0
class Untitled {

    public static String reverse( final String s )
    {
        return new StringBuilder(s).reverse().toString();            
    }

    public static void main(String[] args) {
        System.out.println( reverse( "Josh" ) );
    }
}

hsoJ

于 2013-10-01T02:12:01.077 回答
0

您初始化rev的大小比长度小一reverString

 Character rev[] = new Character[reverString.length()-1];

将其更改为

Character rev[] = new Character[reverString.length()];

实际上,您对嵌套 for 循环的整个想法是一团糟。您可以按如下方式简化程序;

public class list {

    public String reverseStr(String input) {
        String reverString = input;
        int j = 0;

        char rev[] = new char[reverString.length()];

        for (int i = reverString.length() - 1; i >= 0; --i) {

            rev[j++] = reverString.charAt(i);
        }

        String output = new String(rev);
        return output;
    }

    public static void main(String args[]) {
        String reverse = "Ambika";
        list li = new list();
        System.out.println("The reverse of " + reverse + " is "
                + li.reverseStr(reverse));
    }
}
于 2013-10-01T02:19:55.430 回答
0

你的源码有很多问题,

  1. 您正在定义一个长度小于实际 Sting 大小的数组。

    Character rev[] = new Character[reverString.length()-1];

    本来应该是

    Character rev[] = new Character[reverString.length()-1];

  2. 使用索引打印值

    String output = String.valueOf(rev[j]);

    您可以使用for循环打印

    for (Character c : rev) System.out.print(c);

  3. 你不需要两个循环。一个循环就足够了,如下所示

    int j = 0; for (int i = reverString.length() - 1; i >= 0; --i) { rev[j] = reverString.charAt(i); j++; }

  4. 最后,您不需要单独的数组来保存结果。您可以将结果保存在 aStringStringBuilder中。

于 2013-10-01T02:27:23.013 回答