簡體   English   中英

ricorsive方法中的字符串索引超出范圍異常

[英]String Index Out Of Bounds Exception in ricorsive method

程序返回一個字符串,該字符串獲得兩個字符串的互換字符; 即字符串s1 =“ aceg”字符串s2 =“ hfdb”結果為“ abcdefgh”(兩個字符串的長度始終相同;

好吧,我以這種方式進行:

public class Eserc2 {

    public static String ricorsiveString(String s1, String s2) {

        if(s1.length() == 0 && s2.length() == 0) {
            return "";
        } else {

            char c = s1.charAt(0);
            char b = s2.charAt(s2.length()-1);

            String s = String.valueOf(c) ;
            String t = String.valueOf(b) ;
            String tot = s+t ;

            return tot + ricorsiveString(s1.substring(1),s2.substring(s2.length()));
        }
    }

    public static void main(String[] args) {

        String a = "aceg";
        String b = "bdfh";
        ricorsiveString(a,b);

    }
}

問題是當我編譯pc時發現異常:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.charAt(String.java:658)
    at eserc2.Eserc2.ricorsiveString(Eserc2.java:20)
    at eserc2.Eserc2.ricorsiveString(Eserc2.java:26)
    at eserc2.Eserc2.main(Eserc2.java:34)

你能幫我嗎???

 if(s1.length() == 0 && s2.length() == 0) {

應該

 if(s1.length() == 0 || s2.length() == 0) {

問題是,如果s2為空而不是s1

if(s1.length() == 0 && s2.length() == 0)

將為假( s1不為空),但此行:

s1.length() == 0 && s2.length() == 0

將嘗試訪問位置-1處的字符。

注意:如果您逐步調試了程序,則發現問題的時間將比鍵入問題所需的時間短!

該行沒有做您想要的事情(s2.substring(s2.length())調用始終為您提供長度為0的字符串)

return tot + ricorsiveString(s1.substring(1),s2.substring(s2.length()))

它應該替換為

return tot + ricorsiveString(s1.substring(1),s2.substring(0, s2.length() - 1));

作為設計選擇,您還應該測試傳遞的字符串是否符合您的前提,即它們必須具有相同的長度。 或者,將&&測試更改為||。 (正如其他人所建議的那樣)將使代碼在不同長度的字符串上工作。

您所說的條件不正確,應為:

if(s1.length() == 0 || s2.length() == 0) {

因為如果任何可變長度為零,則代碼不應執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM