поиск совпадающих символов между двумя строками - PullRequest
1 голос
/ 29 октября 2019
public class findMatching {
   public static void main(String[] args) {
      String matchOne = "caTch";
      String matchTwo = "cat";
      findMatching(matchOne, matchTwo);
   }

   public static void findMatching(String matchOne, String matchTwo) {
      int lengthOne = matchOne.length();
      int lengthTwo = matchTwo.length();
      char charOne;
      char charTwo;

      while(!matchOne.equals(matchTwo)) {
         for(int i = 0; i < lengthOne && i < lengthTwo; i++) {
            charOne = matchOne.charAt(i);
            charTwo = matchTwo.charAt(i);
            if(charOne == charTwo && lengthOne >= lengthTwo) {
               System.out.print(charOne);
            } else if (charOne == charTwo && lengthTwo >= lengthOne){
               System.out.print(charTwo);
            } else {
               System.out.print(".");
            }
         }
      }
   }
}

Я создал статический метод с именем findMatching , который принимает два параметра String и затем сравнивает их на предмет соответствия символов. Если совпадающие символы обнаружены, он печатает указанные символы, в то время как символы, которые не совпадают, обозначаются знаком «.»вместо этого.

EX: для caTch и cat ожидаемый результат должен быть ca..., если несовпадающие символы представлены знаком "."в более длинной строке.

Однако сейчас вывод моей программы выводит только ca., поскольку он печатает только несовпадающие символы для более короткой строки. Я полагаю, что источником проблемы может быть логика моих операторов if для lengthOne и lengthTwo .

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Ваш цикл for завершится, как только вы наберете длину более короткой строки, как вы делаете i < lengthOne && i < lengthTwo. Таким образом, вам нужно продолжать цикл до тех пор, пока вы не доберетесь до конца более длинной строки, но прекратите сравнение, когда более короткая строка не содержит символов.

Примерно так можно было бы выполнить эту работу

public static void findMatching(String matchOne, String matchTwo) {
  int lengthOne = matchOne.length();
  int lengthTwo = matchTwo.length();
  char charOne;
  char charTwo;

  for(int i = 0; i < lengthOne || i < lengthTwo; i++) {
    if(i < lengthOne && i < lengthTwo) {
        charOne = matchOne.charAt(i);
        charTwo = matchTwo.charAt(i);
        if (charOne == charTwo) {
           System.out.print(charTwo);
        } else {
           System.out.print(".");
        }
    } else {
       System.out.print(".");
    }

  }
}

Я не уверен, в чем смысл цикла while, поскольку он заставил бы программу работать вечно, однако, возможно, вы захотитечто как будто?

0 голосов
/ 29 октября 2019

Первый цикл for для печати всех общих и необычных (".") Символов, а второй цикл for для печати необычных символов (".") До разницы между строкой большего и меньшего размера с использованием абсолютного (abs)функция

код:

          for(int i = 0; i < lengthTwo && i < lengthOne; i++){
            if(matchOne.charAt(i) == matchTwo.charAt(i)){
             System.out.print(matchOne.charAt(i));
            }
            else{
             System.out.print(".");
            }
          }
          for(int j = 0; j < java.lang.Math.abs(lengthOne - lengthTwo);j++){
           System.out.print(".");
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...