Amit
Amit

Reputation: 44

I am trying to check for Anagram

Why the code is showing me the error for missing return statement?

What I am trying to do is check the length of the string followed by its content and compare both of them.

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

Upvotes: 0

Views: 94

Answers (1)

Suryakant Bharti
Suryakant Bharti

Reputation: 701

PRIMARY QUESTION

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.
}

Tested here - https://onlinegdb.com/S188-FdGL

EXTRA

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

Tested here - https://onlinegdb.com/rJe-OEtuGL

Upvotes: 2

Related Questions