java - 我正在尝试检查 Anagram

标签 java algorithm return anagram

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

我想做的是检查字符串的长度及其内容并比较它们。

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");
    }
}

最佳答案

主要问题

You need to have a "return" outside if statements.

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

额外

Your Anagram logic is wrong.

The correct logic should be like this (follow comments to understand).

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

关于java - 我正在尝试检查 Anagram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60080135/

相关文章:

javascript - 如何在 JavaScript 中使用 ISO-8859-15 字符集生成字符串?

java - 如何在 Android API 级别 25 及以下使用 Reflection API getParameters?

algorithm - 通过平分(搜索)修订历史和不可测试的提交(修订)来查找错误

c# - 如何从 3D 图像生成 2D 平面

压缩/合并数字组合的算法

return - 订单与SBCL中的返回有关

c - 在 C 中实现反向功能时出现段错误

java - 在 Java 8 中使用 Lambda 进行异常处理

java - 主机JCL java调用

vb.net - Sub 如何更新它的参数?