Сравнение двух строк в Java с использованием charAt - PullRequest
0 голосов
/ 08 октября 2019

Я должен сравнить две строки с помощью функции charAt () и вернуть true, если строки одинаковы, или false, если они не

public static boolean comparaStringhe(String word1, String word2) {
    if (word1.length() == word2.length()) {
        for (int i = 0; i < word1.length(); i++) {
            for (int j = 0; j < word2.length(); j++) {
                if (word1.charAt(i) == word2.charAt(j)) {
                    return true;
                } else {
                    return false;
                }
            }
        }
    }

    return false;
}

Сравнение следующих слов:
1. test - test /
2. тест - тест /
3. тест - тест /
4. тест-тест

Фактический результат:
1. true
2. false
3. true
4. true

Ожидаемый результат:
1. true
2. false
3. false
4. false

Ответы [ 3 ]

6 голосов
/ 08 октября 2019

Две проблемы с вашим кодом:
1. нет необходимости в двойном цикле, вы сравниваете каждый символ в первом слове с каждым символом на втором, это неправильно. достаточно одного цикла, и сравните word1.charAt(i) == word2.charAt(i)
2. вы возвращаете истину, если первый символ равен, и не переходите к остальным словам. return true должен идти только после того, как цикл for закончился

public static boolean comparaStringhe(String word1, String word2) {
        if (word1.length() == word2.length()) {
            for(int i=0; i<word1.length(); i++) {
                    if(word1.charAt(i) != word2.charAt(i)) {
                        return false;
                    }
            }
            return true;
        }

        return false;
   }
1 голос
/ 08 октября 2019

Нет необходимости в двух циклах, когда обе строки имеют одинаковую длину. Также просто верните false в случае несоответствия. Когда цикл закончится, это будет означать, что несоответствий не было и true может быть возвращено.

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

Вы возвращаетесь до того, как код сможет пройти всю строку.

возвратите только после прохождения всей строки.

for(int i=0; i<word1.length(); i++) 
{
    for(int j=0; j<word2.length(); j++) 
    {
        if(word1.charAt(i) == word2.charAt(j)) 
        {
            // return true; the code is not able to traverse through the whole string.
        } 
        else 
        {
            return false;
        }
    }
    return true; // The code has now traversed the whole string and can now say that the strings match. Thus return true.
}
...