Програмата връща низ, получен чрез обмен на символи от два низа; т.е. string 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)
Можете ли да ми помогне моля ???
Отговори:
1 за отговор № 1 if(s1.length() == 0 && s2.length() == 0) {
би трябвало
if(s1.length() == 0 || s2.length() == 0) {
1 за отговор № 2
Проблемът е дали s2
е празно, но не s1
:
if(s1.length() == 0 && s2.length() == 0)
ще бъде невярно (s1
не е празен), но този ред:
s1.length() == 0 && s2.length() == 0
ще се опита да осъществи достъп до символ на позиция -1.
Забележка: ако сте дебъгвали програмата си стъпка по стъпка, бихте намерили проблема за по-малко време, отколкото ви трябваше да въведете въпроса си!
1 за отговор № 3
Този ред не прави това, което искате (повикването 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));
Като избор на дизайн, трябва също да тестватепреминалите низове отговарят на вашето предварително условие, че те трябва да бъдат с еднаква дължина. Алтернативно, променяйки теста && на || (както други предложиха) ще направи кода да работи на низове с различна дължина.
0 за отговор № 4
Условието, което сте посочили, е неправилно:
if(s1.length() == 0 || s2.length() == 0) {
защото ако някоя от променливата дължина е нула, кодът не трябва да се изпълнява.