[英]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.