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.
