我正在尝试检查 Anagram

Posted

技术标签:

【中文标题】我正在尝试检查 Anagram【英文标题】:I am trying to check for Anagram 【发布时间】:2020-05-21 14:58:16 【问题描述】:

为什么代码向我显示缺少返回语句的错误?

我要做的是检查字符串的长度,然后检查其内容并比较它们。

import java.util.Scanner;

public class Solution 
    static boolean isAnagram(String a, String b) 
        char[] arr1 = a.toLowerCase().toCharArray();
        char[] arr2 = b.toLowerCase().toCharArray();
        java.util.Arrays.sort(arr1);
        java.util.Arrays.sort(arr2);
        if (arr1.length != arr2.length) 
            if (!arr1.equals(arr2)) 
                System.out.println("Not Anagrams");
            
            return false;
         else if (arr1.equals(arr2)) 
            System.out.println("Anagrams");
            return true;
        
    

    public static void main(String[] args) 
        Scanner scan = new Scanner(System.in);
        String a = scan.next();
        String b = scan.next();
        scan.close();
        boolean ret = isAnagram(a, b);
        System.out.println((ret) ? "Anagrams" : "Not Anagrams");
    

【问题讨论】:

所有代码分支都需要返回一个值。如果 arr1 和 arr2 的长度不同且不相等,则不返回任何内容。 因为如果arr1.length == arr2.length 你什么都不返回。 就像他们说的那样,如果 arr1.length == arr2.length 并且它们不相等,您将不会返回任何东西。最好在每个方法的末尾设置一个默认的“return”,这样如果出现问题,你只需return false @Nils 即使我做了同样的事情,它也没有执行。显示同样的错误 @SteffenJacobs 做到了。继续显示相同的错误。 【参考方案1】:

主要问题

你需要在 if 语句之外有一个“return”。

else if(arr1.equals(arr2))
        
             System.out.println("Anagrams");
             return true;
          

return false; //add this here. I tested, error goes after this.

在这里测试 - https://onlinegdb.com/S188-FdGL

额外

你的 Anagram 逻辑是错误的。

正确的逻辑应该是这样的(跟着cmets理解)。

import java.util.Scanner;
import java.util.Arrays;

 public class Solution 

 static boolean isAnagram(String a, String b) 
    
        char[] arr1 = a.toLowerCase().toCharArray();
        char[] arr2 = b.toLowerCase().toCharArray();

        int n1 = arr1.length; 
        int n2 = arr2.length; 

        // If length is different, then they cannot be Anagram 
        if (n1 != n2) return false; 

        // Sort the Character Arrays 
        Arrays.sort(arr1); 
        Arrays.sort(arr2); 

        // Compare each characters of sorted Character Arrays,
        // if any character mismatches, it is not an Anagram
        for (int i = 0; i < n1; i++) 
            if (arr1[i] != arr2[i]) 
                return false; 

        // If all characters of both character Arrays are same,
        // only then, the String are Anagrams, so return true
        return true;

        // Also, remove the print statements from this method,
        // as you are already printing in the main method,
        // so it creates duplicate prints
    


    public static void main(String[] args) 

        Scanner scan = new Scanner(System.in);
        String a = scan.next();
        String b = scan.next();
        scan.close();

        boolean ret = isAnagram(a, b);
        System.out.println( (ret) ? "Anagrams" : "Not Anagrams" );
    

在这里测试 - https://onlinegdb.com/rJe-OEtuGL

【讨论】:

非常感谢。

以上是关于我正在尝试检查 Anagram的主要内容,如果未能解决你的问题,请参考以下文章

Swift Anagram 检查器

C# Anagram Checker 与 LinkedList

在 Python 中过滤数组中的 Anagram

查找字符串中单词的 semordnilap(reverse anagram)

从矩形中提取文本时的 ItextSharp anagram 输出

Python - 比较 2 个单词并检查它们是不是是字谜