Palindromnummerprogram i Java Brug while & for Loop

⚡ Smart opsummering

Palindromnummerprogram i Java bestemmer, om en værdi læses identisk forlæns og baglæns ved at vende dens cifre. Denne artikel præsenterer algoritmen, en while-loop-version, en for-loop-version, en strengbaseret metode, rekursion, kanttilfælde og kompleksitetsanalyse med verificeret output.

  • 🔁 Kernedefinition: Et palindromnummer forbliver uændret, efter at dets cifre er byttet om, som med 131, 393 og 34043.
  • Reversal teknik: Moduloperatoren extracts det sidste ciffer, og heltalsdivision fjerner det, ét ciffer pr. gennemgang.
  • 🧮 Akkumulatorregel: Hver gennemløb ganges den løbende sum med ti, før den friske ekstraktion tilføjes.tracted ciffer.
  • 🔂 Loop-valg: En while-løkke og en for-løkke giver identiske resultater, forudsat at divisionen forekommer præcis én gang pr. iteration.
  • 🔤 Stringmetode: StringBuilder reverse sammenligner tekst direkte og fungerer for både ord og tal.
  • ⚠️ Edge Cases: Enkeltcifrede værdier er altid palindromer, negative værdier er det aldrig, og efterstillede nuller afbryder den numeriske sammenligning.
  • ⏱️ Kompleksitethedsprofil: Begge loopversioner kører i O(log n) tid proportionalt med cifferantallet og bruger O(1) ekstra plads.

Palindromnummerprogram i Java

Hvad er et palindromnummer?

A Palindrom nummer er et tal, der forbliver det samme tal, når det vendes om. For eksempel 131. Når cifrene vendes om, forbliver det det samme tal. Et palindromtal har refleksionssymmetri på den lodrette akse. Den samme idé gælder for et ord, der har samme stavemåde, når bogstaverne vendes om.

Eksempler på palindromtal i Java

121, 393, 34043, 111, 555, 48084

Eksempler på palindromord

LOL, MADAM

Hvert enkeltcifret værdi fra 0 til 9 er per definition et palindrom, fordi det at vende ét ciffer om producerer det samme ciffer.

Palindrom tal algoritme

Nedenfor er palindromnummeralgoritmens logik i Java:

  • Hent det inputnummer, der skal kontrolleres for at være et palindrom.
  • Kopier tallet ind i en midlertidig variabel og reverser det.
  • Sammenlign det omvendte og det oprindelige nummer.
  • Hvis de er ens, er tallet et "palindromtal".
  • Ellers er tallet ikke et "palindromtal".

Selve omvendingen er den eneste del, der kræver omhu. To aritmetiske operationer udfører alt arbejdet, og tabellen nedenfor traces dem for værdien 171.

Pass et (resterende tal) sidsteDigit = en % 10 sum = (sum * 10) + sidsteDigit a = a / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

Efter den sidste gennemgang holder summen 171, hvilket er lig med det oprindelige input, så tallet bekræftes som et palindrom.

Sådan kontrolleres, om inputnummeret er palindrom eller ej

Nedenfor er et palindromprogram i Java med en WHILE-løkke. Løkken fortsætter, mens der er cifre tilbage, og print-sætningerne viser tilstanden af ​​hver variabel under hver gennemgang.

package com.guru99;

public class PalindromeNum {

    public static void main(String[] args)
    {

        int lastDigit, sum = 0, a;
        int inputNumber = 171; //It is the number to be checked for palindrome

        a = inputNumber;

        // Code to reverse a number
        while(a > 0)
        {   System.out.println("Input Number " + a);
            lastDigit = a % 10; //getting remainder
            System.out.println("Last Digit " + lastDigit);
            System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10));
            sum = (sum * 10) + lastDigit;
            a = a / 10;

        }

        // if the given number equals sum then the number is a palindrome, otherwise not
        if(sum == inputNumber)
            System.out.println("Number is palindrome ");
        else
            System.out.println("Number is not palindrome");

    }

}

Code Output:

Input Number 171
Last Digit 1
Digit 1 was added to sum 0
Input Number 17
Last Digit 7
Digit 7 was added to sum 10
Input Number 1
Last Digit 1
Digit 1 was added to sum 170
Number is palindrome

Program til at kontrollere palindrom ved hjælp af for loop

Nedenfor er en Java Program for palindrom ved hjælp af en for-løkke. Headeren indeholder exit-testen og divisionen, så løkkekroppen må ikke dividere igen.

package com.guru99;

public class PalindromeNumForLoop {

    public static void main(String[] args)
    {

        int lastDigit, sum = 0, a;
        int inputNumber = 185; //It is the number to be checked for palindrome

        a = inputNumber;

        // Code to reverse a number
        for( ; a != 0; a /= 10 )
        {   System.out.println("Input Number " + a);
            lastDigit = a % 10; //getting remainder
            System.out.println("Last Digit " + lastDigit);
            System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10));
            sum = (sum * 10) + lastDigit;

        }

        // if the given number equals sum then the number is a palindrome, otherwise not
        if(sum == inputNumber)
            System.out.println("Number is palindrome ");
        else
            System.out.println("Number is not palindrome");

    }

}

