首页 > 解决方案 > 我没有发现我的代码检查字谜字符串的错误

问题描述

如果字符串一个是另一个字符串的字谜,我必须编写一个应该测试的代码。但是我的代码不起作用。结果我每次都是假的。谁能解释我的错误在哪里?

public boolean anagram (String s1, String s2) {
    count = 0;
    for(int i = 0; i !=-1; i++) {
        if(s1.indexOf(s2.charAt(i)) != -1) {
        count++;
        temp = Integer.toString(s1.indexOf(s2.charAt(i)));
        s1.replace(temp,"");
    } if(count+1 == s1.length())
        return a == true;
    }

    return a == false;

标签: javastringanagram

解决方案


尝试这样的事情:

public boolean anagram (String s1, String s2) {
    int count = 0;
    boolean a = false;
    for (int i = 0; i < s2.length(); i++) {
        int s1index = s1.indexOf(s2.charAt(i));
        if (s1index != -1) {
        count++;
        s1 = s1.replaceFirst(String.valueOf(s1.charAt(s1index)),"");
        } 
    }
    if ((count == s2.length()) && (s1.length() == 0))
        a = true;
    return a;
    }

基本上测试应该在函数末尾和for循环外完成,并且您希望返回 的布尔值a,而不是的布尔值a == true(应该始终是false,因为从未在您的代码中a分配值) true.

编辑:我在最初的答案中纠正了两个错误,并添加了希望消除多次出现字母问题的代码(这就是为什么我的第一个答案在某些情况下不起作用的原因)。此代码修改s1字符串 - 如果您不希望这样做,只需s1temp = s1;在函数的开头执行并替换s1s1temp函数的其余部分。该代码还使用字符串的replaceFirst()方法 - 因为据我所知,该replace方法会删除所有出现的字母,但是您可以切换到从字符串中删除字符的其他替代方法(有关详细信息,请参阅此问题)。顺便说一句,您的temp方法错误地尝试替换索引一个字符,而不是实际字符,更不用说测试在从 0 开始递增的循环中i !=-1毫无意义。fori

注意:您可以在此处(在线 Java 编译器)验证它是否正常工作(每个步骤都打印在屏幕上)。


推荐阅读