Java: поиск первого общего символа между двумя строками - PullRequest
0 голосов
/ 20 февраля 2019

У меня проблемы с решением этой проблемы.Мне нужно создать метод с именем cercaCarattere, который принимает на вход две строки, сравнивает их и, если находит символ (первый, соответствующий), должен его вернуть, в противном случае должен возвращать '*'.Кроме того, в основном я должен прочитать две строки в цикле, пока символ, возвращаемый методом, и последний символ первой строки не станут разными.

Это код, который я написал

public class prova {

public static char cercaCarattere(String str1, String str2) {
    boolean isCommon = false;
    char letter;
    for(int i=0; i<str1.length() && i<str2.length(); i++) {
        if(str1.charAt(i) == str2.charAt(i)) {
            isCommon = true;
            letter = str1.charAt(i);
        } else {
            isCommon = false;
            letter = '*';
        }
    }

    return letter;
}

public static void main(String[] args) {
    Scanner stdin = new Scanner(System.in);
    String str1, str2;

    System.out.println("Inserire la stringa");
    str1 = stdin.nextLine();
    System.out.println("Inserire la stringa");
    str2 = stdin.nextLine();

    cercaCarattere(str1, str2);
}

В этом методе я подумал написать for для чтения обеих строк и проверки каждого символа, если они совпадают, и, если да, для его возврата, но этот возврат дает мне ошибку, потому что говорит:буква "не инициализирована.Как я могу решить?

Я не могу использовать Hashset, массивы или другие.

Ответы [ 4 ]

0 голосов
/ 20 февраля 2019

Решение потока Java 8:

  • для поиска соответствия char в соответствующей позиции
    public static char cercaCarattere(String str1, String str2) {
        return IntStream.range(0, Math.min(str1.length(), str2.length()))
            .filter(i -> str1.charAt(i) == str2.charAt(i))
            .mapToObj(str1::charAt)
            .findFirst()
            .orElse('*');
    }
  • для поиска первого соответствия char в любомположение:
    public static char cercaCarattere(String str1, String str2) {
        return str1.chars().mapToObj(c1 -> (char) c1)
            .filter(c1 -> str2.chars().mapToObj(c2 -> (char) c2).anyMatch(c2 -> c1 == c2))
            .findFirst()
            .orElse('*');
    }
0 голосов
/ 20 февраля 2019

Ciao Andrea, код не работает, потому что:

  • вы должны вернуться после letter = str1.charAt(i);
  • вы можете удалить isCommon, потому что вы не используете его

Итак, код стал:

public static char cercaCarattere(String firstString, String secondString) {
    char letter = '*';
    for (int i = 0; i < firstString.length() && i < secondString.length(); i++) {
        if (firstString.charAt(i) == secondString.charAt(i)) {
            return firstString.charAt(i);
        } 
    }
    return letter;
}
0 голосов
/ 20 февраля 2019

Как написано, ваш код не будет задачей, даже если компилятор не будет жаловаться на переменную.Причина, по которой компилятор выдает ошибку, заключается в том, что в случае, если обе ваши строки имеют нулевую длину, letter действительно остается неинициализированным.Вторая проблема заключается в том, что вы должны разорвать цикл, как только найдете совпадение, а код - нет.Правильный путь таков:

char letter = '*';
for(int i=0; i<str1.length() && i<str2.length(); i++) {
    if(str1.charAt(i) == str2.charAt(i)) {
        letter = str1.charAt(i);
        break;
    } 
}

return letter;
0 голосов
/ 20 февраля 2019

Сделайте следующие два изменения:

В вашем cercaCarattere(), как только вы обнаружите первый случай, вы можете вернуться рано.Также метод может быть упрощен до:

public static char cercaCarattere(String str1, String str2) {
    char letter = '*';
    for (int i = 0; i < str1.length() && i < str2.length(); i++) {
        if (str1.charAt(i) == str2.charAt(i)) {
            return str1.charAt(i);
        } 
    }
    return letter;
}

И, используйте значение , возвращаемое методом, чтобы распечатать его

System.out.println(cercaCarattere(str1, str2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...