Code Output:

Input Number 185
Last Digit 5
Digit 5 was added to sum 0
Input Number 18
Last Digit 8
Digit 8 was added to sum 50
Input Number 1
Last Digit 1
Digit 1 was added to sum 580
Number is not palindrome

⚠️ Advarsel: En hyppig fejl er at holde a = a / 10; inde i for-løkkens brødtekst, mens headeren allerede indeholder a /= 10Tallet divideres derefter to gange pr. gennemløb, halvdelen af ​​cifrene springes over, og et ægte palindrom som 121 rapporteres fejlagtigt som ikke et palindrom.

Palindrom-program i Java Brug af streng Reverse

Ved at konvertere værdien til tekst kan StringBuilder vende den tilbage i ét kald. Den samme metode fungerer også for ord, som den numeriske tilgang ikke kan håndtere.

package com.guru99;

public class PalindromeString {

    public static boolean isPalindrome(String text) {
        // ignore case so MADAM and madam behave identically
        String clean = text.toLowerCase();
        String reversed = new StringBuilder(clean).reverse().toString();
        return clean.equals(reversed);
    }

    public static void main(String[] args) {
        System.out.println(isPalindrome("121"));
        System.out.println(isPalindrome("MADAM"));
        System.out.println(isPalindrome("Java"));
    }
}

Code Output:

true
true
false

Palindrom-program i Java Brug af rekursion

Rekursion sammenligner det yderste tegnpar og kalder derefter sig selv på den krympende midtersektion. Metoden stopper, når der er færre end to tegn tilbage.

package com.guru99;

public class PalindromeRecursion {

    public static boolean isPalindrome(String text, int left, int right) {
        // base case: pointers met or crossed
        if (left >= right) {
            return true;
        }
        if (text.charAt(left) != text.charAt(right)) {
            return false;
        }
        return isPalindrome(text, left + 1, right - 1);
    }

    public static void main(String[] args) {
        String value = "34043";
        System.out.println(value + " is palindrome: "
                + isPalindrome(value, 0, value.length() - 1));

        String other = "12345";
        System.out.println(other + " is palindrome: "
                + isPalindrome(other, 0, other.length() - 1));
    }
}

Code Output:

34043 is palindrome: true
12345 is palindrome: false

Kanttilfælde og metodesammenligning

Tre input ødelægger naive implementeringer, så hver version bør testes imod dem før brug.

  1. Negative tal: Værdier som -121 er aldrig palindromer, fordi minustegnet ikke har nogen modstykke til sidst. Beskyt med if (inputNumber < 0) return false;.
  2. Efterfølgende nuller: Værdien 100 vender tilbage til 1, så sammenligningen returnerer korrekt falsk. Kun selve tallet 0 passerer mellem værdier, der ender på nul.
  3. Heltalsoverløb: RevSletning af et stort heltal, såsom 1,999,999,999, kan overskride heltalområdet. Deklarer sum som en long, når inputtet kan nærme sig grænsen.

Tabellen nedenfor sammenligner de fire tilgange, der er vist på denne side.

Metode Tidskompleksitet Rumkompleksitet Værker for ord Noter
Mens løkken O (log n) O (1) Ingen Tydeligste demonstration af ciffervending
Til sløjfe O (log n) O (1) Ingen Identisk logik, kun division i headeren
StringBuilder omvendt O (n) O (n) Ja Korteste kode, allokerer en ny streng
rekursion O (n) O(n) stak Ja Nyttig til interviewdiskussioner om rekursion

Cifferet extracDet her anvendte mønster optræder igen i mange øvelser. Fortsæt med Fibonacci-rækken i Java, Java program til at kontrollere et primtal, og Bubble Sorter algoritme ind JavaFor selve loop-syntaksen, gennemgå for hver løkke i Java og det bredere Java tutorial, og se Java strygere for den tekstbaserede metode.

Ofte Stillede Spørgsmål

Nej. Minustegnet vises kun foran, så -121 omvendt er 121-, hvilket aldrig matcher. Tilføj en tidlig vagt, der returnerer falsk for enhver værdi under nul.

Multiplikation flytter de allerede indsamlede cifre én plads til venstre, hvilket frigør enhedens plads til den nyligt udvundnetracciffer. Dette genopbygger tallet i omvendt rækkefølge.

Den omvendte værdi kan overstige det maksimale int-tal på 2147483647 og resultere i et negativt resultat. Deklarer akkumulatoren som en long, eller sammenlign værdierne som strenge i stedet.

Læs værdien med Scanner og nextInt, og send den derefter til den samme reverseringslogik. Pak læsningen ind i en try-blok, så ikke-numerisk input ikke får programmet til at gå ned.

Normalt ja, når de bliver bedt om at gennemgå koden eksplicit. De markerer det sjældent uopfordret, så test altid et kendt palindrom såsom 121 i stedet for at stole på et forbigående eksempel.

Spørgsmålet tester loopkontrol, heltalsaritmetik og kanttilfælde-ræsonnement på få linjer. Det afslører også, om en kandidat verificerer AI-genereret kode, før den indsendes.

Opsummer dette indlæg med: