【问题标题】:Comparing two strings in Java using charAt使用 charAt 比较 Java 中的两个字符串
【发布时间】:2020-02-05 16:23:30
【问题描述】:

我必须使用 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. 测试 - 测试 /
2. 测试 - 测试 /
3. 测试 - 测试 /
4. 测试 - 测试

实际输出:
1. 真的
2.假
3. 真的
4. 真的

预期输出:
1. 真的
2.假
3.假
4.假的

【问题讨论】:

  • 当第一个字符匹配时您不应该返回true,您必须继续查看其余部分。此外,无需比较 i != j 的字符(实际上甚至不需要有两个循环)。
  • 你只比较第一个字符然后返回true。请调试/单步调试您的代码,看看哪里出错了
  • 在 word1.charAt(i) == word2.charAt(i) 之后我应该返回什么?我明白为什么我的程序无法运行,但我不明白如何解决它
  • 为什么你有 2 个fors?您首先从word1 中获取char,然后与word2 中的所有内容进行比较,然后将word1 中的所有内容与word1 中的所有内容进行比较...
  • 当 2 个字符相等时,您不会返回任何内容。基本上您可以执行以下操作:1)比较长度,如果它们不同,则返回 false 2)循环遍历字符并比较它们。当您在 same 索引处找到 2 个不同的字符时,您将返回 false 3) 如果到达末尾,则字符串相等,因此您返回 true。

标签: java string charat


【解决方案1】:

您的代码有两个问题:
1.不需要双循环,您将第一个单词的每个字符与第二个单词的每个字符进行比较,这是错误的。一个循环就够了,比较word1.charAt(i) == word2.charAt(i)
2. 如果第一个字符相等,则返回 true,而不是继续其余单词。 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;
   }

【讨论】:

    【解决方案2】:

    当两个字符串的长度相同时,不需要两个循环。如果不匹配,也只需返回false。当循环结束时,意味着没有不匹配,并且可以返回true。

    【讨论】:

      【解决方案3】:

      您在代码有机会遍历整个字符串之前返回。

      仅在遍历整个字符串后返回。

      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.
      }
      

      【讨论】:

      • 为什么有两个循环?
      猜你喜欢
      • 2013-08-10
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 2012-06-19
      • 2012-02-08
      • 1970-01-01
      相关资源
      最近更新 更多