Search code examples
javastringfor-looppalindrome

How to determine if user's input string is read the same backwards ( palindrome ) JAVA


package com.jetbrains;

import java.util.Objects;
import java.util.Scanner;

public class SA {

    public static void main(String[] args) {

        //scanner object
        Scanner input = new Scanner(System.in);

        //comment 
        System.out.println("Please enter a line of text below:");
        String letters = input.nextLine(); //User's string input

        if (letters.length() < 7) {
            System.out.println("The input is too short.");
        }

        //variables
        int l = letters.length()-5; //where the last 5 characters are located in user's input string
        String answer = letters.substring(l) + letters.substring(2,l) + letters.substring(0, 2); // first 2 & last 5 swapped


        if (letters.length() > 7) {
            System.out.println("Convert to upper cases:"); 
            System.out.println(letters.toUpperCase());

            System.out.println("Swap the first 2 characters with the last 5 characters:"); // Swap
            System.out.println(answer);

            System.out.println("Is it a palindrome?");

            for (int i = (letters.length() - 1); i >= 0; i--) {
                char backwards = (letters.charAt(i));

                for (int n = letters.indexOf(0); n >= 0; n++) {
                    char forwards = (letters.charAt(n));

                    if (Objects.equals(forwards, backwards)) {
                        System.out.println("True");
                        else
                           System.out.println("False");
                    }


                }
            }
        }

    }
}

I've tried comparing my user's input by making the for-loop outputs into char variables but it always returns false. I'm not sure how to fix this last bit, I've tried doing other things but I am completely stumped. My class hasn't learned StringBuilder or StringBuffer so I cannot use them in my code. Any tips or hints would be very helpful, thank you.


Solution

  • I have modified your code little bit to get the correct result -

    import java.util.Scanner;
    
    public class StringAnalysis {
    
        public static void main(String[] args) {
    
            //Create scanner object
            Scanner input = new Scanner(System.in);
    
            //Comment to the user
            System.out.println("Please enter a line of text below:");
            String letters = input.nextLine(); //User's string input
    
            if (letters.length() < 7) {
                System.out.println("The input is too short. No analysis to be performed.");
            }
    
            //variables
            int l = letters.length() - 5; //States the index number of where the last 5 characters are located in user's input string
            String answer = letters.substring(l) + letters.substring(2, l) + letters.substring(0, 2); // first 2 & last 5 swapped
    
    
            if (letters.length() > 7) {
                System.out.println("Analysis #1: Convert to upper cases:"); // Upper case
                System.out.println(letters.toUpperCase());
    
                System.out.println("Analysis #2: Swap the first 2 characters with the last 5 characters:"); // Swapping
                System.out.println(answer);
    
                System.out.println("Analysis #3: Is it a palindrome?");
    
    
                String backwards = "";
                for (int i = (letters.length() - 1); i >= 0; i--) {
                    backwards = backwards + letters.charAt(i);
                }
    
                if(letters.equalsIgnoreCase(backwards)) {
                    System.out.println("True");
                } else {
                    System.out.println("False");
                }
            }
        }
    }