Palindromnummerprogram i Java Bruker while & for Loop
⚡ Smart oppsummering
Palindromnummerprogram i Java bestemmer om en verdi leses identisk forover og bakover ved å reversere sifrene. Denne artikkelen presenterer algoritmen, en while-løkkeversjon, en for-løkkeversjon, en strengbasert metode, rekursjon, kanttilfeller og kompleksitetsanalyse med verifisert utdata.

Hva er palindromnummer?
A Palindrom nummer er et tall som forblir det samme tallet når det reverseres. For eksempel 131. Når sifrene reverseres, forblir det det samme tallet. Et palindromtall har refleksjonssymmetri på den vertikale aksen. Den samme ideen gjelder for et ord som har samme stavemåte når bokstavene reverseres.
Eksempler på palindromtall i Java
121, 393, 34043, 111, 555, 48084
Eksempler på palindromord
LOL, MADAM
Hvert enkelt siffer fra 0 til 9 er per definisjon et palindrom, fordi å reversere ett siffer produserer det samme sifferet.
Palindromtallalgoritme
Nedenfor er palindromnummeralgoritmens logikk i Java:
- Hent inndatanummeret som må sjekkes for å være en palindrome.
- Kopier tallet til en midlertidig variabel og reverser det.
- Sammenlign det omvendte og originale tallet.
- Hvis de er like, er tallet et «palindromtall».
- Ellers er ikke tallet et «palindromtall».
Selve reverseringen er den eneste delen som trenger forsiktighet. To aritmetiske operasjoner gjør alt arbeidet, og tabellen nedenfor traces dem for verdien 171.
| Pass | et (gjenværende tall) | sisteDigit = en % 10 | sum = (sum * 10) + sisteDigit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
Etter den siste gjennomgangen holder summen 171, som tilsvarer den opprinnelige inndataen, så tallet bekreftes som et palindrom.
Hvordan sjekke om inndatanummeret er palindrom eller ikke
Nedenfor er et palindromprogram i Java med en WHILE-løkke. Løkken fortsetter mens det gjenstår sifre, og print-setningene viser tilstanden til hver variabel under hver omgang.
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 Utgang:
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 for å sjekke palindrom ved å bruke for loop
Nedenfor er en Java program for palindrom ved bruk av en for-løkke. Overskriften inneholder exit-testen og divisjonen, så løkkekroppen må ikke dele seg igjen.
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 Utgang:
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 vanlig feil er å holde a = a / 10; inne i for-løkkens brødtekst mens overskriften allerede inneholder a /= 10Tallet deles deretter to ganger per omgang, halvparten av sifrene hoppes over, og et ekte palindrom som 121 rapporteres feilaktig som ikke et palindrom.
Palindromprogram i Java Bruk av streng Reverse
Ved å konvertere verdien til tekst kan StringBuilder reversere den i ett kall. Den samme metoden fungerer også for ord, som den numeriske tilnærmingen 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 Utgang:
true true false
Palindromprogram i Java Bruk av rekursjon
Rekursjon sammenligner det ytterste tegnparet og kaller deretter seg selv på den krympende midtre delen. Metoden stopper når færre enn to tegn gjenstår.
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 Utgang:
34043 is palindrome: true 12345 is palindrome: false
Kanttilfeller og metodesammenligning
Tre innganger ødelegger naive implementeringer, så hver versjon bør testes mot dem før bruk.
- Negative tall: Verdier som -121 er aldri palindromer, fordi minustegnet ikke har noen motpart på slutten. Beskytt deg med
if (inputNumber < 0) return false;. - Etterfølgende nuller: Verdien 100 reverseres til 1, så sammenligningen returnerer riktig usann. Bare tallet 0 i seg selv går mellom verdier som slutter på null.
- Heltallsoverløp: RevÅ slette et stort heltall, som for eksempel 1 999 999 999, kan overskride heltallsområdet. Deklarer sum som en long når inputen kan nærme seg grensen.
Tabellen nedenfor sammenligner de fire tilnærmingene som vises på denne siden.
| Metode | Tidskompleksitet | Romkompleksitet | Verk for ord | Merknader |
|---|---|---|---|---|
| Mens sløyfe | O (log n) | O (1) | Nei | Tydeligste demonstrasjon av sifferreversering |
| For sløyfe | O (log n) | O (1) | Nei | Identisk logikk, kun deling i overskriften |
| StringBuilder revers | O (n) | O (n) | Ja | Korteste kode, tildeler en ny streng |
| Rekursjon | O (n) | O(n)-stabel | Ja | Nyttig for intervjudiskusjoner om rekursjon |
Sifferet ekstracsjonsmønsteret som brukes her, dukker opp igjen i mange øvelser. Fortsett med Fibonacci-serien i Javaden Java program for å sjekke et primtall, og Bubble Sorter algoritmen inn JavaFor selve løkkesyntaksen, se gjennom for hver løkke i Java og bredere Java tutorial, og se Java strenger for den tekstbaserte metoden.
