Java 检查字符串数组输入的字谜

Java 检查字符串数组输入的字谜,java,arrays,string,anagram,Java,Arrays,String,Anagram,下面是我检查给定字符串数组的字谜的代码。 它总是给我假,即使在最简单的情况下只有一个输入。 我不明白是我没有正确地将字符串数组转换成字符串,还是我的算法完全错误 public class anagram { static boolean isAnagram(String[] s1, String[] s2) { String str = s1.toString(); String str2 = s2.toString(); if (st

下面是我检查给定字符串数组的字谜的代码。 它总是给我假,即使在最简单的情况下只有一个输入。 我不明白是我没有正确地将字符串数组转换成字符串,还是我的算法完全错误

public class anagram
{
     static boolean isAnagram(String[] s1, String[] s2) { 
        String str = s1.toString();
        String str2 = s2.toString();
        if (str.length() != str2.length()) 
            return false;

        for (int i =0; i<str.length();i++)
        { 
            for (int j = 0;j<str2.length();j++)
            { 
                if (s1[i] == s2[j]) {
                    return true; 
                }
                return false; 
            }                   
        } 
        return true; 
    }

    public static void main(String [] args){
        String [] s1 = {"shot"};
        String [] s2 = {"host"};
        System.out.println(isAnagram(s1,s2));
    }
}

您能帮我找出哪里出了问题吗?

字符串在Java中不是基本变量,因此您必须使用“==”来执行彻底的比较,而不是检查相等性。

您的检查算法似乎有点不正确。 在此处编辑了isAnagram函数:

public static void main(String[] args)
{
    String s1 = "shotaabb";
    String s2 = "hostbaba";
    System.out.printf("String s1: %s, String s2: %s%n", s1, s2);
    System.out.println(isAnagram(s1, s2) ?
            "Is anagram" : "Is not an anagram");
}

static boolean isAnagram(String s1, String s2)
{
    String str1 = new String(s1);
    String str2 = new String(s2);

    // Ensures that both strings are of the same length
    if (str1.length() != str2.length())
        return false;

    int str1Len = str1.length();
    for (int i = 0; i < str1Len; i++)
    {
        int charIndex = str2.indexOf(str1.charAt(i));

        if(charIndex == -1) // Not found in str2
            return false;
        else
        {
            // Remove the character from str2
            str2 = str2.substring(0, charIndex) +
                str2.substring(charIndex + 1);
        }
    }

    return true;
}
更新比较字符串数组:

更新代码的输出:


要检查两个字符串是否为字谜,不区分大小写,请使用以下方法:

public boolean isAnagram(String s1, String s2) {
    class SortChars{
        String sort(String source) {
            char[] chars = source.toLowerCase().toCharArray();
            Arrays.sort(chars);
            return new String(chars);
        }
    }
    SortChars sc = new SortChars();
    return sc.sort(s1).equals(sc.sort(s2));
}

解决方案取自盖尔·拉克曼·麦克道尔(Gayle Laakmann McDowell)所著的《破解编码采访》(cracking The Codeing Session)一书,它仍然给了我错误的答案。对不起,我问了一些基本的问题。我很感激!但是,如果我的输入是上面提到的字符串数组而不是字符串,那该怎么办呢?为什么要比较2个字符串数组而不是2个字符串?我真的不明白。这是给我的,我不知道也许是为了让我的生活更有压力。真有趣!谢谢你的帮助!出于好奇,当isAnagram有一个字符串数组输入时,我们该怎么办?那我们怎么解决呢?将字符串数组转换为字符串?如果isAnagram只返回一个布尔值,我认为传入两个字符串数组没有多大用处?在我看来,这在很大程度上取决于你试图用伊萨纳格拉姆实现什么。为什么我的问题被否决了?什么规则我没有遵守,这样我才能确保我不会再这样做?我想这只是格式问题?不知道为什么。向上投票以从负值中获取它;。
String[] strArr1 = {"shot", "dcba"};
String[] strArr2 = {"host", "abcd"};

for(String s1 : strArr1)
{
    for(String s2 : strArr2)
    {
        System.out.printf("%nString s1: %s, String s2: %s%n", s1, s2);
        System.out.println(isAnagram(s1, s2) ?
            "Is anagram" : "Is not an anagram");
    }
}
String s1: shot, String s2: host
Is anagram

String s1: shot, String s2: abcd
Is not an anagram

String s1: dcba, String s2: host
Is not an anagram

String s1: dcba, String s2: abcd
Is anagram 
public static bool IsAnagram(string firstString, string secondString)
{
    firstString = firstString.Replace(" ", "").ToLower();
    secondString = secondString.Replace(" ", "").ToLower();

    var firstStringArray = firstString.OrderBy(x => x);
    var secondStringArray = secondString.OrderBy(x => x);

    string s1 = new string(firstStringArray.ToArray());
    string s2 = new string(secondStringArray.ToArray());

    if (s1.Equals(s2))
    {
        return true;
    } else {
        return false;
    }          
}
public boolean isAnagram(String s1, String s2) {
    class SortChars{
        String sort(String source) {
            char[] chars = source.toLowerCase().toCharArray();
            Arrays.sort(chars);
            return new String(chars);
        }
    }
    SortChars sc = new SortChars();
    return sc.sort(s1).equals(sc.sort(s2));
}