Мне нужно написать метод Private static boolean textStartSeqEndSeq(String text, String Sequence).
Метод сравнивает текст и последовательность , где последовательность должна быть в начале и в конце текста. Таким образом, он должен содержаться в тексте как минимум дважды.
Например:
текст «ABCDEFG» и последовательность «AB» верны только частично, поэтому верните false.
текст «AB123AB» и последовательность «AB» вернут true.
Обычно это было бы легко, но вот ограничения:
[*]Нет вспомогательных методов, только один метод и основной метод.
[*]Нет циклов и массивов, только рекурсия.
[*]Используйте только isEmpty() , length(), substring() и charAt(), не используйте равенства().
Наверное, я слишком много думаю об этом, потому что уже давно застрял на этом, но все, что я получаю, это ошибка за ошибкой. Я просто не могу понять, что я делаю не так, к тому же я новичок, поэтому для вас это может показаться очевидным, и вы можете мне помочь. Вот код, который у меня есть:
private static boolean isStartAndEndSeq(String text, String sequence) {
// Base cases
if (text.isEmpty() || sequence.isEmpty() || sequence.length() > text.length()) {
return false;
}
if (sequence.length() * 2 > text.length()) {
return false; // Not enough room for sequence at both start and end
}
int i = 0, j = 0;
boolean start = false, end = false;
String case1 = text.substring(0, sequence.length() - 1);
String case2 = text.substring(text.length() - sequence.length());
// Check if `text` starts with `sequence` using recursion
if (!start) {
if (case1.charAt(i) != sequence.charAt(i)) {
return false;
}
return isStartAndEndSeq(text.substring(i + 1), sequence.substring(i + 1));
}
if (!end) {
if (text.charAt(j) != sequence.charAt(j)) {
return false;
}
return isStartAndEndSeq(text.substring( j + 1), sequence.substring(j + 1));
}
return start && end;
}
public static void main(String[] args) {
System.out.println(isStartAndEndSeq("AB123AB", "AB"));// Expected: true
System.out.println(isStartAndEndSeq("ABBA", "AB"));// Expected: false
System.out.println(isStartAndEndSeq("ottootto", "otto"));// Expected: true
System.out.println(isStartAndEndSeq("Golden Yacht", "acht"));// Expected: false
System.out.println(isStartAndEndSeq("blue whales are blue", "blue"));// Expected: true
System.out.println(isStartAndEndSeq("", "A"));// Expected: false
System.out.println(isStartAndEndSeq("A", ""));// Expected: false
System.out.println(isStartAndEndSeq("A B C D", " "));// Expected: false
}
}
И вот какие ошибки я получаю: обработка прекращается до того, как достигнет if (!end){}:
C:\Users\Administrator\.jdks\corretto-21.0.3-3\bin\java.exe "-javaagent:C:\Program Files\JetBrainsNew\IntelliJ IDEA Community Edition 2024.2.3\lib\idea_rt.jar=56733:C:\Program Files\JetBrainsNew\IntelliJ IDEA Community Edition 2024.2.3\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\Administrator\IdeaProjects\ProgrammersProgram\out\production\ProgrammersProgram Temp
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
at java.base/java.lang.String.checkIndex(String.java:4832)
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:46)
at java.base/java.lang.String.charAt(String.java:1555)
at Temp.isStartAndEndSeq(Temp.java:29)
at Temp.isStartAndEndSeq(Temp.java:32)
at Temp.main(Temp.java:45)
Process finished with exit code 1
Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-in-java
Как рекурсивно проверить, начинается ли строка и заканчивается ли она другой строкой в Java без функции равенства()? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение