Вхождения строки в другую строку с использованием вложенных циклов

упражнение, предлагающее использовать только циклы, а не функции построения или массивы, помогает на всех сайтах, использующих массивы и функции построения. Мне потребовалась неделя, чтобы добраться до кода, и я изучил множество испытаний и искал похожий набор проблем, но все помогало, а не доходил до последнего шага. вход: строка 1: ооо строка 2: Уууууууу

выход: 7 это не правильно

вывод должен быть (3) мой код работает при вводе всех строк, но неверен при дублировании букв

    Scanner input = new Scanner(System.in);
    String text1 = input.nextLine();
    String text2 = input.nextLine();
    int res = 0;
    for (int i=0;i<text2.length()-text1.length();i++)
    {
       if (text1.charAt(0) == text2.charAt(i))
       {
          boolean found = true;
          for (int j=0;j<text1.length() && found;j++)
              if (text1.charAt(j) != text2.charAt(i+j))
                  found = false;
          if (found)
              res++;
       }
    }
    System.out.println(res);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
133
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы почти там. Со следующими изменениями ваш код будет работать так, как ожидалось:

  1. Увеличивайте i на text1.length() - 1 каждый раз, когда находят text1 и j == text1.length(). После того, как вы увеличите i на text1.length() - 1, часть увеличения цикла увеличит i на 1, что приведет к увеличению i на text1.length().
  2. Измените условие с i < text2.length() - text1.length() на i < text2.length().
  3. Измените условие с j<text1.length() && found на j < text1.length() && found && i + j < text2.length().

Вы также можете сделать свою программу более эффективной, разорвав внутренний цикл, как только условие text1.charAt(j) != text2.charAt(i + j) станет true.

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the substring: ");
        String text1 = input.nextLine();
        System.out.print("Enter the string to search into: ");
        String text2 = input.nextLine();
        int res = 0;
        for (int i = 0; i < text2.length(); i++) {
            if (text1.charAt(0) == text2.charAt(i)) {
                boolean found = true;
                int j;
                for (j = 0; j < text1.length() && found && i + j < text2.length(); j++) {
                    if (text1.charAt(j) != text2.charAt(i + j)) {
                        found = false;
                        break;
                    }
                }
                if (j == text1.length() && found) {
                    res++;
                    i += text1.length() - 1;
                }
            }
        }
        System.out.println(res);
    }
}

Пример запуска:

Enter the substring: ooo
Enter the string to search into: Wooooooooow
3

спасибо за вашу помощь, но когда я проверяю ввод: строка 1: строка 2: студенты усердно работают на факультете - вывод: 3 неверный вывод, должно быть 4.

Mohamed Elkady 12.12.2020 09:05

Я пытаюсь продолжить этот курс, и я продолжил курс, чтобы понять этот набор проблем.

Mohamed Elkady 12.12.2020 09:13

Не могли бы вы помочь всем посетителям, таким как я, найти это решение с точными алгоритмами для достижения этой идеи.

Mohamed Elkady 12.12.2020 09:22

@MohamedElkady - это хорошая идея. Как-нибудь сегодня сделаю.

Arvind Kumar Avinash 12.12.2020 09:30

когда я снова проверю string1:the - string2:студенты усердно работают на инженерном факультете, потому что им это нравится - вывод - ошибка, пожалуйста, проверьте еще раз @Arvind Kumar Avinash - по этой причине я прошу алогрифемы - попробуйте (ооо / Уууууууу) и (/ студенты усердно работают на факультете)

Mohamed Elkady 12.12.2020 11:56

вы ... (что я могу сказать) Спасибо, но эта проблема, я думаю, на всех сайтах не завершена, пока не знаю, я собираюсь прекратить изучение этого курса, чтобы изучить это решение.

Mohamed Elkady 12.12.2020 12:20

@MohamedElkady - я представил блок-схему, чтобы вам и будущим посетителям было легче понять программу. Меня не будет на пару часов. Не стесняйтесь оставлять заметки в случае каких-либо проблем / сомнений, и я рассмотрю это, как только вернусь.

Arvind Kumar Avinash 12.12.2020 12:34

При обнаружении нужно пропустить найденный текст.

Поскольку цикл выполняет i++, это означает:

if (found) {
    res++;
    i += text1.length() - 1;
}

ОБНОВЛЯТЬ

Кроме того, код не найдет подстроку, если она находится в конце строки, потому что внешний цикл заканчивается раньше, поэтому замените < на <=:

for (int i = 0; i <= text2.length() - text1.length(); i++) {

Это не удастся для ввода, строка 1: the и строка 2: the studentsth aretworkingthehardinthefacultyofthe.

Arvind Kumar Avinash 12.12.2020 09:15

@Andreas, не могли бы вы сделать свое решение и блок-схему для изучения и проведения тестов, чтобы выявить ошибки. Спасибо

Mohamed Elkady 12.12.2020 13:12

@MohamedElkady А? Вы попросили помочь выяснить, что не так с вашим кодом, и этот ответ полностью охватывает это. StackOverflow не является учебным сайтом, поэтому я не уверен, о чем еще вы спрашиваете. Если вам нужна блок-схема, нарисуйте ее.

Andreas 12.12.2020 13:22

@Андреас, эта программа стала путем обучения для меня или кого-либо еще, и если будет много дискуссий, тем больше информации и технологий мы узнаем. Спасибо

Mohamed Elkady 12.12.2020 13:27

Другие вопросы по теме