我正在尝试检查 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的主要内容,如果未能解决你的问题,请参考以下文章
C# Anagram Checker 与 LinkedList
查找字符串中单词的 semordnilap(reverse anagram)