繁体   English   中英

需要帮助来修复以下代码的arrayoutofboundary异常

[英]Need help to fix the arrayoutofboundary exception for the below code

如何修复以下代码的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));
    }
}

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

在侧面说明,您应该使rev数组足够大,以使整个字符串通孔

  Character rev[] = new Character[reverString.length()];
for(j = 0;j<= reverString.length()-1; ++j){

改成

 for(j = 0;j< reverString.length()-1; ++j){
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" ) );
    }
}

so

您初始化的rev的大小比reverString的长度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));
    }
}

您的来源中有很多问题,

  1. 要定义具有比acutual斯汀大小少一个长度的数组。

    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. 最后,您不需要单独的数组即可保存结果。 您可以将结果保存在StringStringBuilder

我在您的程序中注意到的几件事。 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)); } 

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM