smurfymo
smurfymo

Reputation: 1

what is wrong with this code(palindrome checker)

hi am trying to write a palindrome checker code but if i enter "madam" it still tells me its not a palindrome please help. tell me whats causing it

import java.util.Scanner;

public class parlindrome
{
    String original, reverse = "";

    public void checkpalindrome(){

        Scanner h = new Scanner(System.in);
        System.out.println("enter a word : ");

        original = h.nextLine();

        int length = original.length();

        for(int i = length-1; i >= 0; i--)
        {
            {
                reverse = reverse + original.charAt(i);
                if(original.equals(reverse))
                {
                    System.out.println("entered word is a palindrom ");
                }
                else
                {
                    System.out.println("entered word is not a palindrome ");
                    break;
                }
            }
        }
    }

    public static void main(String[]args)
    {
        parlindrome k=new parlindrome();
        k.checkpalindrome();
    }
}

Upvotes: 0

Views: 101

Answers (4)

Rajesh
Rajesh

Reputation: 2155

Just remove validation part from for loop. Your code should be as below:

for (int i = length - 1; i >= 0; i--)
    reverse += original.charAt(i);

if (original.equals(reverse))
    System.out.println("entered word is a palindrom ");
else
    System.out.println("entered word is not a palindrome ");

h.close();

Upvotes: 0

Safwan Hijazi
Safwan Hijazi

Reputation: 2089

try this:

import java.util.Scanner;

public class parlindrome {

    public boolean checkpalindrome(String original) {
        String reverse = "";

        int length = original.length();

        for (int i = length - 1; i >= 0; i--) {
            reverse += original.charAt(i);
        }
        if (reverse.equals(original)) {
            System.out.println("entered word is a palindrom ");

            return true;
        }
        System.out.println("entered word is not a palindrom ");

        return false;

    }

    public static void main(String[] args) {
        Scanner h = new Scanner(System.in);
        System.out.println("enter a word : ");

        String original = h.nextLine();

        parlindrome k = new parlindrome();
        k.checkpalindrome(original);

    }
}

Upvotes: 0

user35443
user35443

Reputation: 6403

You could do it in a more effective way, using Java´s reverse.

public void checkpalindrome(){
    Scanner h = new Scanner(System.in);
    System.out.println("Enter a word: ");
    String original = h.nextLine();

    if(original.equals(new StringBuilder(original).reverse().toString()))
        System.out.println("Entered word is a palindrom");
    else
        System.out.println("Entered word is not a palindrom");
}

Upvotes: 0

Eran
Eran

Reputation: 393781

You should finish the loop that reverses the String before checking if it's a palindrome :

for(int i=length-1;i>=0;i--) {
    reverse=reverse+original.charAt(i);
}
if(original.equals(reverse)) {
    System.out.println("entered word is a palindrom ");
}

Also, if you want this method to work more than once, you should make reverse a local variable and initialize it to an empty String inside the method.

Upvotes: 1

Related Questions