簡體   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